php复选框数组访问

时间:2011-05-16 18:46:38

标签: php html arrays

$i=0;
while (db_data) {
$i++;
echo '<input type="checkbox" name="v['.$i.']" value="'.$url.'"';
if ($v[$i]) {
  echo ' checked';
  $s .= $url;
}
echo '/>';

}

我有上面的复选框数组。它在我的电脑上工作,但不在服务器上;似乎令人困惑的部分在$v[$i]上。

$ v未定义,但肯定在其他地方没有使用。问题是我的复选框选择从未恢复,代码永远不会进入if语句。

但是,如果我添加以下内容,我可以看到该值。只是处理后丢失的复选框     $ V = $ _ POST [ 'V'];     while(list($ key,$ val)= @each($ v)){     $ x。='11 *'。$ key .'-'。$ val。'* 22';     }

我的目标是保留表单上选中的复选框,我需要其他地方的$ s。任何替换$ v [$ i]的解决方案?

有人可以帮我解决这个问题吗?谢谢。

3 个答案:

答案 0 :(得分:0)

尝试print_r($ _ POST)然后print_r($ v)并查看是否有任何问题。如果$ _POST有效,那么您就知道它正在正确地回发到页面。然后,如果$ v正在运行,那么您知道正确设置$ v = $ _POST。由于您实际上没有向我们提供有关db_data的任何信息,我认为这是正常工作并在首次加载时显示所有复选框,因此只要它已发布并且您正在设置$ v变量,它应该工作。

附注是你应该在使用之前验证$ _POST变量,但是在你开始工作之后这样做。

答案 1 :(得分:0)

变化

name="v['.$i.']"

name="v[]"
PHP作为一个数组选择的事实是PHP的一个非故意的功能,而不是故意设计的。您不需要设置索引,只需将其定义为数组。

答案 2 :(得分:0)

问题似乎是$ v = $ _POST。如果您只是这样做,那么您的条件语句将需要

if ($v['v'][$i]) {
   ///Checkbox
}

或只是做$ v = $ _POST ['v']。

对不起,请忽略上面,因为你提到你做了那部分。见下文。

这是工作代码。

<form action="" method="post">
<?php
$v = $_POST['v'];
$i=0;
while ($i < 4) {
    $i++;
    $url = "test.com/".$i;
    echo '<input type="checkbox" name="v['.$i.']" value="'.$url.'"';
    if ($v[$i]) {  
        echo ' checked="checked"';  
        $s .= $url;
    }
    echo '/> '.$url.'<br />';
}
?>
<input type="submit" name="submit" value="submit" />
</form>

我离开代码几乎一样,以显示你出错的地方,但你应该在使用之前检查$ _POST变量的漏洞。如果我也这样做,我会使用for count,但它被设置为数据库代码的占位符。确保$ url也被填充。

你也可以取消$ i变量,如:

<?php
$v = $_POST['v'];
while (db_data) {
    echo '<input type="checkbox" name="v[]" value="'.$url.'"';
    if (is_array($v)) {
         if (in_array($url,$v)) {  
              echo ' checked="checked"';  
              $s .= $url;
         }
    }
    echo '/> '.$url.'<br />';
}
?>