PHP:如何从数据库中获取相同 ID 的多个复选框值?

标签 php mysql

我是 php 的新手,在这里几乎不需要帮助。 我使用以下代码将多个复选框值插入到同一 ID 的表中:

在我的表格上我有:

<input type="checkbox" name="subcat[]" value="Mech">Mech
<input type="checkbox" name="subcat[]" value="Ele">Ele
<input type="checkbox" name="subcat[]" value="Civ">Civ
<input type="checkbox" name="subcat[]" value="Air">Air
<input type="checkbox" name="subcat[]" value="BSL">BSL

我检查了“Mech”、“Ele”和“BSL”

和要插入的 PHP:

$subcat = $_POST['subcat'];
    for($i=0; $i<sizeof($subcat);$i++){
    $sql1="INSERT INTO mst_scatadd (party_code,scid)
    VALUES ('$pcode',$subcat[$i])";
    mysql_query($sql1,$con);
    }

db 看起来像...

sctid  | party_code  |   scid
---------------------------------
  1    |   01S001    |    Mech
  2    |   01S001    |    Ele
  3    |   01S001    |    BSL
  4    |   01K207    |    Main

现在,如果我想编辑复选框,我如何才能将这些值从数据库检索到我的表单,并使它们成为选中状态?

不胜感激!

感谢副词。

编辑 1:

大家好!

我已经使用 implode 和 explode 完成了插入和检索复选框值的工作,并且工作正常。 感谢@Antoniosss 提出了将复选框值保留为数字的好建议(确保数据库中的列应该是 VARCHAR) 感谢@Barmar 解释 explode 的使用,感谢@MarkTWebsite 分享 if-else 的想法

插入多个复选框值的代码:

foreach ($_POST['subcat'] as $_subcat)
    {
        $checksub[] = $_subcat;
    }   $finalsub = implode(',', $checksub);

$sql="INSERT INTO vendor_mst(party_code, subcat) VALUES ('$pcode','$finalsub')";

我从数据库中检索复选框值的最终代码...

sql="SELECT * FROM vendor_mst WHERE party_code like '".$searchname."'";
$result=mysql_query($sql,$con);
while ($row=mysql_fetch_array($result, MYSQL_BOTH)){
$checksub  = explode(',',$row['subcat']);
}
if(in_array("1",$checksub))echo '<input type="checkbox" name="subcat[]" value="1" checked >Mech'; else echo '<input type="checkbox" name="subcat[]" value="1">Mech';
if(in_array("2",$checksub))echo '<input type="checkbox" name="subcat[]" value="2" checked >Ele';  else echo '<input type="checkbox" name="subcat[]" value="2">Ele';
if(in_array("3",$checksub))echo '<input type="checkbox" name="subcat[]" value="3" checked >Civ';  else echo '<input type="checkbox" name="subcat[]" value="3">Civ';
if(in_array("4",$checksub))echo '<input type="checkbox" name="subcat[]" value="4" checked >Air';  else echo '<input type="checkbox" name="subcat[]" value="4">Air';
if(in_array("5",$checksub))echo '<input type="checkbox" name="subcat[]" value="5" checked >BSL';  else echo '<input type="checkbox" name="subcat[]" value="5">BSL';

感谢 stackoverflow!

最佳答案

我宁愿将复选框作为二进制标志进行威胁,并将它们的二进制或运算作为整数存储到数据库中。它真的很容易实现,并且会简化数据库中的记录关系。为此,您需要将复选框的值更改为 2^n 个值。例如

<input type="checkbox" name="subcat[]" value="1">Mech
<input type="checkbox" name="subcat[]" value="2">Ele
<input type="checkbox" name="subcat[]" value="4">Civ
<input type="checkbox" name="subcat[]" value="8">Air
<input type="checkbox" name="subcat[]" value="16">BSL

选择MechCiv应该在DB中存储为5(二进制00101),Air+BSL将是 24 (11000b) 等等。要恢复此过程,您只需简单地测试存储值的每一位并在循环中选中/取消选中相应的框。我希望你能明白我的意思。

编辑:请求的示例代码。 请注意,我不是 PHP 程序员,因此可能(并且肯定会)出现语法错误,但我会尽力而为 要获得用户输入,您必须简单地添加复选框的值

$selected=0;
foreach($POST['subcat'] as $checkedBox){
    $selected=$selected+$checkedBox
    }

所以现在变量 $selected 将具有所有复选框的编码状态 要检查哪些框(我从来没有遇到过这个词的麻烦)应该检查或不检查你必须测试数据库中的每一位存储值。我不知道你是如何生成你的 View 的,所以我只提供一个模板,你必须弄清楚如何将它应用到你的项目中

$valueFromDb= ///  some value fetched from DB
$maxValue= //// the highest value of your checkboxes, in my eg. 16
for($testValue=1;$testValue<=$limit;$testValue=$testValue << 1){
    $result=($valueFromDb & $testValue) > 0;
    // do something with checked result for current checkbox
}
上面的

变量 result 将具有相应复选框的 checked 状态( bool 值)。每个循环迭代对应不同的checkbox,按照Mech到BSL的顺序一一对应。 或者,您可以直接打印复选框并使用 if 指令将它们设置为已选中 $valueFromDb=//获取的值

<input type="checkbox" name="subcat[]" value="1" <?php if($valueFromDb & 1 >0) echo('checked') ?php>Mech
<input type="checkbox" name="subcat[]" value="2" <?php if($valueFromDb & 2 >0) echo('checked') ?php>>Ele
<input type="checkbox" name="subcat[]" value="4" <?php if($valueFromDb & 4 >0) echo('checked') ?php>>Civ
 .... and so on and on and on

我刚刚注意到结合使用这两种方法会导致在循环中动态生成复选框,因此代码将更具可读性。您所需要的只是提供复选框值标签的 map :) 我希望例如。以上将明确说明如何应用此类解决方案。

关于PHP:如何从数据库中获取相同 ID 的多个复选框值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18569233/

相关文章:

php - 如何向用户显示已输入新评论

php - Varnish -在轮询 Controller 中提供cookie/ session 时缓存

php - 对数据库中的密码进行加密

php - CodeIgniter 使用 ajax 按钮更新数据库

php - 如何在 Joomla 中使用 memcached

php - 给照片添加标签mysql

php - 如何翻译 form select laravel 5 Short way

php - 如何强制Magento使用APC缓存

php - 如何在cPanel中将文本框值插入Mysql?

php - 在单个查询中两次选择同一个表