$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]的解决方案?
有人可以帮我解决这个问题吗?谢谢。
答案 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 />';
}
?>