2014-12-29 4 views
0

Я прочитал другие темы, но не думаю, что нашел ответ (или, может быть, просто не знаю, как его реализовать ...). У меня есть таблица mysql со столбцами для размера элемента, среди прочего. пользователь заполняет форму, в которой размеры mulitple могут быть выбраны из серии флажков. я хочу, чтобы иметь возможность вставлять выбранные значения флажка в соответствующие столбцы, оставляя остальные столбцы нулевыми или, если необходимо, угадывать как значение 0. столбцы - это формат tinyint прямо сейчас.Добавление нескольких значений флажка в несколько столбцов в одной строке

'One Size'

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

Малый

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

Medium

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

Большой

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

таблица базы данных имеет столбцы с именем oneSize, малые, средние и большие.


ВОТ КОД Я пытался вставить запись основан на статью в найдене в форуме:

$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')"; 

Это ошибка СООБЩЕНИЯ Я GOT при попытке вставки A RECORD Показывая небольшой размер и A БОЛЬШОЙ РАЗМЕР галочка, а два других Флажки ЛЕВОГО UNCHECKED:

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 

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

большое спасибо за любую помощь, кто может обеспечить ...

+0

Вы можете добавить вывод 'эхо«

".print_r($_POST,true)."
»' в вашем вопросе, чтобы мы видим, что вы отправляете? Благодарю. – Nikos

+0

Нет ** foreach() ** $ sizing = join (',', $ allsizes); –

+0

большое спасибо за ваши ответы - я сначала попробовал решение, отправленное Buse Gonen, но не смог заставить его работать, скорее всего, из-за того, что не знал точно, что реализовать. Затем я попробовал решение, размещенное Шона ниже, и получил его на работу. очень ценится всем. – GlobalVillage

ответ

0

Поскольку ваши ценности 1-4, вы могли бы использовать цикл, чтобы проверить, если каждое значение в 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

получил это - просто обеспечил, чтобы все поля db были правильно настроены в стиле и позволяли пустым значениям, изменили 'null', чтобы быть только 0 для будущих параметров запроса и попробовали - успех! Спасибо, Шон. – GlobalVillage

0

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

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

Как комментарий BUSE Gönen предложил, присоединиться функция позволяет преобразовать массив в строку с разделителями запятыми значений (массив, предоставленные вами в примере будет затем строка «2,4»).

+0

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

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"];