bo4kov
Продвинутый
Дата регистрации:
11.06.2012 11:21:31
Сообщений: 65
Как добавить в БД несколько выбранных чекбоксов? Как на сайте http://myrusakov.ru/editsubscribe.html (подписка на рассылку). У меня получается добавить только один чекбокс в БД , а вот два и больше не хочет(если я выбираю больше одного чекбокса, то в базу добавляеться один последний выбранный чекбокс). Как решить эту проблему?
Вот как я вывожу чекбоксы:
<?php foreach($categories as $item) {?>
<p>
<input type="checkbox" name="cat" value="<?=$item['title_en'];?>" />
<span><?=$item['title'];?></span>
</p>
<?php }?>
Admin
Администратор
Дата регистрации:
27.05.2010 21:23:42
Сообщений: 3063
Тут проблема, собственно, не в базе, а в том как получить POST всех чекбоксов. Нужно назвать их всех как-нибудь так cat[] (как массив), тогда достать их можно будет все через foreach($_POST['cat'] as $item) {...}
bo4kov
Продвинутый
Дата регистрации:
11.06.2012 11:21:31
Сообщений: 65
Вот как я вывожу чекбоксы:
<?php foreach($categories as $item) {?>
<p>
<input type="checkbox" name=cat[] value="<?=$item['title_en'];?>" />
<span><?=$item['title'];?></span>
</p>
<?php }?>
Все равно не получаеться добавить массив в базу данных. Например я выбираю три чекбокса, а добовляеться только последний выбранный. Пробовал использовать функцию implode(), но с ней выдает ошибку.
bo4kov
Продвинутый
Дата регистрации:
11.06.2012 11:21:31
Сообщений: 65
Кто-то может помочь? Может я не правильно вытаскиваю из POST в массив?
Вот код:
foreach ($_POST['cat'] as $item) {
$info['category'] = $item;
}
И потом добавляю массив $info в базу, но добавляться только один чекбокс(хотя выбираю три чекбокса). Как решить проблему?
Admin
Администратор
Дата регистрации:
27.05.2010 21:23:42
Сообщений: 3063
Потеряли кавычки.
name="cat[]"
bo4kov
Продвинутый
Дата регистрации:
11.06.2012 11:21:31
Сообщений: 65
пробовал и с кавычками и без, та же проблема. как исправить ?
fabrigas201
Продвинутый
Дата регистрации:
20.01.2012 13:08:31
Сообщений: 59
Попробуйте сериализовать данные. Что бы из трех чекбоксов получить строку. Точнее из массива. Вот пример написанный на коленке. Ориентируйтесь по нему. Если вы хотите записать все выбранные чекбоксы , то лучше сериализовать. Циклом вы сможете записать только одно значение чекбокса в ячейку. Если вам нужно чтобы каждое значение чекбокса записывалось в отдельную ячейку, то в цикле делайте INSERT.
<form action="#" method="POST">
<input type="checkbox" name="name[]" value="one"/>
<input type="checkbox" name="name[]" value="two"/>
<input type="checkbox" name="name[]" value="free"/>
<input type="submit" name="s"/>
</form>
<?php
// смотрим что пришло. Не обращать внимания что идет раньше проверки. Это просто пример.
echo "<pre>";
print_r($_POST['name']);
echo "</pre>";
// проверяем если есть записи
if(count($_POST['name'])){
//сериализуем
$ser = serialize($_POST['name']);
}
//Такую строку можно достать из БД. И из нее уже получит массив.
$arr = unserialize($ser);
if($arr){
echo "<ul>";
foreach($arr as $data){
echo "<li>". $data."</li>";
}
echo "</ul>";
}
?>
либо не делайте цикл а записывайте просто массив в базу целиком.несколько записей только массив.
bo4kov
Продвинутый
Дата регистрации:
11.06.2012 11:21:31
Сообщений: 65
сериализация мне не подходит, да и ошибки выдает, если просто добовлять массив $_POST в БД (c выбранными 3-мя чекбоксами), то в базу добавляеться слово Array, а не значения Value. Михаил как вы реализовали возможность добавления нескольких выбранных чекбоксов на своем сайте(в подписке)?