Добавление нескольких значений флажков в несколько столбцов в одной строке

Я читаю другие темы, но не думаю, что нашел ответ (или, возможно, просто не знаю, как это реализовать) для этого. У меня есть таблица 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

Я подумал, что создаваемая строка представляет собой серию значений флажков, выделенных для вставки в различные столбцы — именно это я и хочу сделать — но, очевидно, это не сработало. Я, очевидно, не очень знаком с массивами, поэтому прошу прощения, если это простой вопрос.

Большое спасибо за любую помощь, которую может предоставить любой …

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
0

Другие решения

$allsizes array no string

пример

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

Удалить код

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

2 опечатки

+ Изменить

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

к

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

Также изменить

$decsription=$_POST["description"];

к

$description=$_POST["description"];
0

Первый параметр substr () должен быть строкой, вы предоставляете ему массив, как вы можете видеть из выходных данных вашего оператора var_dump:

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

Как отмечается в комментарии Бузе Гёнена, функция join позволяет вам преобразовывать массив в строку со значениями, разделенными запятыми (тогда массив, который вы указали в примере, будет представлять собой строку «2,4»).

0
По вопросам рекламы [email protected]