Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Массив checkbox'ов

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: добавление его в базу данных
imper
Отправлено: 17 Февраля, 2012 - 10:42:03
Post Id



Частый гость


Покинул форум
Сообщений всего: 134
Дата рег-ции: Февр. 2012  
Откуда: Тольятти


Помог: 2 раз(а)

[+]


Помогите пожалуйста, есть массив checkbox'ов надо засунуть в базу все его элементы в базу пробовал с помощью цикла пробовал сначала с помощью foreach не хочит заполнятся ругается (((
как пройтись по всем элементам и засунуть их в базу? =-)


-----
Самое лучшее решение проблемы
самое простое
 
 Top
Panoptik
Отправлено: 17 Февраля, 2012 - 10:47:15
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




в каком виде массив? и в какой вид нужно это всё преобразовать?


-----
Just do it
 
 Top
imper
Отправлено: 17 Февраля, 2012 - 10:52:42
Post Id



Частый гость


Покинул форум
Сообщений всего: 134
Дата рег-ции: Февр. 2012  
Откуда: Тольятти


Помог: 2 раз(а)

[+]


Panoptik пишет:
в каком виде массив? и в какой вид нужно это всё преобразовать?


Короче вот такие чек боксы у меня
<input type="checkbox" name="dop_yslygi[]" value="Фотоотчёты" id="" />
<input type="checkbox" name="dop_yslygi[]" value="Портфолио" id="" />
<input type="checkbox" name="dop_yslygi[]" value="Сертификаты" id="" />
......
......
вот я весь массив взял
if(isset($_POST['dop_yslygi']))
{
$dop_yslygi = $_POST['dop_yslygi'];
$count = count($dop_yslygi); //это количество элементов массива, для цикла.
}

вот я пытаюсь засунуть его в базу(массив) в таблице 9 полей я уже в предыдущем запросе всё остальное засунул а вот это не хочет засовываться(( говорит что у меня 9 полей а я засовываю одно значение,
if($count != 0)
{
for ($i=0; $i < $count; $i++)
{
$query = "INSERT INTO zakaz(dop_yslygi) VALUES". "($dop_yslygi[i])";
if(!mysql_query($query)) echo mysql_error();
}


-----
Самое лучшее решение проблемы
самое простое
 
 Top
Panoptik
Отправлено: 17 Февраля, 2012 - 10:55:21
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




PHP:
скопировать код в буфер обмена
  1. echo $count - сколько показывает?
у чекбоксов есть одна особенность, они посылаются, только тогда, когда отмечены... если неотмечены, то вы их не получите в php


-----
Just do it
 
 Top
imper
Отправлено: 17 Февраля, 2012 - 10:57:17
Post Id



Частый гость


Покинул форум
Сообщений всего: 134
Дата рег-ции: Февр. 2012  
Откуда: Тольятти


Помог: 2 раз(а)

[+]


Panoptik пишет:
PHP:
скопировать код в буфер обмена
  1. echo $count - сколько показывает?
у чекбоксов есть одна особенность, они посылаются, только тогда, когда отмечены... если неотмечены, то вы их не получите в php


не это я учёл, конечно, мне и нужно чтобы сколько отметил столько в базу и засунулось ))
echo $count; показывает число выделенных чекбоксов )


-----
Самое лучшее решение проблемы
самое простое
 
 Top
Panoptik
Отправлено: 17 Февраля, 2012 - 10:57:55
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




PHP:
скопировать код в буфер обмена
  1. $query = "INSERT INTO zakaz(dop_yslygi) VALUES". "($dop_yslygi[$i])";
вот так нельзя делать. массив в строке просто так не распознается, нужно либо брать его в фигурные скобки
PHP:
скопировать код в буфер обмена
  1. $query = "INSERT INTO zakaz(dop_yslygi) VALUES". "({$dop_yslygi[$i]})";

