【问题标题】:PHP multiple checked checkboxes from databasePHP 来自数据库的多个选中复选框
【发布时间】:2016-07-01 03:43:44
【问题描述】:

我正在尝试从数据库中生成一个带有多个复选框的表单。现在只显示数组中的最后一个条目。如果应该只检查一件事,它可以工作,但对于不止一个,只有数组中的最后一个条目显示为已检查。任何帮助将不胜感激。谢谢!

<?php
include "DBconnect.php";

$staffId = $_REQUEST["ID"];

$query=" select listCode from staffLabels
        where staffId = $staffId";

$result=$mysql->query($query);
while($row=$result->fetch_assoc()){
    //in_array ()check if value is in array

    $b_checked='';
    $d_checked='';
    $x_checked='';
    $f_checked='';
    $c_checked='';
    if($row['listCode'] =="b") {$b_checked='checked';}
    elseif($row['listCode'] =="d") {$d_checked='checked';}
    elseif($row['listCode'] =="x") {$x_checked='checked';}
    elseif($row['listCode'] =="f") {$f_checked='checked';}
    elseif($row['listCode'] =="c") {$c_checked='checked';}


}
echo '<input type="checkbox" name="listCode[]" value="b" '.$b_checked.' >b';
echo '<input type="checkbox" name="listCode[]" value="d"  '.$d_checked.' >d';
echo '<input type="checkbox" name="listCode[]" value="x"  '.$x_checked.' >x';
echo '<input type="checkbox" name="listCode[]" value="f"  '.$f_checked.' >f';
echo '<input type="checkbox" name="listCode[]" value="c"  '.$c_checked.' >c<br /><br />';
?>

【问题讨论】:

  • 尝试从while 中删除“声明”。每个循环都会擦除变量的先前内容,只保留最后一个...
  • 但是,有更好的方法来做你想做的事情......
  • 您对SQL Injections 敞开心扉。如果您使用的是 MySQLi 或 PDO(由于 mysql_*-functions 已弃用,您应该使用它),您应该使用 Prepared Statements
  • 或者至少,$staffId = $_REQUEST["ID"] + 0; 将 $staffId 强制为数值。
  • @FirstOne 取出声明有效!谢谢!我愿意以不同的方式来做这件事,我只是 PHP 新手,真的不知道该怎么做。

标签: php arrays database checkbox while-loop


【解决方案1】:

试试这个

<?php
include "DBconnect.php";

$staffId = (int) $_REQUEST["ID"];

$query=" select listCode from staffLabels
        where staffId = $staffId";

$result=$mysql->query($query);
$checked=[];
while($row=$result->fetch_assoc()){
    $checked[$row['listCode']]=true;
}

foreach(['b','d','x','f','c'] as $value){
    $chk=isset($checked[$value])?'checked':'';
    echo "<input type='checkbox' name='listCode[]' value='$value' $chk>";
}

echo "<br /><br />";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-23
    • 2016-02-29
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    相关资源
    最近更新 更多