php - 将checkbox数据中的数据插入MySQL

时间:2011-04-12 19:08:02

标签: 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, 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]
"; } }

3 个答案:

答案 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;