либо как отдельная строка
PHP:
скопировать код в буфер обмена
  1. $query = "INSERT INTO zakaz(dop_yslygi) VALUES"."(".$dop_yslygi[$i].")";

(Добавление)
и конечно же индекс вы задавайте как реременную, а не строку
$query = "INSERT INTO zakaz(dop_yslygi) VALUES". "({$dop_yslygi[$i]})";

(Отредактировано автором: 17 Февраля, 2012 - 11:13:20)



-----
Just do it
 
 Top
imper
Отправлено: 17 Февраля, 2012 - 11:04:49
Post Id



Частый гость


Покинул форум
Сообщений всего: 134
Дата рег-ции: Февр. 2012  
Откуда: Тольятти


Помог: 2 раз(а)

[+]


таааакс, всё попробовал, на вот это
$query = "INSERT INTO zakaz(dop_yslygi) VALUES". "({$dop_yslygi[i]})";
ответил что Column count doesn't match value count at row 1

а на это $query = "INSERT INTO zakaz(dop_yslygi) VALUES"."(".$dop_yslygi[i].")";
вообще фатальную ошибку вывел((
может я в запросе к базе ошибся где то?)


-----
Самое лучшее решение проблемы
самое простое
 
 Top
Viper
Отправлено: 17 Февраля, 2012 - 11:11:14
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Ну и как вы себе представляете такой запрос

INSERT INTO `zakaz` (dop_yslygi) VALUES (1234567890)

Вы пытаетесь в одно поле залить данные из массива чекбоксов при это VALUES у вас даже не разделяются никак, а должны быть через запятую и взяты в одинарные кавычки.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Panoptik
Отправлено: 17 Февраля, 2012 - 11:12:18
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




я же дописал что у вас в массиве неправильный индекс! переменная $i, а не просто строка "i"


-----
Just do it
 
 Top
imper
Отправлено: 17 Февраля, 2012 - 11:27:11
Post Id



Частый гость


Покинул форум
Сообщений всего: 134
Дата рег-ции: Февр. 2012  
Откуда: Тольятти


Помог: 2 раз(а)

[+]


Panoptik пишет:
я же дописал что у вас в массиве неправильный индекс! переменная $i, а не просто строка "i"


да да спасибо я что то с $i прогледел как обычно глупая ошибка =-)


if($count != 0)
{
for ($i=0; $i < $count; $i++)
{
$query = "INSERT INTO zakaz(dop_yslygi) VALUES" . "('$dop_yslygi[$i]')";
}
if(!mysql_query($query)) echo mysql_error();
}

поменял i на $i + сделал не $dop_yslygi[$i] а '$dop_yslygi[$i]' и всё начало работать Улыбка
я тут хотел уже кричать от радости пока не заметил что у меня масив чек боксов выделенных заносится не сразу весь а по очереди и получается что к примеру у id-1 одно значение чек бокса , а у id-2 тоже другое значение а мне надо что бы оба этих значения попали в id-1
Я не умею объяснять, но вроде как смог, надеюсь вы поняли что я имел ввиду? =-)
(Добавление)
Viper пишет:
Ну и как вы себе представляете такой запрос

INSERT INTO `zakaz` (dop_yslygi) VALUES (1234567890)

Вы пытаетесь в одно поле залить данные из массива чекбоксов при это VALUES у вас даже не разделяются никак, а должны быть через запятую и взяты в одинарные кавычки.


да, верно сказано, глупо я запрос составил, спасибо, я это учёл и исправил)))


-----
Самое лучшее решение проблемы
самое простое
 
 Top
sKaa
Отправлено: 17 Февраля, 2012 - 11:41:24
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


Viper пишет:
Ну и как вы себе представляете такой запрос
INSERT INTO `zakaz` (dop_yslygi) VALUES (1234567890)

