我是 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
选择Mech
和Civ
应该在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/