Я читаю другие темы, но не думаю, что нашел ответ (или, возможно, просто не знаю, как это реализовать) для этого. У меня есть таблица mysql со столбцами для размера элемента, среди прочего. пользователь заполняет форму, в которой можно выбрать несколько размеров из ряда флажков. я хочу иметь возможность вставлять выбранные значения флажка в соответствующие столбцы, оставляя другие столбцы либо нулевыми, либо, если необходимо, я предполагаю, что значение равно 0. столбцы в формате tinyint прямо сейчас.
‘Один размер’
<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"];
а затем в операторе вставки я попытался перечислить каждый столбец, а затем значения для 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
Я подумал, что создаваемая строка представляет собой серию значений флажков, выделенных для вставки в различные столбцы — именно это я и хочу сделать — но, очевидно, это не сработало. Я, очевидно, не очень знаком с массивами, поэтому прошу прощения, если это простой вопрос.
Большое спасибо за любую помощь, которую может предоставить любой …
Так как ваши ценности 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
$allsizes array no string
пример
$itemSizing = join(',',$allsizes);
Удалить код
$itemSizing="";
foreach($allsizes as $size){
$itemSizing .=$size .",";
}
$itemSizing=substr($allsizes, 0, -2);
2 опечатки
+ Изменить
$itemSizing=substr($allsizes, 0, -2);
к
$itemSizing=substr($itemSizing, 0, -1);//-1 to remove trailing ,
Также изменить
$decsription=$_POST["description"];
к
$description=$_POST["description"];
Первый параметр substr () должен быть строкой, вы предоставляете ему массив, как вы можете видеть из выходных данных вашего оператора var_dump:
array(2) { [0]=> string(1) "2" [1]=> string(1) "4" }
Как отмечается в комментарии Бузе Гёнена, функция join позволяет вам преобразовывать массив в строку со значениями, разделенными запятыми (тогда массив, который вы указали в примере, будет представлять собой строку «2,4»).