多选项选择表单

时间:2016-02-05 00:17:10

标签: php html

我创建了一个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个用户,一个选择Wed.&amp;太阳。而第二只Mon.,我得到的是两个用户的三天(计数)和第一个用户所有三个都打印(周三,周日,周一),而第二个没有。

有什么想法吗?我误解了数组中的键吗?

2 个答案:

答案 0 :(得分:1)

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

所以,在这个例子中:

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

rawurldecoded 为清晰起见)

当进程$_POST / Array ( [txt] => Array ( [0] => One [1] => Two ) [action] => Test ) 变量时,PHP会尝试解释它,所以在第一种和第二种形式中,结果是相同的:

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

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

        )

    [action] => Test
)

但是,在表格#3中,结果是:

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

因为PHP增加了第一级密钥,但没有增加更深的密钥。

如果您希望增加更深的数组,则必须在表单中指定第一级键。 类似的东西:

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

或者,如果代码生成,如:

<?php

$command='matlab -nodesktop -r "run emailToSpeech.m";';
exec ( $command );

?>

答案 1 :(得分:0)

<?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)