多选项选择表单


Multiple option select form

我创建了一个HTML表单,用户可以在其中输入他的可用性(一周中的哪一天)。该表单有一个添加新用户的按钮,因此最后我将为用户提供多个 DIV,因此我USER_DOW具有二维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>

我在访问 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]; 
    } 
} 
目前,如果我添加 2 个用户,一个选择周三和周日,第二个

只选择周一,我得到的是两个用户的三天(计数),第一个用户的所有三个用户都被打印(周三、周日、周一),而第二个用户什么都没有。

知道吗?我是否误解了数组中的键?

表单的输入元素的名称按书面形式传递,没有任何解释。

因此,在此示例中:

<!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>

生成的网址包括:

/* 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

(为清楚起见,原始解码)

当处理$_GET/$_POST变量时,PHP 会尝试解释它,因此在第一种和第两种形式中,结果是相同的:

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

但是,在形式 #3 中,结果是:

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

因为 PHP 会增加第一级键,而不是更深的键。

如果您希望递增更深的数组,则必须在表单中指定第一级键。像这样:

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

或者,如果代码生成,则如下所示:

<input type="text" name="txt[<?php echo $SomeVar; ?>][]" value="One">
<input type="text" name="txt[<?php echo $SomeVar; ?>][]" value="Two">
<?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>

提交后的示例输出:

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)