我的select.php中有9个复选框
<form method="post" action="test.php">
<input type="checkbox" name="g1[]" id="c1" value="c1">
<input type="checkbox" name="g1[]" id="c2" value="c2">
<input type="checkbox" name="g1[]" id="c3" value="c3">
<input type="checkbox" name="g2[]" id="h1" value="h1">
<input type="checkbox" name="g2[]" id="h2" value="h2">
<input type="checkbox" name="g2[]" id="h3" value="h3">
<input type="checkbox" name="g3[]" id="d1" value="d1">
<input type="checkbox" name="g3[]" id="d2" value="d2">
<input type="checkbox" name="g3[]" id="d3" value="d3">
</form>
好的,我的test.php现在看起来像这样:
error_reporting(E_ALL);
$g1 = $_POST['g1'];
$g2 = $_POST['g2'];
$g3 = $_POST['g3'];
//Connect to DB
$ng1 = count($g1);
$ng2 = count($g2);
$ng3 = count($g3);
$sum = 0;
for ($i = 1; $i <= 3; $i++)
{
$arr = "g$i";
if (!isset($_POST[$arr]))
${$arr} = array();
else
${$arr} = $_POST[$arr];
if (!is_array(${$arr}))
die("Error in input parameter $arr");
${"ng$i"} = count(${$arr});
if (${"ng$i"} < 1)
die("At least one $arr checkbox must be checked");
$sum += ${"ng$i"};
${"g$i"."_sql"} = implode(',', array_map(${$arr}, 'mysql_real_escape'));
}
$query="INSERT INTO ch_lg (g1, g2, g3) VALUES ('$g1_sql','$g2_sql','$g3_sql')";
mysql_query($query) or die(mysql_error());
mysql_close();
//echo message
}
修改问题
我需要检查一下:
用户从每个数组中选择了1个复选框(您的代码执行此操作)
他没有选择超过4个复选框(您的代码执行此操作)
他从JUST one array中选择了另外一个复选框(这意味着他必须总共选择4个并且每个只有1个是不可接受的) - 我认为这不会发生在你的代码中。是吗?
谢谢
答案 0 :(得分:2)
“两者中不超过3”意味着2发+ 1种颜色可以,但2发+ 2颜色不是因为它会给4?然后:
$ncolor = count($color);
$nhair = count($hair);
if (($ncolor >= 1) && ($nhair >=1) && (($ncolorn+$nhair)<=3))
// OK
else
// No good.
然后将我的值插入db列COLOR / HAIR。
您必须解释数据库的结构,以及您希望如何获得数据。如果我得到2根头发和1种颜色,你想要:
1行,颜色和头发与分隔符合并:
$ color_sql = implode(',',array_map($ color,'mysql_real_escape')); $ hair_sql = implode(',',array_map($ hair,'mysql_real_escape'));
INSERT INTO mytable(...,颜色,头发......) VALUES(...,'$ color_sql','$ hair_sql',...);
此外,在test.php的开头,我假设有类似的东西:
<?php
error_reporting(E_ALL);
$g1 = $_POST['g1'];
$g2 = $_POST['g2'];
$g3 = $_POST['g3'];
...
验证可以在一个周期内完成:
<?php
error_reporting(E_ALL);
$sum = 0;
for ($i = 1; $i <= 3; $i++)
{
$arr = "g$i";
if (!isset($_POST[$arr]))
${$arr} = array();
else
${$arr} = $_POST[$arr];
if (!is_array(${$arr}))
die("Error in input parameter $arr");
${"ng$i"} = count(${$arr});
if (${"ng$i"} < 1)
die("At least one $arr checkbox must be checked");
$sum += ${"ng$i"};
${"g$i"."_sql"} = implode(',', array_map(${$arr}, 'mysql_real_escape'));
}
// NOTICE: 'NULL' between quotes? Should't it be NULL without quotes?
// If ID is autoincrement, just omit it: (g1, g2, g3) VALUES ('$g1_sql',...)
$query="INSERT INTO ch_lg (ID, g1, g2, g3) VALUES ('NULL','$g1_sql','$g2_sql','$g3_sql')";
mysql_query($query) or die(mysql_error());
mysql_close();