【问题标题】:array of check boxes using html and php使用 html 和 php 的复选框数组
【发布时间】:2012-08-16 03:46:17
【问题描述】:

我有一段代码如下:

<td><?
    $days = array("Sun","Mon","Tue","Wed","Thur","Fri","Sat");
    for($i=1;$i<8;$i++)
    {
        echo $days[$i-1]?><input type="checkbox" name="labDays[]" value="<?=$days[$i]?>" checked="checked"><?
    }?>
</td>

但是当我运行print_r($_REQUEST['labDays']);

我收到Array ( [0] =&gt; [1] =&gt; [2] =&gt; [3] =&gt; [4] =&gt; [5] =&gt; [6] =&gt; )

我期待Array ( [0] =&gt; Sun[1] =&gt; Mon[2] =&gt; Tue[3] =&gt; Wed[4] =&gt; Thur[5] =&gt; Fri[6] =&gt; Sat)

我确定这很愚蠢,但我不确定我错过了什么......

print_r($_REQUEST) 吐:Array ( [pg] =&gt; 12 [msg] =&gt; Facility Already Exist [facilityname] =&gt; kjgkjhgkjhg [facorgtype] =&gt; [facilitytype] =&gt; [administratorsname] =&gt; [divisionname] =&gt; [streetaddress1] =&gt; [streetaddress2] =&gt; [city] =&gt; [state] =&gt; [zipcode] =&gt; [phonenumber] =&gt; [faxnumber] =&gt; [email] =&gt; [mainstate] =&gt; [labDays] =&gt; Array ( [0] =&gt; [1] =&gt; [2] =&gt; [3] =&gt; [4] =&gt; [5] =&gt; [6] =&gt; ) [facBillingContact] =&gt; [facBillingPhone] =&gt; [facBillingFax] =&gt; [facBillingRep] =&gt; [facBillingAccNum] =&gt; [facNotes] =&gt; [submit] =&gt; Create )

var_dump($_REQUEST['labDays'])

array
  0 => string 'Sun' (length=3)
  1 => string 'Mon' (length=3)
  2 => string 'Tue' (length=3)
  3 => string 'Wed' (length=3)
  4 => string 'Thur' (length=4)
  5 => string 'Fri' (length=3)
  6 => string 'Sat' (length=3)

【问题讨论】:

    标签: php html arrays checkbox


    【解决方案1】:

    我相信这就是您要找的:

        <?php
        $days = array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat");
        foreach ($days as $day) {
            echo <<<HTML
        <label>$day
            <input type="checkbox" name="labDays[]" value="$day" checked>
        </label>
    HTML;
    
        }
        ?>
    

    几点说明:

    PHP

    • 不建议使用速记语法(&lt;? ?&gt;,尤其是&lt;?= ?&gt;)。
    • 对于迭代数组,foreachfor 更适合。
    • 我对字符串使用 PHP 的 heredoc 语法。这样可以避免引号混淆。
    • 使用$_POST$_GET 而不是$_REQUEST,这样会更安全。

    HTML

    • 在 HTML 中为表单元素使用标签,这会将文本与表单控件相关联,此外,当您单击文本时,它也会标记相应的复选框!
    • checked 属性不需要值。有它就够了。

    【讨论】:

    • echo &lt;&lt;&lt;HTML 是什么?!我以前从未见过这个
    • @Truth,所以对于每一个 HTML 标记循环,你都要写 heredoc?
    • @Truth,OP 已经糊涂了,你让他更糊涂了 :)
    • @Bill.Caffery:我看到了预期的结果。检查整个 $_POST 变量的结果(不仅仅是您认为应该看到的)。
    • @KalpeshMehta:我没有让他感到困惑,我正在为他指明正确的方向,并提供良好的编程实践。在编写 HTML blocks(不是单行代码)时,Heredoc 远远优于所有其他形式的字符串,因为它很容易看到,可以评估变量,同时不会弄乱引号。所以是的,我将在循环的每个 HTML 标记中使用它。在更复杂的情况下,我什至会使用 DOM。
    【解决方案2】:

    如果你想遍历数组,foreach 是最好的选择

    $days = array("Sun","Mon","Tue","Wed","Thur","Fri","Sat");
    foreach($days as $k=>$v)
    {
        echo $k?><input type="checkbox" name="labDays[]" value="<?=$v?>" checked="checked"><?
    }?>
    

    使用for,你可以这样做:

    $days = array("Sun","Mon","Tue","Wed","Thur","Fri","Sat");
    for($i=0;$i<=6;$i++)
    {
        echo $i;?><input type="checkbox" name="labDays[]" value="<?=$days[$i]?>" checked="checked"><?
    }?>
    

    推荐方式..

    $days = array("Sun","Mon","Tue","Wed","Thur","Fri","Sat");
    foreach($days as $k=>$v)
    {
        echo $k . ' <input type="checkbox" name="labDays[]" value="'.$v.'" checked="checked">'; //you can give your styles and css ofcourse to make it better..
    }
    

    【讨论】:

    • 不推荐这种语法。
    • @Truth,是的,我知道,只是让 OP 发现错误。
    • 我不想让它说 1[] 2[] 3[] 我想要 mon[] tue[] wed[]。但我看到你用.$v. 做的串联所以我会试试的
    • 如果你喜欢:mon [checkbox],tue [checkbox],只需将 $k 替换为 $v 就可以了..
    • 您能否检查 html 源代码并确认 value 字段的值是否正确? (星期一、太阳等)
    【解决方案3】:

    也许用 echo 来打印值:

    <input type="checkbox" name="labDays[]" value="<?php echo $days[$i]; ?>" checked="checked">
    

    【讨论】:

    • 这没什么区别。他使用简写语法&lt;?= $stuff ?&gt;,相当于&lt;?php echo $stuff; ?&gt;
    • 可以,但需要在php.ini中配置:php.net/manual/en/ini.core.php#ini.short-open-tag
    • Since PHP 5.4.0, &lt;?= is always available. 来自您链接的同一来源。
    • 我不和比尔并肩作战,我不知道他用的是哪个版本。也许写在某个地方,但我没看到。或者他使用的是旧的 php.ini 配置……我怎么知道?
    • ive 启用短标签足够争吵 ty
    猜你喜欢
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 2014-09-12
    • 1970-01-01
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多