我有以下查询检索客户端数据以创建复选框组。我需要将选中的复选框添加到数据库中作为单独的行,但我不知道如何写这个,因为我之前没有这样做。我很困惑,因为复选框的数量会有所不同。
res=mysql_query('SELECT id,name FROM tbl_client WHERE active="1" ORDER BY name DESC',$dbh) or die(mysql_error());
num=mysql_num_rows($res);
for($run=0; $run<$num; $run++)
{
val=mysql_fetch_row($res);
echo '<label><input type="checkbox" name="CheckboxGroup1" value="'.$val[0].'" id="CheckboxGroup1_0" />'.$val[1].'</label><br />';
}
如何提交复选框,以便在我提交时将它们添加到数据库中的各个行?我想我可以使用某种Foreach
语句,我根本不知道该怎么做。
答案 0 :(得分:1)
你需要的是使用一个数组,这意味着用尾随开口[
命名输入字段并关闭方括号]
,如此......
<label><input type="checkbox" name="CheckboxGroup[]" /></label><br />
这样做是在CheckboxGroup
或$_POST
super globals中创建名为$_GET
的数组(取决于表单使用的方法) ,当表单提交到您的PHP脚本时。因此,如果您的HTML中有1或1000个这些输入元素,它们将全部填充在PHP中的$_POST['CheckboxGroup']
- 或$ _GET下,您可以像这样迭代它们......
foreach ($_POST['CheckboxGroup'] as $checkbox) {
/* do whatever you want with $checkbox here */
}
请注意,只有选中UA才会在请求中发送复选框值。 另外请不要使用mysql_ *函数与PHP中的mysql数据库进行交互,因为它已被弃用,将从未来的PHP版本中删除。对于新应用程序,请考虑使用MySQLi或者PDO与PHP中的mysql数据库连接。
答案 1 :(得分:0)
在HTML表单中,复选框和无线电控件的独特之处在于,如果客户端未触发它们,则它们不会出现在请求中。因此,您的脚本必须事先知道期望的复选框。对于type = text,submit等的输入,请求包含命名控件,即使数据字符串为空。
有几种方法可以完成这类事情。您可以创建带有或不带命名元素的复选框数组,如下所示:'
<input type="checkbox" name="color[orange]" />Orange
<input type="checkbox" name="color[green]" />Green
您还可以提供与复选框元素具有相同名称的type = hidden表单元素。同名的最后一个表单元素是将与请求一起显示的元素。通过这样做,您可以始终拥有可预测数量的元素。如果未触发复选框,则隐藏值将出现在请求中。如果客户选中了复选框,则复选框值将存在。
尝试设置一个表单,将您的复选框测试提交给说明此内容的PHP脚本(此处完整显示)
<?php var_dump($_POST);