/ / Mehrere Optionen wählen Sie das Formular - PHP, HTML

Mehrfachauswahlformular - php, html

Ich habe ein HTML-Formular erstellt, in das ein Benutzer eintreten kannseine Verfügbarkeit (welcher Wochentag). Das Formular hat eine Schaltfläche, um neue Benutzer hinzuzufügen. Am Ende werde ich mehrere DIVs für Benutzer haben, daher habe ich USER_DOW mit zwei Dimensionen USER_DOW[][].

<div id="user1" class="user" >
<div class="name">
<label>Name</label>
<input type="text" name="USER_Name[]">
</div>
<div>
<label>Day of Week</label>
<select multiple id="USER_DOW" name="USER_DOW[][]" size="7">
<option value="Mon">Monday</option>
<option value="Tue">Tuesday</option>
<option value="Wed">Wednesday</option>
<option value="Thu">Thursday</option>
<option value="Fri">Friday</option>
<option value="Sat">Saturday</option>
<option value="Sun">Sunday</option>
</select>
</div>
</div>

Ich habe Probleme beim Zugriff auf die Elemente in PHP

foreach($USER_Name as $a => $b){
echo $a+1;
echo $USER_Name[$a];
echo "Number of selected days for user " + count($USER_DOW);
foreach($USER_DOW as $c => $b){
echo  $USER_DOW[$c][$a];
}
}

Im Moment, wenn ich 2 Benutzer hinzufüge, einen auswählenMi. & So. und die zweite nur Mon., was ich bekomme sind drei Tage (count) für beide User und beim ersten User werden alle drei ausgedruckt (Mi, So, Mo) während für die Sekunde nichts.

Irgendeine Idee? Habe ich die Schlüssel in den Arrays missverstanden?

Antworten:

1 für die Antwort № 1

Die Namen von Eingabeelementen eines Formulars werden wie geschrieben ohne Interpretation übergeben.

Also, in diesem Beispiel:

<!DOCTYPE html>
<html>
<head><title>Test</title></head>
<body>

<?php if( count($_GET) ): ?>
<pre><?php var_dump($_GET); ?></pre>
<?php endif; ?>

/* FORM #1 */
<form action="test.php">
<input type="text" name="txt[0]" value="One">
<input type="text" name="txt[1]" value="Two">
<input type="submit" name="action" value="Test">
</form>

/* FORM #2 */
<form action="test.php">
<input type="text" name="txt[]" value="One">
<input type="text" name="txt[]" value="Two">
<input type="submit" name="action" value="Test">
</form>

/* FORM #3 */
<form action="test.php">
<input type="text" name="txt[][]" value="One">
<input type="text" name="txt[][]" value="Two">
<input type="submit" name="action" value="Test">
</form>
<?php


?>
</body>
</html>

Die generierten URLs sind:

/* FORM #1 */    test.php?txt[0]=One&txt[1]=Two&action=Test
/* FORM #2 */    test.php?txt[]=One&txt[]=Two&action=Test
/* FORM #3 */    test.php?txt[][]=One&txt[][]=Two&action=Test

(rawurldecoded zur Klarheit)

Beim Prozess $_GET/$_POST Variablen, PHP versuchen es zu interpretieren, so in der ersten und zweiten Form, das Ergebnis ist das gleiche:

Array
(
[txt] => Array
(
[0] => One
[1] => Two
)

[action] => Test
)

Aber in Form # 3 ist das Ergebnis:

Array
(
[txt] => Array
(
[0] => Array
(
[0] => One
)

[1] => Array
(
[0] => Two
)

)

[action] => Test
)

weil PHP den Schlüssel der ersten Ebene erhöht, aber nicht den tieferen Schlüssel.

Wenn Sie das tiefere Array erhöhen möchten, müssen Sie den Schlüssel der ersten Ebene im Formular angeben. Etwas wie:

<input type="text" name="txt[1][]" value="One">
<input type="text" name="txt[1][]" value="Two">

oder, wenn Code generiert, wie:

<input type="text" name="txt[<?php echo $SomeVar; ?>][]" value="One">
<input type="text" name="txt[<?php echo $SomeVar; ?>][]" value="Two">

0 für die Antwort № 2
<?php
var_dump($_POST);

function do_form($index) {
?>
<div id="user<?= $index ?>" class="user" >
<div class="name">
<label>Name</label>
<input type="text" name="USER_Name[<?= $index ?>]">
</div>
<div>
<label>Day of Week</label>
<select multiple id="USER_DOW" name="USER_DOW[<?= $index ?>][]" size="7">
<option value="Mon">Monday</option>
<option value="Tue">Tuesday</option>
<option value="Wed">Wednesday</option>
<option value="Thu">Thursday</option>
<option value="Fri">Friday</option>
<option value="Sat">Saturday</option>
<option value="Sun">Sunday</option>
</select>
</div>
</div>
<?php
}
?>

<form method="POST">
<?php do_form(1); do_form(2); ?>
<input type="submit">
</form>

Beispielausgabe nach dem Senden:

array (size=2)
"USER_Name" =>
array (size=2)
1 => string "foo" (length=3)
2 => string "bar" (length=3)
"USER_DOW" =>
array (size=2)
1 =>
array (size=1)
0 => string "Mon" (length=3)
2 =>
array (size=2)
0 => string "Mon" (length=3)
1 => string "Tue" (length=3)