问题描述
|
我有一个注册每周夏令营的表格。有以下复选框可以选择此人正在注册的营地,如下所示:
<div class=\"pscdiv\"><input type=\"checkBox\" class=\"psc\" name=\"camps[]\" value=\"psc_1\"/><label for=\"psc_1\">AM - Week 1: Camp Description</label></div>
总共约有30个。我想做的是在下一页获取$ _POST [\'camps \']变量,并将其分解为一些我可以插入具有以下结构的MysqL表中的内容:
regid | psc_1 | psc_2 | psc_3 | ...
我的代码:
if(!empty($_POST[\'camps\'])) {
$Boxes=$_POST[\'camps\'];
while (list ($k,$camp) = @each ($Boxes)) {
$camp_string .= \"\'$camp\',\";
}
}
// The above to create a comma separated string
$camp_string = (substr($camp_string,-1) == \',\') ? substr($camp_string,-1) : $camp_string;
// To remove the trailing comma
$newreg_camps = MysqL_query(\"INSERT INTO camps_registered (regid,$camp_string) VALUES ($regid,$camp_string)\");
列名(我在脚本前面指定的regid除外)与放入其中的数据相同。这是我当时最容易想到的事情。
我不确定我缺少什么。
-
Update#1(参考下面的评论)
if(!empty($_POST[\'camps\'])) {
$Box=$_POST[\'camps\'];
while (list ($key,$val) = @each ($Box)) {
$camp_totals += $campcost[$val];
echo \"$campdesc[$val] - $$campcost[$val]
\";
}
}
解决方法
为什么不使用其他名称来命名复选框,例如列名,以使
$_POST
返回为:
// print_r($_POST);
array(
\'regID\' => 1,\'camp_filmore\' => 1,\'camp_greenwald\' => 1
\'camp_idunno\' => 1
);
从那里开始,构建查询非常简单:
$query = \"INSERT INTO registered (\".implode(array_keys($_POST),\",\") . \") \".
\"VALUES (\" . implode(array_values($_POST),\").\")\";
显然,在插入之前,您应该检查以确保$_POST
的值正确转义和清理。
,一个删除尾随逗号的好技巧是。
$camp_string = rtrim($camp_string,\',\');
无论如何,您的查询格式不正确。
INSERT INTO camps_registered (regid,\'psc_1\',\'psc_2\',\'psc_3\') VALUES ($regid,psc_1\',\'psc_3\')
第一括号中不能包含单引号
,我认为您应该查看爆破,并且可以轻松地向其添加附加字符串...
所以
$comma_seperated = implode(\',$boxes);
$subscribed = $regid . \',\' . $comma_seperated;