Anzeige

Problem mit foreach bei mehrdimensionalem Array

Problem mit foreach bei mehrdimensionalem Array | PSD-Tutorials.de

Erstellt von stb_87, 14.09.2008.

  1. stb_87

    stb_87 Web-Sheriff - ohne Bild

    Dabei seit:
    13.05.2007
    Beiträge:
    1.895
    Geschlecht:
    männlich
    Software:
    dies & das
    Problem mit foreach bei mehrdimensionalem Array
    Nabend alle zusammen,

    ich programmier gerade eine Kursverwaltung für eine Tanzschule auf PHP/MySQL-Basis.

    Habe alles wunderbar hinbekommen, bis auf eine Sache.
    Es handelt sich dabei um ein mehrdimensionales Array.

    Ich habe ein Formular, in dem die Kurszeiten eingetragen werden und dann in einem zweiten Script - update-Script, per MySQL-UPDATE in die Datenbank geschrieben werden.

    Die gesamten Zeiten werden in ein Array geschrieben und dann an das nächste Script weitergegeben. Im update-Script werden die Arrays in einem mehrdimensionalen Array gespeichert.

    Wenn ich unmittelbar danach mit print_r das mehrdimensionale Array ausgeben lasse, wird alles korrekt angezeigt.

    Sobald ich aber das Array via foreach durchlaufen lassen möchte, bekomme ich die Fehlermeldung, dass das Array leer sei.

    Hier mal mein Script:
    PHP:
    1.                
    2. <?php
    3.    
    4.         $update = array();
    5.         $update['ID']           = $_POST['ID'];
    6.         $update['tag']          = $_POST['tag'];
    7.         $update['monat']        = $_POST['monat'];
    8.         $update['jahr']         = $_POST['jahr'];
    9.         $update['start_std']    = $_POST['start_std'];
    10.         $update['start_min']    = $_POST['start_min'];
    11.         $update['ende_std']     = $_POST['ende_std'];
    12.         $update['ende_min']     = $_POST['ende_min'];
    13.  
    14. print_r($update);
    15.  
    16. foreach($update as $item) {
    17.                        
    18.     print_r($item['jahr']);
    19. }
    20. ?>
    21.  
    Wenn ich in der foreach-Schleife das Array ausgeben möchte, bekomme ich folgende Fehlermeldung:
    Ich habe bereits meine Bücher geweltzt und das Internet aufn Kopf gestellt und keine Lösung gefunden.

    Kann mir hier vllt. jemand helfen?
     
    #1      
  2. MasterPSD

    MasterPSD Noch nicht viel geschrieben

    Dabei seit:
    29.01.2007
    Beiträge:
    42
    Geschlecht:
    männlich
    Problem mit foreach bei mehrdimensionalem Array
    AW: Problem mit foreach bei mehrdimensionalem Array

    also $item ist ja der key, also z.b. auch ['jahr']
    so hast du das im print_r doppelt:
    Ohne foreach sollte das reichen um das jahr auszugeben:
     
    #2      
  3. stb_87

    stb_87 Web-Sheriff - ohne Bild

    Dabei seit:
    13.05.2007
    Beiträge:
    1.895
    Geschlecht:
    männlich
    Software:
    dies & das
    Problem mit foreach bei mehrdimensionalem Array
    AW: Problem mit foreach bei mehrdimensionalem Array

    Aber gerade das ist ja das Proble. Foreach soll das mehrdimensionale Array ja ausgeben, damit ich dann die Werte, in diesem Fall 4 Werte pro Array, einzeln per UPDATE in die Datenbank einfügen kann.
     
    #3      
  4. MasterPSD

    MasterPSD Noch nicht viel geschrieben

    Dabei seit:
    29.01.2007
    Beiträge:
    42
    Geschlecht:
    männlich
    Problem mit foreach bei mehrdimensionalem Array
    AW: Problem mit foreach bei mehrdimensionalem Array

    ich sehe da nichts mehrdimensionales dran...
    oder liest du über $_POST ein weiteres array ein?
     
    #4      
  5. stb_87

    stb_87 Web-Sheriff - ohne Bild

    Dabei seit:
    13.05.2007
    Beiträge:
    1.895
    Geschlecht:
    männlich
    Software:
    dies & das
    Problem mit foreach bei mehrdimensionalem Array
    AW: Problem mit foreach bei mehrdimensionalem Array

    Ja, wie ich ja bereits geschrieben habe.

    Alle Werte, die vom ersten Script übernommen werden, sind Arrays, sonst würde ich auch nicht von mehrdimensionalen Arrays reden...
     
    #5      
  6. netbandit

    netbandit Aktives Mitglied

    12
    Dabei seit:
    18.05.2008
    Beiträge:
    1.145
    Geschlecht:
    männlich
    Problem mit foreach bei mehrdimensionalem Array
    AW: Problem mit foreach bei mehrdimensionalem Array

    Würde Sinn machen, Dein Formular zu posten. Ansonsten ist hier wohl Glaskugelgucken angesagt

    PHP:
    1. <?php
    2.  
    3.         $update = array();
    4.         $update['ID']             = $_POST['ID'];
    5.         $update['tag']             = $_POST['tag'];
    6.         $update['monat']        = $_POST['monat'];
    7.         $update['jahr']         = $_POST['jahr'];
    8.         $update['start_std']    = $_POST['start_std'];
    9.         $update['start_min']     = $_POST['start_min'];
    10.         $update['ende_std']     = $_POST['ende_std'];
    11.         $update['ende_min']     = $_POST['ende_min'];
    12.  
    13. print_r($update);
    14.  
    15. foreach($update as $item) {
    16.  
    17.     if(!is_array($item))echo "Ich bin kein Array und kann ich auch nicht auf zugreifen, mich (item['jahr']) gibt es einfach nicht<br>";
    18. }
    19. ?>
     
    Zuletzt bearbeitet: 15.09.2008
    #6      
  7. Christian

    Christian verpeilt & verschallert

    Dabei seit:
    03.03.2005
    Beiträge:
    853
    Geschlecht:
    männlich
    Kameratyp:
    Canon EOS 300D
    Problem mit foreach bei mehrdimensionalem Array
    AW: Problem mit foreach bei mehrdimensionalem Array

    netbandit hat recht, denn das was Du aufbaust ist kein mehrdimensionales Array.
     
    #7      
  8. blackout

    blackout Schaf im Wolfspelz

    Dabei seit:
    12.09.2005
    Beiträge:
    3.359
    Geschlecht:
    männlich
    Ort:
    Würzburg
    Kameratyp:
    Rollei 35 S
    Problem mit foreach bei mehrdimensionalem Array
    AW: Problem mit foreach bei mehrdimensionalem Array

    PHP:
    1. foreach() print_r($item['jahr']);
    2. // ... ersetzen durch ...
    3. foreach($update as $key => $value) { print_r($update[$key]); }
    Ein mehrdimensionales Array ist da übrigens wirklich nicht, egal wie oft du das noch behauptest. $_POST enthält einzig und alleine Strings.
    Wäre da ein Sub-Array ginge das per Foreach so:
    PHP:
    1. foreach($Outer as $key1 => $value1) {
    2.   if(is_array($value1)) {
    3.     foreach($value1 as $key2 => $value2) {
    4.       print_r($value2);
    5.     }
    6.   } else {
    7.      print_r($value1);
    8.   }
    9. }
    ... oder besser rekursiv.
     
    Zuletzt bearbeitet: 15.09.2008
    #8      
  9. netbandit

    netbandit Aktives Mitglied

    12
    Dabei seit:
    18.05.2008
    Beiträge:
    1.145
    Geschlecht:
    männlich
    Problem mit foreach bei mehrdimensionalem Array
    AW: Problem mit foreach bei mehrdimensionalem Array

    Na, nicht zu voreilig. Könnte z.B. ein Selectfeld mit Mehrfachauswahl Daten senden ;)
     
    #9      
  10. blackout

    blackout Schaf im Wolfspelz

    Dabei seit:
    12.09.2005
    Beiträge:
    3.359
    Geschlecht:
    männlich
    Ort:
    Würzburg
    Kameratyp:
    Rollei 35 S
    Problem mit foreach bei mehrdimensionalem Array
    AW: Problem mit foreach bei mehrdimensionalem Array

    ... und wird das auch als String tun. POST-Daten kommen (woher auch sonst) aus dem HTTP-Request, und der ist ein String.

    Für's Editieren diese Posts sieht das dann so aus:
    Code (Text):
    1. POST /modules/Forum/editpost.php?do=updatepost&p=709143 HTTP/1.1
    2. Host: www.psd-tutorials.de
    3. User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1
    4. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    5. Accept-Language: en-gb,en;q=0.7,de-de;q=0.3
    6. Accept-Encoding: gzip,deflate
    7. Accept-Charset: ISO-8859-15,utf-8;q=0.7,*;q=0.7
    8. Keep-Alive: 300
    9. Connection: keep-alive
    10. Referer: http://www.psd-tutorials.de/modules/Forum/editpost.php?do=editpost&postid=709143
    11. Cookie: __utma=169221792.2123626750.1168898393.1173876153.1174855695.10; bblastvisit=1213542451; bblastactivity=0; bbuserid=10257; bbpassword=abb22d4ae02e5cb0368b7178c49aa2c2; lang=german; vbulletin_collapse=forumbit_6%0Aforumbit_142%0Aforumbit_143%0Aforumbit_147%0Aforumbit_152%0Aforumbit_8%0Aforumbit_9%0Aforumbit_53; bbsessionhash=d9de1a3c932925123ec2f95afbb60f4f; bbthread_lastview=1a7077f565ab2a90fae1f0ec6a00e9a564b2d195a-2-%7Bi-56877_i-1221468204_i-56862_i-1221472478_%7D
    12. [b]Content-Type: application/x-www-form-urlencoded
    13. Content-Length: 593
    14. reason=&title=AW%3A+Problem+mit+foreach+bei+mehrdimensionalem+Array&message=%5BQUOTE%3Dnetbandit%3B709141%5DNa%2C+nicht+zu+voreilig.+K%F6nnte+z.B.+ein+Selectfeld+mit+Mehrfachauswahl+Daten+senden+%3B%29%5B%2FQUOTE%5D...+und+wird+das+auch+als+String+tun.+POST-Daten+kommen+%28woher+auch+sonst%29+aus+dem+HTTP-Request%2C+und+der+ist+ein+String.&wysiwyg=0&iconid=0&s=&securitytoken=df0343c0e3b9418d5a0dce77a8fbcb75fa32fe22&do=updatepost&p=709143&posthash=invalid+posthash&poststarttime=0&sbutton=%C4nderungen+speichern&signature=1&parseurl=1&vbseo_retrtitle=1&vbseo_is_retrtitle=1&emailupdate=9999[/b]
     
    Zuletzt bearbeitet: 15.09.2008
    #10      
  11. netbandit

    netbandit Aktives Mitglied

    12
    Dabei seit:
    18.05.2008
    Beiträge:
    1.145
    Geschlecht:
    männlich
    Problem mit foreach bei mehrdimensionalem Array
    AW: Problem mit foreach bei mehrdimensionalem Array

    PHP:
    1.  
    2. <?
    3. if(isset($_POST['feld']))echo $_POST['feld'];
    4. ?>
    5.  
    6. <html>
    7. <head>
    8. <title>Untitled Document</title>
    9. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    10. </head>
    11.  
    12. <body bgcolor="#FFFFFF" text="#000000">
    13. <form name="form1" method="post" action="">
    14. <select name="feld[]" size="2" multiple>
    15. <option value="1">test 1</option>
    16. <option value="2">test 2</option>
    17. </select>
    18. <input type="submit" name="Abschicken" value="Abschicken">
    19. </form>
    20. </body>
    21. </html>
    22.  
     
    #11      
  12. blackout

    blackout Schaf im Wolfspelz

    Dabei seit:
    12.09.2005
    Beiträge:
    3.359
    Geschlecht:
    männlich
    Ort:
    Würzburg
    Kameratyp:
    Rollei 35 S
    Problem mit foreach bei mehrdimensionalem Array
    AW: Problem mit foreach bei mehrdimensionalem Array

    Content-Type: application/x-www-form-urlencoded
    Content-Length: 47
    feld%5B%5D=1&feld%5B%5D=2&Abschicken=Abschicken
    ... String.

    Okay, PHP verwurstet POST-Daten (String) zu $_POST. (Hey, das könnte man prima missbrauchen, irgendwo muss das "[...]" ja den Parser durchlaufen). Hab ich mich nie gefragt, aber wie kommt man dann bitte an die ordentlichen POST-Daten?
     
    Zuletzt bearbeitet: 15.09.2008
    #12      
  13. netbandit

    netbandit Aktives Mitglied

    12
    Dabei seit:
    18.05.2008
    Beiträge:
    1.145
    Geschlecht:
    männlich
    Problem mit foreach bei mehrdimensionalem Array
    AW: Problem mit foreach bei mehrdimensionalem Array

    Ist zwar OT aber ich würde mal sagen rekursiv durch eine Funktion laufen lassen wenn $_POST[] ein Array ist.
     
    #13      
  14. Christian

    Christian verpeilt & verschallert

    Dabei seit:
    03.03.2005
    Beiträge:
    853
    Geschlecht:
    männlich
    Kameratyp:
    Canon EOS 300D
    Problem mit foreach bei mehrdimensionalem Array
    AW: Problem mit foreach bei mehrdimensionalem Array

    Ebenfalls OT, aber an die richtigen Rohdaten kommt man durch eine rekursive Funktion nicht, denn wenn Du zum Beispiel als inputfeldnamen 'Selection.Name' setzt macht PHP daraus 'Selection_Name'

     
    #14      
  15. stb_87

    stb_87 Web-Sheriff - ohne Bild

    Dabei seit:
    13.05.2007
    Beiträge:
    1.895
    Geschlecht:
    männlich
    Software:
    dies & das
    Problem mit foreach bei mehrdimensionalem Array
    AW: Problem mit foreach bei mehrdimensionalem Array

    Also,

    bis hier:
    PHP:
    1.         $update = array();
    2.         $update['ID']             = $_POST['ID'];    
    3.         $update['tag']             = $_POST['tag'];
    4.         $update['monat']        = $_POST['monat'];
    5.         $update['jahr']         = $_POST['jahr'];
    6.         $update['start_std']    = $_POST['start_std'];
    7.         $update['start_min']     = $_POST['start_min'];
    8.         $update['ende_std']     = $_POST['ende_std'];
    9.         $update['ende_min']     = $_POST['ende_min'];
    10.  
    11. print_r($update);
    funktioniert alles einwandfrei. Die Daten werden vollständig übergeben und ich kann diese ja auch mit print_r() ausgeben lassen:

    PHP:
    1. Array ( [ID] => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 ) [tag] => Array ( [0] => 05 [1] => 06 [2] => 08 [3] => 11 ) [monat] => Array ( [0] => 09 [1] => 09 [2] => 09 [3] => 09 ) [jahr] => Array ( [0] => 2008 [1] => 2008 [2] => 2008 [3] => 2008 ) [start_std] => Array ( [0] => 16 [1] => 16 [2] => 17 [3] => 18 ) [start_min] => Array ( [0] => 00 [1] => 30 [2] => 30 [3] => 00 ) [ende_std] => Array ( [0] => 17 [1] => 17 [2] => 18 [3] => 19 ) [ende_min] => Array ( [0] => 15 [1] => 45 [2] => 45 [3] => 15 ) )
    Doch sobald ich die einzelnen Arrays (ID, tag, monat, jahr...) ausgeben lassen möchte mit foreach, kommt die Fehlermeldung, dass das Array leer sei.

    Habe es jetzt mal mit der Lösung von Blackout versucht:
    PHP:
    1. foreach($update as $key => $value) { print_r($update[$key]); }
    Jetzt wird immerhin schon mal innerhalb der foreach-Schleife das Array ausgegeben. Allerdings wird $update 8 Mal durchlaufen, weil da ja insgesamt auch 8 Arrays drin sind. Nun möchte ich aber die Werte aus jedem einzelnen Array ausgeben! In jedem Array (Id, tag, monat, jahr...) sind 4 Werte vorhanden, wie ihr oben entnehmen könnt.

    Wie stelle ich das an?

    Im Endeffekt möchte ich ja schließlich die einzelnen Werte per UPDATE in die Datenbank einfügen. Von der Theorie her sollte die foreach-Schleife 4 mal den UPDATE-Befehl ausführen.

    Was mach ich falsch?

    Danke schon mal so weit.
     
    #15      
  16. CIX88

    CIX88 Aktives Mitglied

    Dabei seit:
    06.04.2006
    Beiträge:
    814
    Geschlecht:
    männlich
    Ort:
    GR
    Problem mit foreach bei mehrdimensionalem Array
    AW: Problem mit foreach bei mehrdimensionalem Array

    Hmmmm, kommt du nicht besser wenn du antelle von $_POST['tag'] das mit $_POST['id']['tag'] versuchst, und den Umweg mit $update ganz weg lässt?
    Dann brauchst du am Ende nur noch POST abfragen :)
     
    #16      
  17. netbandit

    netbandit Aktives Mitglied

    12
    Dabei seit:
    18.05.2008
    Beiträge:
    1.145
    Geschlecht:
    männlich
    Problem mit foreach bei mehrdimensionalem Array
    AW: Problem mit foreach bei mehrdimensionalem Array

    PHP:
    1.  
    2. <?
    3. foreach($update as $key => $item) {
    4. if(is_array($item))echo $key . ': ' . implode(',', $item);
    5. }
    6. ?>
    7.  
     
    #17      
  18. stb_87

    stb_87 Web-Sheriff - ohne Bild

    Dabei seit:
    13.05.2007
    Beiträge:
    1.895
    Geschlecht:
    männlich
    Software:
    dies & das
    Problem mit foreach bei mehrdimensionalem Array
    AW: Problem mit foreach bei mehrdimensionalem Array

    Danke netbandit ;)

    So langsam nähern wir uns der Lösung!

    Momentan gibt er mir folgendes aus:
    PHP:
    1. ID: 1,2,3,4tag: 05,06,08,11monat: 09,09,09,09jahr: 2008,2008,2008,2008start_std: 16,16,17,18start_min: 00,30,30,00ende_std: 17,17,18,19ende_min: 15,45,45,15
    Nun möchte ich das aber gerne so haben, dass beim ersten Durchlauf der foreach-Schleife der erste Wert eines jeden Arrays ausgegeben wird

    Code (Text):
    1.  
    2. [B]ID 1[/B]
    3. tag 6
    4. monat 9
    5. jahr 2008
    beim zweiten Durchlauf der zweite Wert eines jeden Arrays ausgegeben wird

    Code (Text):
    1.  
    2. [B]ID 2[/B]
    3. tag 7
    4. monat 9
    5. jahr 2008
    und so weiter, insgesamt vier mal, damit ich die einzelnen Array-Inhalte innerhalb der foreach-Schleife in eine Variable zur Weiterverarbeitung packen kann.
     
    #18      
  19. netbandit

    netbandit Aktives Mitglied

    12
    Dabei seit:
    18.05.2008
    Beiträge:
    1.145
    Geschlecht:
    männlich
    Problem mit foreach bei mehrdimensionalem Array
    AW: Problem mit foreach bei mehrdimensionalem Array

    Aaah, in dem Fall hat CIX88 vollkommen recht. So wie Du es vor hast, ist auch irgendwie zu lösen, aber m.E. viel umständlicher. Beispiel (nicht getestet)

    PHP:
    1.  
    2. <?
    3. if(isset($update['ID']) && is_array($update['ID'])){
    4.    foreach($update['ID'] as $key => $item){
    5.            if(isset($update['tag'][$key],$update['monat'][$key],$update['jahr'][$key],$update['start_std'][$key],$update['start_min'][$key],$update['ende_std'][$key],$update['ende_min'][$key])){
    6.               echo  'ID ' . $item . '<br>';
    7.               echo  'tag ' . $update['tag'][$key] . '<br>';
    8.               echo  'monat ' . $update['monat'][$key] . '<br>';
    9.            // usw.
    10.            }
    11.    }
    12. }
    13. ?>
    14.  
     
    #19      
  20. stb_87

    stb_87 Web-Sheriff - ohne Bild

    Dabei seit:
    13.05.2007
    Beiträge:
    1.895
    Geschlecht:
    männlich
    Software:
    dies & das
    Problem mit foreach bei mehrdimensionalem Array
    AW: Problem mit foreach bei mehrdimensionalem Array

    Ich könnte dir die Küsse füssen ;)

    Es klappt! So wollte ich das haben!

    Ist in der Tat etwas umständlicher, aber wäre ja langweilig, wenn es zu einfach wäre ;)
     
    #20      
x
×
×
teststefan