我是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
现在,如果我想编辑复选框,如何从db到我的表单中检索这些值以获取相同的ID?如果我想编辑复选框,我们如何检查它们?
很少得到帮助!!
谢谢你。
你好再见!
我已经完成了使用implode和explode插入和检索复选框值并且工作正常。 感谢@Antoniossss提供良好的建议,将复选框值保存为数字(确保db中的列应为VARCHAR) 感谢@Barmar解释爆炸和爆炸的使用感谢@MarkTWebsite分享if-else
的想法插入多个复选框值的代码:
foreach ($_POST['subcat'] as $_subcat)
{
$checksub[] = $_subcat;
} $finalsub = implode(',', $checksub);
$sql="INSERT INTO vendor_mst(party_code, subcat) VALUES ('$pcode','$finalsub')";
我从db ...
中检索复选框值的最终代码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!
答案 0 :(得分:1)
我宁愿将复选框作为二进制标志,并将其二进制OR操作作为整数存储到DB中。它实现起来非常简单,并且可以简化数据库中的记录关系。为此,您需要将复选框的值更改为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
将具有所有复选框的编码状态
要检查哪些框(我从来没有遇到过这个词的麻烦)应该检查或不检查DB中的每一位存储值。我不知道你是如何生成你的观点的,所以我只提供一个模板,你必须弄清楚如何将它应用到你的项目
$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
状态(布尔值)。每个循环迭代按照从Mech到BSL的顺序对应不同的复选框。
或者,您可以直接打印复选框,并使用if
inscruction将其设置为已选中
$ 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
我刚刚注意到,将这两种方法结合起来会导致在循环中动态生成checbox,因此代码将更具可读性。您只需要提供checbox值标签的地图:) 我希望如此。以上将明确说明如何应用此类解决方案。
答案 1 :(得分:1)
<?php
$checksub = array('1','2','3');
?>
<form action="<?php echo site_url('index/do_upload') ?>" method="post" enctype="multipart/form-data">
<label>Select file : <input type="file" name="userfile"></label>
<input type="submit" name="action">
<input type="checkbox" name="subcat[]" value="1" <?php if (in_array(1,$checksub)){ echo "checked"; }?>/>
</form>
答案 2 :(得分:0)
您需要使用PHP if语句; 我真的不了解你的数据库结构,否则我会提供代码,但如果你使用PHP,如果,对于每个复选框,检查数据库,看看它是否被选中; 如果选中
echo '<input type="checkbox" name="subcat[]" value="Mech" selected>Mech';
否则;
echo '<input type="checkbox" name="subcat[]" value="Mech">Mech';
你明白我的意思吗?
源; HTML / CSS / PHP Developer 3年。
答案 3 :(得分:0)
您可以使用以下方法检索子类:
SELECT party_code, GROUP_CONCAT(scid) scids
FROM mst_scadd
GROUP BY party_code
然后,当您从数据库中提取行时,您可以执行以下操作:
$scids = array_flip(explode(',', $row['scids']));
这将创建一个关联数组,其键是子类别。然后,显示复选框的代码可以是:
foreach ($all_subcats as $sc) {
echo '<input type="checkbox" name="subcat[]" value="' . $sc . '" ' .
(isset($scids[$sc]) ? 'checked' : '') . '>' . $sc;
}