我读了其他帖子,但我认为我没有找到答案(或者可能只是不知道如何实现它......)。我有一个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
我认为正在创建的字符串是一系列复选框值,这些值被分开以插入各个列 - 这正是我想要发生的 - 但显然它没有用。我显然不是很熟悉数组,所以如果这是一个简单的问题我会道歉。
非常感谢任何人都能提供的任何帮助......
答案 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);
因此,以Small
和Large
为例,您的字符串将为 -
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"];