我有一张注册每周夏令营的表格。有复选框可以选择该人注册的阵营,如下所示:
<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, 0, -1) : $camp_string;
// To remove the trailing comma
$newreg_camps = mysql_query("INSERT INTO camps_registered (regid,$camp_string) VALUES ($regid,$camp_string)");
列名(我在脚本中先前指定的regid除外)与放入它们的数据相同。这是我当时最容易想到的事情。
我不确定我错过了什么。
- 更新#1(参考下面的评论)
if(!empty($_POST['camps'])) {
$box=$_POST['camps'];
while (list ($key,$val) = @each ($box)) {
$camp_totals += $campcost[$val];
echo "$campdesc[$val] - $$campcost[$val]
";
}
}
答案 0 :(得分:2)
为什么不将复选框命名为与列名称不同的名称,以便$_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
的值。
答案 1 :(得分:1)
删除尾随逗号的好方法是。
$camp_string = rtrim($camp_string,',');
无论如何,您的查询格式不正确。
INSERT INTO camps_registered (regid,'psc_1', 'psc_2', 'psc_3') VALUES ($regid,psc_1', 'psc_2', 'psc_3')
第一个括号中不能有单引号
答案 2 :(得分:0)
我认为您应该查看implode并且可以轻松地向其中添加附加字符串...
所以例如。
$comma_seperated = implode(',', $boxes);
$subscribed = $regid . ',' . $comma_seperated;