2017-08-29 3 views
0

Ich bekomme einige unerwartete Ausgabe aus dem folgenden Code und kann nicht herausfinden, was das Problem ist.PHP For Schleife mit Checkboxen geben keine erwartete Ausgabe

<? 
    if (isset($_POST['submit'])) { 
    echo "<pre>"; 
    print_r($_POST); 
    exit; 
    } 
    echo "<form action='test1.php' method='post'>"; 
    for ($i=0;$i < 10;$i++) { 
    echo "<input type='text' value='$i' name='field[]'>"; 
    echo "<input type='hidden' name='cbox[]' value='0'>"; 
    echo "<input type='checkbox' value='1' name='cbox[]'><br>"; 
    } 
    echo "<br><input type='submit' name='submit' value='go'>"; 
    ?> 

Wenn ich das laufen, überprüfen Sie auf sagen wir Nummer 4 und 6, erhalte ich diese Ausgabe:

Array 
(
    [field] => Array 
     (
      [0] => 0 
      [1] => 1 
      [2] => 2 
      [3] => 3 
      [4] => 4 
      [5] => 5 
      [6] => 6 
      [7] => 7 
      [8] => 8 
      [9] => 9 
     ) 

    [cbox] => Array 
     (
      [0] => 0 
      [1] => 0 
      [2] => 0 
      [3] => 0 
      [4] => 0 
      [5] => 1 
      [6] => 0 
      [7] => 0 
      [8] => 1 
      [9] => 0 
      [10] => 0 
      [11] => 0 
     ) 

    [submit] => go 
) 

Warum ist Cbox mich nicht ein Ergebnis von 1 neben der 4 und 6 als ich geben würde es erwarten?

Antwort

0

Warum gibt mir cbox nicht ein Ergebnis von 1 neben den 4 und 6, wie ich es erwarten würde?

Weil Sie ein verstecktes Feld mit dem gleichen Namen und den Wert 0 in den „Positionen“.

Checkbox Werte werden nur dann vorgelegt, wenn das Kontrollkästchen aktiviert wurde. Wenn Sie also Checkbox 4 (die fünfte) aktivieren, haben Sie viermal Ihre versteckte Eingabe und vier Checkboxen davor. Da keines der Kontrollkästchen aktiviert ist, wird vier mal 0 übergeben (die ausgeblendeten Felder). Jetzt überprüfen Sie das fünfte Kontrollkästchen, so dass jetzt der Wert des ausgeblendeten Felds und das Kontrollkästchen gesendet wird. Wir hatten bereits vier 0, jetzt haben wir noch eine 0 und dann eine 1 - macht fünf 0, gefolgt von einer 1, also endet die 1 bei Array-Index 5.

Funktioniert wie geplant.

Ich würde mit den ausgeblendeten Feldern abschaffen vollständig, und geben Sie den Index stattdessen zu verwenden - name='cbox[0]', name='cbox[1]' ...

Sie werden nur noch Werte für diejenigen erhalten, die überprüft wurden - aber jetzt haben Sie die Index-Assoziation automatisch (. für diejenigen, natürlich auch gleiches Namensschema)

+0

Ich habe das versteckte Feld wegen einer anderen Stackoverflow Frage/Antwort hinzugefügt. Ich möchte die Ausgabe und den Dump in eine Datenbank aufnehmen und entweder eine 0 (für ungeprüft) oder 1 (für geprüft) in mein Datenbankfeld setzen. Wenn ich die versteckten weggelassen, hätte ich bekommen: [Cbox] => Array ( [0] => 1 [1] => 1 ) Wenn dies Sinn macht. – user2502447

+0

Mache es so, wie ich sagte, nenne die Felder 'cbox [0]' etc. Dann überprüfe in einer for-Schleife von 0 bis x, ob der entsprechende Eintrag in $ _POST ['cbox'] gesetzt ist - wenn ja, setzt du 1 in ein Array, sonst 0 ... und da hast du den "kompletten Satz". – CBroe

0

ich glaube, Sie den Array-Index wie dies in dem Kontrollkästchen und versteckte Felder zwingen müssen, die die die Textfelder entspricht:

<? 
if (isset($_POST['submit'])) { 
    echo "<pre>"; 
    print_r($_POST); 
    exit; 
} 
echo "<form action='test1.php' method='post'>"; 
for ($i=0;$i < 10;$i++) { 
    echo "<input type='text' value='$i' name='field[]'>"; 
    echo "<input type='hidden' name='cbox[$i]' value='0'>"; 
    echo "<input type='checkbox' value='1' name='cbox[$i]'><br>"; 
} 
echo "<br><input type='submit' name='submit' value='go'>"; 
?> 

Auf diese Weise überschreibt Ihr Kontrollkästchen den Wert des ausgeblendeten Feldes, wenn Sie es überprüfen. Wenn Sie das $ i in den Feldnamen weglassen, werden die Werte im Ausgabe-Array zusammengefasst (wie Sie sehen können, hatten Sie 12 Werte im Ausgabe-Array, 10 aus den versteckten Feldern und 2 für die aktivierten Kontrollkästchen).

+0

Ah ... bemerkte nicht einmal, es ging auf 11 Felder auf Cbox! Vielen Dank! – user2502447