PhP: Arrayvariable mit POST weitergeben



  • Hi,

    ich versuche verzweifelt einen gefüllten Array in einer Variable per Post durch ein Formular weiter zu leiten aber es gelingt nicht.

    mal ein Auszug ...
    wenn ich mir den array(Array_Backup) anzeigen lasse ist der auch gefüllt nur wird der weitergegeben ist nichts mehr drin.

    hat da wer eine idee zu?

    <?php
        unset($array_backup);
        $i=0;
        while ($row = mysql_fetch_assoc($result))
        {
            if ($Position == $row['lehrgang_id'])
            {
                echo '<tr>';
                    echo '<td  class="M_tab3a" align="center">';
                    echo '<input type="hidden" name = "Änderung[lehrgang_id] size="10" maxlength="30" value = "'.$row['lehrgang_id'].'" >';
                    echo ''.$row['lehrgang_id'].'';
                    echo '</td>';
                    echo '<td  class="M_tab3a" align="center">';
                    echo '<input type = "text" name = "Änderung[termin_id]" size="30" maxlength="30" value = "'.$row['termin_id'].'">';
                    echo '</td>';
                    echo '<td  class="M_tab3a" align="center">';
    
                    echo '<input type = "text" name = "Änderung[ort]" size="30" maxlength="30" value = "'.$row['ort'].'">';
                    echo '</td>';
                    echo '<td  class="M_tab3a" align="center">';
                    echo '<input type = "text" name = "Änderung[hinweise]" size="50" maxlength="255" value = "'.$row['hinweise'].'">';
                    echo '</td>';
                    echo '<td  class="M_tab3a" align="center">';
                    echo '<input type = "text" name = "Änderung[datum1]" size="10" maxlength="10" value = "'.$row['datum1'].'">';
                    echo '</td>';
                    echo '<td  class="M_tab3a" align="center">';
                    echo '<input type = "text" name = "Änderung[datum2]" size="10" maxlength="10" value = "'.$row['datum2'].'">';
                    echo '</td>';
                echo '</tr>';
                $i++;
                $array_backup[$i] = $row;
    
            }
        }
          echo '<input type = "hidden" name="BackupArray" value = "'.$array_backup.'" >';
    
          echo '<input type = "submit" name = "Senden" value = "Senden">';
    
        echo '</table>';
        echo '</form>';  
    }
    


  • Hallo,

    ich weiß zwar nicht genau ob das der fehler ist, aber du hast bei name=" das schließende Anführungszeichen vergessen.

    echo '<input type="hidden" name = "Änderung[lehrgang_id]" size="10" maxlength="30" value = "'.$row['lehrgang_id'].'" >';



    1. Erst löschst du den Backuparray (unset), dann definierst du in innerhalb eines tiefer geschachtelten Scopes neu. Ist der Array überhaupt noch verfügbar wenn du ihn anzeigen möchtest?
    2. Selbst wenn, so wird es nicht klappt, vermutlich wird auf der HTML Seite nachher einfach nur "Array" angezeigt. Willst du den Array ausgeben würde ich ein print_r nehmen. Aber das willst du nicht, da du den Array nicht so ohne weiteres wieder serialisiert kriegst.
    3. Wofür brauchst du überhaupt das Backuparray?


  • also das unset vor der schleife ist, weil ich sicher sein will das nichts drinsteht, bzw. das ding immer neugemacht wird bevor die schleife losgeht. Aber das wird ja liniar ausgeführt also spielt das unset keine rolle.

    wenn ich mir den array auf der selben seite anzeigen lasse ist das drin was rein soll.

    nur rüber auf andere seiten bekomm ich das teil nicht.

    Der sinn ist, das ich die alten daten die vorher in den formularfelder standen gesichert habe um nachher einen vergleich mit der datenbank machen zu können bevor die neuen reingeschreiben werden. Im schlimmstenfall könnt ich auch jeden eintrag einer eigenen variable zuoordnen aber arras sind halt praktischer 🙂

    aber unabhängig mal vom sinn der sache: ist es überhaupt möglich arrays zu übergeben, wenn ja wie?



  • Hallo 00Albert,
    als erstes würde ich die Umlaute weg lassen, auch wenn es so trotzdem geht. 😉

    Ich hatte mal so ein ähnliches Problem gehabt, weiß aber im Moment nicht genau wie die Lösung war.

    ich gleube mich daran zu erinnern das die Daten dann in

    $Änderung[termin_id][$i]
    

    oder so standen.



  • hm, also die umlaute kann ich mal probieren, wobei die übergabe von "Änderungen" als array problemlos klappte, lag aber vermutlich auch daran das dieser ein direkter teil vom Formular war.

    Der andere array wird ja parallel geschrieben aber halt in einer gesonderten variable gespeichert.



  • Ich habe meinen alten Code wieder gefunden.
    Und zwar hatte ich für das WBB 1.2 Woltlab Burning Board einen Massensmilie-Hack gecodet.

    Damit konnte man mehrer Smilies auf einmal in das Forum einbinden.
    Zu jedem Smilie gehörte dann:

    Die Smilieid
    Der Pfad
    Der BB-Code
    Der Text
    Die Orderid

    Ich hatte damals für alle Variablen allerdings verschiedene Bezeichnungen.
    Hier mal die FHTML-Code:

    <tr bgcolor="#FFFFFF">
      	<input type="hidden" name="smiliepfad[]" value="$smiliebild[$i]">
    	<td align="center"><img src="$smiliebild[$i]"</td>
    	<td align="center">$dateiname[$i]</td>
    	<td align="center"><input type="checkbox" name="smilieid[]" value="$i"></td>
    	<td><input type="text" name="smilietext[]" maxLength="255" class="input" size="20"></td>
    	<td><input type="text" name="smiliename[]" maxLength="255" class="input" size="20"></td>
    	<td><input type="text" name="orderid[]" maxLength="2" class="input" size="2" value="$i"></td>
    </tr>
    

    ich weiß nicht mehr wie ich da drauf gekommen bin, aber bei den Feldnamen eine [] ohne was drin.

    In der PHP-Datei stand dann folgendes:

    for($i = 0; $i < count($_POST['smilieid']); $i++){
    			$newid = ($_POST['smilieid'][$i])-1;
    			$smiliepfad = ($_POST['smiliepfad'][$newid]);
    			$smiliepfad = str_replace("../","",$smiliepfad);
    			$db_zugriff->query("INSERT INTO bb".$n."_smilies (smiliespath,smiliestext,smiliestitle,smiliesint,order_id) VALUES ('".$smiliepfad."', '".($_POST['smilietext'][$newid])."', '".($_POST['smiliename'][$newid])."', 0, '".($_POST['orderid'][$newid])."')");
    			}
    

    So hatte es bei mir damals funktioniert.
    Vielleicht hilft es Dir ja auch bei Deinem Problem.



  • Das Problem hier dürfte wohl eher sein, dass man ein Array, welches man in PHP angelegt hat nicht so einfach in ein Hidden-Field schreiben kann. In dem Hidden-Field dürfte nur der String 'Array' ankommen, mehr aber auch nicht. Wenn Du ein Array, welches Du in PHP angelegt hast per HTML weitergeben willst, dann musst Du für jeden Wert in dem Array ein Hidden-Field bauen.

    Ungefähr so:

    for ($i = 0; $i < count($array_backup); $i++) {
        echo '<input type = "hidden" name="BackupArray[' . $i . '][lehrgang_id]" value = "'.$array_backup[$i]['lehrgang_id'].'" >';
        echo '<input type = "hidden" name="BackupArray[' . $i . '][termin_id]" value = "'.$array_backup[$i]['termin_id'].'" >';
        // etc.
    }
    

    Oder evtl. so:

    for ($i = 0; $i < count($array_backup); $i++) {
        foreach ($array_backup[$i] as $key => $value) {
            echo '<input type = "hidden" name="BackupArray[' . $i . '][' . $key . ']" value = "'.$value.'" >';
        }
    }
    

    Anstelle von $value als Wert könntest Du auch array_backup[i][$key] nehmen, aber $value bietet sich durch die foreach-Schleife an. 🙂

    Wichtig wäre hierbei, dass Du dann in z.B. $array_backup[0][lehrgang_id] keine Arrays mehr gespeichert hast, ansonsten müsstest Du dort auch wieder die Schlüssel durchlaufen.

    Der Output sollte nun in etwa so aussehen:

    <input type = "hidden" name="BackupArray[0][lehrgang_id]" value = "1" >
    <input type = "hidden" name="BackupArray[0][termin_id]" value = "1" >
    <input type = "hidden" name="BackupArray[1][lehrgang_id]" value = "2" >
    <input type = "hidden" name="BackupArray[1][termin_id]" value = "2 >
    etc.
    


  • @ mantiz.....

    ...im Prinzip hast Du ja nichts anderes gepostet als ich. 😉

    Nur war bei mir der Unterschied das die Arrays ja im Formular gebildet werden.

    variable_1[]** **variable_2[]

    Und im PHP wird das Array dann ausgelesen.

    $wert_a_1 = \_POST[variable_1[0]
    $wert_a_2 = \_POST[variable_1[0]
    $wert_b_1 = \_POST[variable_2[1]
    $wert_b_2 = \_POST[variable_2[1]

    Das ganze kann man naürlich auch andersrum mit Werten aus der DB machen, so wie Du es gepostet hast. 😉

    Das ganze ist dann ein dreidimensionales Array.



  • nun es wird wohl so sein das array nicht übergeben werden können ... also muß ich es halt doch einzeln ausgeben ...



  • Hast de es mal über serialize / unserialize versucht?!


Anmelden zum Antworten