Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: zuviele Daten im Array

    webald

    • modified Team
    • Beiträge: 2.791
    zuviele Daten im Array
    am: 01. Juni 2015, 15:03:16
    Ich habe:
    Code: SQL  [Auswählen]
    $customer_groups_qry=xtc_db_query("SELECT `customers_status_id` FROM `customers_status` GROUP BY customers_status_id");
    while($customer_groups_ary[]= xtc_db_fetch_array($customer_groups_qry));
    print_r($customer_groups_ary);
     
    und das kommt raus:
    Zitat
    Array (
    • => Array ( [customers_status_id] => 0 ) [1] => Array ( [customers_status_id] => 1 ) [2] => Array ( [customers_status_id] => 2 ) [3] => Array ( [customers_status_id] => 3 ) [4] => Array ( [customers_status_id] => 4 ) [5] => )
    tatsächlich gibt es in der DB nur die Werte 1-4. Aber wo zum Henker kommt "[5] =>  " her?

    Linkback: https://www.modified-shop.org/forum/index.php?topic=33090.0
    Modulshop - Eine große Auswahl an neuen und hilfreichen Modulen für die modified eCommerce Shopsoftware

    web0null

    • Experte
    • Beiträge: 1.998
    Re: zuviele Daten im Array
    Antwort #1 am: 01. Juni 2015, 15:30:49
    Lies dir mal die while durch,
    ...Die Bedingung wird jedes Mal am Anfang der Schleife überprüft...
    bedeutet in deinem Fall, es kommt bei bzw. (nach dem) letzten Durchgang folgendes raus,
    if ($customer_groups_ary[] = '')
    die Bedingung ist jetzt zwar "false", aber zugewiesen hast du es dem Array trotzdem.

    Gruß

    webald

    • modified Team
    • Beiträge: 2.791
    Re: zuviele Daten im Array
    Antwort #2 am: 01. Juni 2015, 15:42:23
    Daran hatte ich nicht gedacht. Also geht es doch nicht ganz kurz. Danke

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.988
    • Geschlecht:
    Re: zuviele Daten im Array
    Antwort #3 am: 01. Juni 2015, 16:02:49
    Wenn das $customer_groups_ary bereits existiert und Werte enthält und du die neuen Werte aus xtc_db_fetch_array($customer_groups_qry) hinzufügen möchtest, gibt es, wie bereits in einem anderen Thread von dir bzgl. Arrays erwähnt, genügend Array-Funktionen die alles mögliche bewerkstelligen können. Oft ist, wie von mir bereits erwähnt, array_merge_recursive() sehr nützlich.
    Du müsstest mal genauer sagen was du erreichen möchtest.

    Gruß,
    noRiddle

    webald

    • modified Team
    • Beiträge: 2.791
    Re: zuviele Daten im Array
    Antwort #4 am: 01. Juni 2015, 16:12:15
    Hi noRiddle,

    hat mit meinen anderen Sachen gerade nur indirekt zu tun. Ich schreibe gerade ein Script um einen Shop automatisisert mit Demo-Daten (Kunden, Adressen, Artikel, Bildern und Bestellungen) zu füllen. U. a. kann man dann Kunden in zufällige Kundengruppen packen, aber die sollte es dann auch geben.

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.988
    • Geschlecht:
    Re: zuviele Daten im Array
    Antwort #5 am: 01. Juni 2015, 17:07:40
    Gut und schön. Was soll denn aber nachher in dem Array $customer_groups_ary stehen ?
    Aus der von dir versuchten Syntax mit den eckigen Klammern hinter der Variablen ($customer_groups_ary[]) deutete ich, daß du ein bereits vorhandenes Array erweitern willst.

    Gruß,
    noRiddle

    webald

    • modified Team
    • Beiträge: 2.791
    Re: zuviele Daten im Array
    Antwort #6 am: 01. Juni 2015, 17:31:10
    Code: PHP  [Auswählen]
    // Create Data - Start //////////////////////

    $customer_groups_qry = xtc_db_query("SELECT `customers_status_id` FROM `customers_status` GROUP BY customers_status_id");
    while($custgrp = xtc_db_fetch_array($customer_groups_qry)){
            $customer_groups_arr[]=$custgrp['customers_status_id'];
    }

    if(isset($_POST['addresses']) && ($_POST['addresses']=='create')){
            if(isset($_POST['customer_qty']) && isset($_POST['customer_qty'])>0){
                    $qty_new_customers = isset($_POST['customer_qty'])?$_POST['customer_qty']:'0';
                    $qty_new_address_min = isset($_POST['address_qty_min'])?$_POST['address_qty_min']:'1';
                    $qty_new_address_max = isset($_POST['address_qty_max'])?$_POST['address_qty_max']:'1';
                    $new_customer_group = isset($_POST['customer_group'])?$_POST['customer_group']:'0';
                    $dmy_addresses = new TestAddress();
                    $dmy_date = date("Y-m-d H:i:s");
                   
                    for ($i = 1; $i <= $qty_new_customers; $i++) {
                            $dmy_address = $dmy_addresses->getDummyAddress();
                            if(isset($_POST['customer_group']) && ($_POST['customer_group']) != '-1'){
                                    $dmy_customer_status = $_POST['customer_group'];
                            }else{
                                    $dmy_customer_status = $customer_groups_arr[mt_rand(0, count($customer_groups_arr)-1)];
                            }
                            $customers_query = xtc_db_query("INSERT INTO `customers`(`customers_status`, `customers_gender`, `customers_firstname`, `customers_lastname`, `customers_email_address`,
                                    `customers_default_address_id`, `customers_telephone`, `customers_password`, `account_type`, `password_request_key`, `customers_date_added`, `customers_last_modified`, `customers_login_time`)
                                    VALUES ('"
    .$dmy_customer_status ."','".$dmy_address['gender']."','".$dmy_address['firstname']."','".$dmy_address['lastname']."','".$dmy_address['email']."','-1','".$dmy_address['phone']."','".md5($dmy_address['lastname'])."','0','".md5($dmy_address['city'])."','".$dmy_date."','".$dmy_date."','".$dmy_date."')");
                            $dmy_customer_id = xtc_db_insert_id();
                           
                            $qty_new_addresses = mt_rand($qty_new_address_min, $qty_new_address_max);
                            for($j = 1; $j <= $qty_new_addresses ; $j++) {
                                    $address_query = xtc_db_query("INSERT INTO `address_book`(`customers_id`, `entry_gender`, `entry_firstname`, `entry_lastname`,
                                            `entry_street_address`, `entry_postcode`, `entry_city`, `entry_country_id`, `entry_zone_id`, `address_date_added`, `address_last_modified`) VALUES (
                                            '"
    .$dmy_customer_id."','".$dmy_address['gender']."','".$dmy_address['firstname']."','".$dmy_address['lastname']."','".$dmy_address['street']." ".$dmy_address['no']."','".$dmy_address['city']."',DE,EU,'".$dmy_date."','".$dmy_date."')");
                                    if($j == 1){
                                            $dmy_address_id = xtc_db_insert_id();
                                            // Update customers
                                    }

                            }
           
                    }
                   
            }
            // "INSERT INTO `customers_info`(`customers_info_id`, `customers_info_date_of_last_logon`, `customers_info_number_of_logons`, `customers_info_date_account_created`, `customers_info_date_account_last_modified`, `global_product_notifications`) VALUES ([value-1],[value-2],[value-3],[value-4],[value-5],[value-6])";
            }
           

    Ein Ausschnitt aus dem Datengenerator. Die Adressen und Namen werden willkürlich in einer separaten Klasse zusammengesetzt. Jetzt klarer?

    Wenn ich fertig bin dann lade ich das mal hoch. Können bestimmte einige gebrauchen.

    saithis

    • Neu im Forum
    • Beiträge: 31
    Re: zuviele Daten im Array
    Antwort #7 am: 01. Juni 2015, 18:51:20
    Ich hätt ein paar Vorschläge, wie du den Code besser und übersichtlicher machen könntest:

    • Pack alles in eine Funktion, damit du nicht lauter globale Variablen generierst
    • Initialisiere $customer_groups_arr, bevor du dem Array Daten hinzufügst, sonst meckert PHP (auch wenn du das meckern vermutlich eh unterdrückt hast)
    • In Zeile 10 ist $_POST['customer_qty'] immer gesetzt und >0, weil du es in Zeile 9 schon prüfst
    • Mach intval($_POST[...]) um die Sachen rum und nutze sie als int, anstatt überall Zahlen-Strings zuzuweisen. Damit stellst du auch sicher, das es auch wirklich eine Zahl ist die zugewiesen wird
    • Du solltest die Variablen, die du in SQL Queries nutzt, escapen. (mysql_real_escape_string, oder das xtc equivalent)
    • Für die ganze $var = isset($_POST['a'])?$_POST['a']:'0'; stellen könntest du dir eine Funktion schreiben, damit es übersichtlicher wird. z.B. sowas wie get_post_value($index, $default_wert), oder einfach diese Klasse übernehmen.

    Gut wäre es auch, wenn du den Code dann auf Github oder ähnliches hochlädst, dann kann jeder einen pull/merge Requests machen, wenn jemand noch eine gute Idee zur Verbesserung hat.

    Modulfux

    • Experte
    • Beiträge: 3.590
    • Geschlecht:
    Re: zuviele Daten im Array
    Antwort #8 am: 01. Juni 2015, 18:55:27
    Zitat
    Mach
    Code: PHP  [Auswählen]
    intval($_POST[...])
    Da fände ich ja
    Code: PHP  [Auswählen]
    (int)$_POST[...]
    ein wenig cooler, da ein wenig performanter.

    Gruß
    Ronny

    webald

    • modified Team
    • Beiträge: 2.791
    Re: zuviele Daten im Array
    Antwort #9 am: 01. Juni 2015, 18:59:46
    Ich weiss, schön und sicher ist anders. Aber nur um Testdaten für den Shop zu generieren reicht das.

    saithis

    • Neu im Forum
    • Beiträge: 31
    Re: zuviele Daten im Array
    Antwort #10 am: 01. Juni 2015, 19:11:51
    Zitat
    Mach
    Code: PHP  [Auswählen]
    intval($_POST[...])
    Da fände ich ja
    Code: PHP  [Auswählen]
    (int)$_POST[...]
    ein wenig cooler, da ein wenig performanter.

    Gruß
    Ronny

    Ha, stimmt, du hast recht. Wieder was gelernt :)
    Ich hab bisher immer intval genommen, weil ich es z.B. in längeren Formeln übersichtlicher finde und es beim Refactoring auch nicht so leicht an die falsche Stelle rutscht. Das mit der Performance war mir nicht bewusst.

    Ich weiss, schön und sicher ist anders. Aber nur um Testdaten für den Shop zu generieren reicht das.

    Das hatte ich bei meinem alten Arbeitgeber recht häufig gehört und dann ist es doch irgendwann im Produktiv Code geladet, deshalb hab ich mir angewöhnt auch wegwerf Code zumindest einigermaßen sauber zu schreiben. Vor allem, weil es mit ein bischen Übung ja auch nicht viel länger dauert, als es unschön zu schreiben.

    hendrik

    • Experte
    • Beiträge: 2.038
    Re: zuviele Daten im Array
    Antwort #11 am: 02. Juni 2015, 10:10:11
    Zitat
    deshalb hab ich mir angewöhnt auch wegwerf Code zumindest einigermaßen sauber zu schreiben. Vor allem, weil es mit ein bischen Übung ja auch nicht viel länger dauert, als es unschön zu schreiben.

    Das ist schlau. Wenn man sich die Mühe macht etwas Ordnung zu halten in der Rumpelkammer. Da ergibt sich ein Fundus an Problemlösungen die man nur noch greifen und neu kombinieren muß. copy&Paste ist viel bequemer als jedesmal neu erfinden. :)
    10 Antworten
    4655 Aufrufe
    26. Mai 2015, 17:56:26 von web0null
    8 Antworten
    3526 Aufrufe
    09. Juni 2021, 16:09:37 von manne35
               
    anything