将多个复选框值添加到单个行中的多个列

时间:2014-12-29 20:31:14

标签: php mysql checkbox multiple-columns

我读了其他帖子,但我认为我没有找到答案(或者可能只是不知道如何实现它......)。我有一个mysql表,其中包含项目大小的列,以及其他内容。用户填写一种表格,其中可以从一系列复选框中选择多种尺寸。我希望能够将选定的复选框值插入到正确的列中,同时将其他列保留为空或者如果需要我猜为0值。这些列现在是tinyint格式。

' One Size'

<input type="checkbox" name="itemSize[]" value="1" />

<input type="checkbox" name="itemSize[]" value="2" />

<input type="checkbox" name="itemSize[]" value="3" />

<input type="checkbox" name="itemSize[]" value="4" />

数据库表的列名为oneSize,small,medium和large。


这是我用来根据论坛中发现的文章插入录音的代码:

$itemName=$_POST["itemName"];
$allsizes=$_POST["itemSize"];
var_dump($allsizes);
$itemSizing="";
foreach($allsizes as $size){
$itemSizing .=$size .",";
}
$itemSizing=substr($allsizes, 0, -2);
$price=$_POST["price"];
$smallPrice=$_POST["smallPrice"];
$mediumPrice=$_POST["mediumPrice"];
$largePrice=$_POST["largePrice"];
$decsription=$_POST["description"];
$category_id=$_POST["category_id"];

然后在insert语句中我尝试列出每一列,然后从复选框中取出的4个项目大小的值被列为连接字符串:

$SQL="INSERT INTO menuItems (itemName,oneSize,small,medium, large,price,smallPrice,mediumPrice,largePrice,description,category_id) VALUES ('$itemName','$itemSizing','$price','$smallPrice','$mediumPrice','$largePrice','$description','$category_id')";

这是错误信息,我试图插入一个小尺寸和大尺寸的记录,并检查其他两个复选框:

array(2) { [0]=> string(1) "2" [1]=> string(1) "4" } 
Warning: substr() expects parameter 1 to be string, array given in menuItems.php on line 162
INSERT INTO menuItems (itemName,oneSize,small,medium,large,price,smallPrice,mediumPrice,largePrice,description,category_id) VALUES ('Garden Salad','','','3.99','','6.99','Fresh greens with lettuce, tomatoes and cucumbers. Served with your choice of dressing.','3') : Error in query. Contact Site Admin

我认为正在创建的字符串是一系列复选框值,这些值被分开以插入各个列 - 这正是我想要发生的 - 但显然它没有用。我显然不是很熟悉数组,所以如果这是一个简单的问题我会道歉。

非常感谢任何人都能提供的任何帮助......

4 个答案:

答案 0 :(得分:0)

substr()的第一个参数需要是字符串,你可以从var_dump语句的输出中看到它提供一个数组:

array(2) { [0]=> string(1) "2" [1]=> string(1) "4" }

正如BuseGönen的评论建议,join函数允许您将数组转换为带逗号分隔值的字符串(您在示例中提供的数组将是字符串“2,4”)。

答案 1 :(得分:0)

$allsizes array no string 

示例

$itemSizing = join(',',$allsizes); 

删除代码

$itemSizing="";
foreach($allsizes as $size){
    $itemSizing .=$size .",";
}
$itemSizing=substr($allsizes, 0, -2);

答案 2 :(得分:0)

由于您的值为1-4,您可以使用for循环检查每个值是否在POST数组中,然后创建$itemSizing字符串 -

//a size array
$itemSizingArray = array();

//for loop for each size value
for($i=1;$i<=4;$i++){
    //add either a '1' or 'NULL' to the array, based on if the checkbox value is in the array
    $itemSizingArray[] = (in_array($i,$_POST["itemSize"]) ? 1: 'NULL');
}
//implode the array
$itemSizing = implode(', ',$itemSizingArray);

因此,以SmallLarge为例,您的字符串将为 -

NULL, 1, NULL, 1

答案 3 :(得分:0)

2错别字

更改

$itemSizing=substr($allsizes, 0, -2);

$itemSizing=substr($itemSizing, 0, -1);//-1 to remove trailing ,

同时更改

$decsription=$_POST["description"];

$description=$_POST["description"];