【问题标题】:php checkbox array accessphp复选框数组访问
【发布时间】:2011-08-26 16:28:08
【问题描述】:
$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]?

谁能帮我解决这个问题?谢谢。

【问题讨论】:

  • 您复制/粘贴有误吗?
  • 嗯?抱歉,这里没有足够的内容可以请您详细说明吗?
  • $v$i 定义在哪里?您的代码示例显然不完整。
  • 请添加您期望看到的和实际看到的。

标签: php html arrays


【解决方案1】:

问题似乎是 $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 />';
}
?>

【讨论】:

  • 它摇滚!我得到的最好的帮助!你们太棒了!
【解决方案2】:

改变

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

name="v[]"

PHP 将其作为数组提取的事实是 PHP 的一个无意的特性,并不是有意设计的。您不需要设置索引,只需将其定义为数组即可。

【讨论】:

  • 不行,我必须设置索引,否则,无论我选择什么,它都会按顺序存储为 v0、v1、v2...。
【解决方案3】:

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

附带说明的是,您应该在使用之前验证 $_POST 变量,但在您让一切正常运行之后再进行验证。

【讨论】:

  • 如果你按照FatherStorm上面所说的做(我猜是因为是新用户,我无法对此发表评论),那么你需要使用is_array和in_array,无论如何这可能会更好。
  • 我知道 _POST 正在工作,因为 while 循环有效。问题是复选框立即丢失
猜你喜欢
  • 1970-01-01
  • 2011-09-28
  • 1970-01-01
  • 2017-05-09
  • 1970-01-01
  • 1970-01-01
  • 2016-08-02
  • 1970-01-01
相关资源
最近更新 更多