php-将复选框数组中的数据插入MySQL

问题描述

| 我有一个注册每周夏令营的表格。有以下复选框可以选择此人正在注册的营地,如下所示:
<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;