Это реально используя битовые маски
допустим
INSERT INTO `zakaz` (dop_yslygi) VALUES ('10101');
можно легко приспособить к ряду чекбоксов где 1 = enabled, 0 = disabled.
PHP:
скопировать код в буфер обмена
  1. define('USR_CAN_ADD_NEWS', 1 << 0); // 00001
  2. define('USR_CAN_ADD_FILES', 1 << 1); // 00010
  3. define('USR_CAN_ADD_COMMENTS', 1 << 2); // 00100
  4. define('USR_CAN_ADD_ALBUMS', 1 << 3); // 01000
  5. define('USR_CAN_ADD_NOTES', 1 << 4); // 10000
  6.  
  7. define('USR_CAN_ADD_ALL', USR_CAN_ADD_NEWS | USR_CAN_ADD_FILES | USR_CAN_ADD_COMMENTS | USR_CAN_ADD_ALBUMS | USR_CAN_ADD_NOTES); // 11111
  8.  

Далее просто проверять входящие число :
PHP:
скопировать код в буфер обмена
  1.  
  2. if($user_perm & (USR_CAN_ADD_NEWS)){
  3.   echo '<input type=checkbox class="news" > ';
  4. } else if($user_perm & (USR_CAN_ADD_NEW | USR_CAN_ADD_COMMENTS)){
  5.   echo '<input type=checkbox class="news">';
  6.   echo '<input type=checkbox class="comments">';
  7. }

Хотя я сильно сомневаюсь что автор именно это имел ввиду )))
 
 Top
Panoptik
Отправлено: 17 Февраля, 2012 - 11:45:17
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




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


-----
Just do it
 
 Top
imper
Отправлено: 17 Февраля, 2012 - 11:48:57
Post Id



Частый гость


Покинул форум
Сообщений всего: 134
Дата рег-ции: Февр. 2012  
Откуда: Тольятти


Помог: 2 раз(а)

[+]


нееее, битовые маски мне тут явно не помогут, мне нужно, лично по мое идиотской логике,
что бы сам запрос был не в цикле а $i была в запросе может из запроса ссылаться на $i?
&$i


-----
Самое лучшее решение проблемы
самое простое
 
 Top
Panoptik
Отправлено: 17 Февраля, 2012 - 11:50:50
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




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


-----
Just do it
 
 Top
imper
Отправлено: 17 Февраля, 2012 - 11:57:54
Post Id



Частый гость


Покинул форум
Сообщений всего: 134
Дата рег-ции: Февр. 2012  
Откуда: Тольятти


Помог: 2 раз(а)

[+]


Окей щас всё будет =-)
CREATE TABLE IF NOT EXISTS `zakaz` (
`id` int(20) NOT NULL AUTO_INCREMENT,
`type_kontakta` varchar(25) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`nomer_kontakta` varchar(40) NOT NULL,
`name_famil` varchar(65) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`type_site` varchar(25) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`date` varchar(20) NOT NULL,
`dop_text` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`sites` tinytext CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`dop_yslygi` varchar(200) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=75 ;
вот моя структура

вот я беру из выделенных чекбоксов массив
if(isset($_POST['dop_yslygi']))
{
$dop_yslygi = $_POST['dop_yslygi'];
$count = count($dop_yslygi);
echo $count;
}

Тут я добавляю информацию

$query = "INSERT INTO zakaz VALUES".
"('NULL','$variant','$nomer_kontakta','$name_famil','$typesite','$date','$text1','$text2',' ')";
$result = mysql_query($query);
if(!$result)
{
echo "Сбой при вставке данных в базу" . mysql_error() . "<br /><br />";
}

а тут я пытаюсь добавить в поле dop_yslygi все выделенные чекбоксы которые в массиве
$dop_yslygi Голливудская улыбка


if($count != 0)
{
for ($i=0; $i < $count; $i++)
{
$query = "INSERT INTO zakaz(dop_yslygi) VALUES" . "('$dop_yslygi[$i]')";
}
if(!mysql_query($query)) echo mysql_error();
}


-----
Самое лучшее решение проблемы
самое простое
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB