Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > checkbox как записать в базу множественый выбор


Автор: Цербер 19.12.2007, 00:23
Всем доброе время суток.
вопрос звучит так:
у меня есть форма с checkbox-ами делаю множественный выбор но в базу сохраняется только один из них последний выбранный.
Код

foreach ( $_POST['med'] as $k=>$v)
{
    print_r($k.$v);
}
показывает все выбранные значения а в базу добавляет тока одно.
и вторая часть вопроса как потом изменить запись в поле UPDATE-ом ?
делаю тоже foreach И заппрос на обновление в базу но он не обновляет=(
ну вот такая проблемка у меня  smile за ответы всех заранее благодарю!

Автор: onsql 19.12.2007, 00:32
В html у тебя ведь примерно так?
Код

<input type="checkbox" name="med[]" value="1" />
<input type="checkbox" name="med[]" value="2" />
<input type="checkbox" name="med[]" value="3" />

Автор: Цербер 19.12.2007, 00:40
Код

<input type='checkbox'name='med[]' value='1'>1
<input type='checkbox'name='med[]' value='2'>2
<input type='checkbox'name='med[]' value='3'>3

foreach ( $_POST['med'] as $k=>$v)
{
    
}
$sql_med="UPDATE `medical` SET `med`='$v' WHERE login='{$_SESSION['username']}'";
if(!empty($v)) return $result3=mysql_query($sql_med)or die ($sql_med." ".mysql_error());


Автор: onsql 19.12.2007, 00:46
Мда... Ну последнее значение ты туда записываешь потому что именно оно лежит в переменной $v после выполнения цикла. А вот если например выбрали 2 и 3 то что же должно попасть в поле med в таблице medical по твоей задумке?
Может быть ты путаешь UPDATE и INSERT?

Автор: skyboy 19.12.2007, 00:46
читаешь данніе из массива в цикле.
записіваешь в БД вне цикла.
естественно, запись происходит однократно. 
где аномалия?

Автор: Цербер 19.12.2007, 00:50
вот и я о том же как мне сделать так что бы в таблицу записывался множественный выбор и при обновлении запись изменялась! smile 

Автор: Feldmarschall 19.12.2007, 00:54
Цербер,  давай-ка ты забудешь на время про форму с множественным выбором.

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

Автор: Цербер 19.12.2007, 00:59
если без формы просто запросы на update и insert то так всё работает. а вот связать чекбокс и запросы не додумкаю никак. smile 

Автор: Feldmarschall 19.12.2007, 01:04
отлично.
вот и напиши эти запросы здесь.
отдельно на update и отдельно - на insert

чтобы окружающие могли понять, наконец - что тебе надо.

к тому же я сомневаюсь, что "просто запросы" у тебя работают. 
как правильно заметил onsql, запрос
$sql_med="UPDATE `medical` SET `med`='$v' WHERE login='{$_SESSION['username']}'";
для множественного выбора выглядит странновато.
и ты, возможно, путаешь update и insert 

Автор: onsql 19.12.2007, 01:04
Ну так приведи пример этих работающих запросов, угадать то сложно.

Автор: Цербер 19.12.2007, 18:19
это запрос на INSERT, запрос сам работает, но добавляет тока последий выбраный checkbox, а в планах что бы добовлялись все выбранные.
Код

html - код
<input type="checkbox"name="med[]" value="a">a
<input type="checkbox"name="med[]" value="b">b
<input type="checkbox"name="med[]" value="c">c

php - код
foreach ($_POST['med'] as $med)
{
    
}
$result=mysql_query("INSERT INTO medical (med) VALUES ('{$med}'");


Это запрос на UPDATE. вот он вообще не работает, даже при единичном выборе checkboxa, все остальные запросы срабатывают в форме и обновляют другие записи в таблице а вот checkbox менятся не хочет.
Код

html- код
<input type='checkbox'name='med[]' value='d'> d
<input type='checkbox'name='med[]' value='e'> e
<input type='checkbox'name='med[]' value='f'> f
php - код
$sql_med="UPDATE `medical` SET `med`='$med' WHERE login='{$_SESSION['username']}'";
if(!empty($med)) return $result3=mysql_query($sql_med)or die ($sql_med." ".mysql_error());



я думаю что всё связано с foreach тока как додумать это тему понять не могу!жду вашей помощи! smile 

Автор: Feldmarschall 19.12.2007, 19:43
Цитата(Цербер @  19.12.2007,  18:19 Найти цитируемый пост)
запрос сам работает, но добавляет тока последий выбраный checkbox


может быть, стоит поместить его внутрь цикла?

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

Цитата(Цербер @  19.12.2007,  18:19 Найти цитируемый пост)
запрос на UPDATE. вот он вообще не работает, даже при единичном выборе checkboxa

Что значит - "не работает"? Не выполняется? не обновляет? обновляет, но не то?

Цитата(Цербер @  19.12.2007,  18:19 Найти цитируемый пост)
   smile 

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

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

Автор: Цербер 19.12.2007, 22:23
Цитата

может быть, стоит поместить его внутрь цикла?

если можно покажи как ?

Цитата

Что значит - "не работает"? Не выполняется? не обновляет? обновляет, но не то?

он не обновляет хотя ошибки не выдаёт.

Автор: Feldmarschall 19.12.2007, 22:31
Цитата(Цербер @  19.12.2007,  22:23 Найти цитируемый пост)
если можно покажи как ?

переместить на две строчки выше.

но я совсем не уверен, что этот запрос делает что-то полезное.

Цитата(Цербер @  19.12.2007,  22:23 Найти цитируемый пост)
он не обновляет хотя ошибки не выдаёт. 


Ну выведи его хоть на экран-то. Глазами посмотри - что за запрос ты в базу пишешь. Соответствует ли он твои ожиданиям. Если они есть у тебя - эти ожидания.

Автор: onsql 19.12.2007, 22:58
Вот например в тупую с инсертом.
Код


html - код
<input type="checkbox"name="med[]" value="a">a
<input type="checkbox"name="med[]" value="b">b
<input type="checkbox"name="med[]" value="c">c

php - код
foreach ($_POST['med'] as $med)
{
$result=mysql_query("INSERT INTO medical (med) VALUES ('".mysql_real_escape_string($med)."')");    
}


Но поскольку ты тщательно скрываешь информацию о том, какого результата ты хочешь добиться, то и угадать нужную команду весьма сложно. В случае же с update, по прежнему непонятно что ты хочешь сказать. Хочешь все выбраные значения в поле med забить? Или всё таки несколько строк обновить? Какова вообще структура таблицы medical? Без этого сложно сказать что либо...

Автор: Цербер 19.12.2007, 23:38
неа не пашет вот это.
Код

php - код
foreach ($_POST['med'] as $med)
{
$result=mysql_query("INSERT INTO medical (med) VALUES ('".mysql_real_escape_string($med)."')");    

}

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

Код

foreach ($_POST['med'] as $med)
{
    $result=mysql_query("INSERT INTO medical (med) VALUES ('{$med}'");
}//так тоже не работает- вообще не записывает в базу ни одного элемента.


Код

if(!empty($_POST['med'])) 
{

foreach ($_POST['med'] as $checkbox)
{
    $sql_med=("Update `medical` set `med` = '$checkbox' where login='{$_SESSION['username']}'");
     mysql_query($sql_med);   
}
}//так тоже не обновляет

Автор: onsql 19.12.2007, 23:54
А если так поменять, не возникнет ли при выбранных галочка печать про mysql_query() failed?

Код

foreach ($_POST['med'] as $med)
{
  $result=mysql_query("INSERT INTO medical (med) VALUES ('".mysql_real_escape_string($med)."')");
  if (false === $result)
     die('mysql_query() failed: '.mysql_error());
}


Цитата

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


Ну круто. И как ты предполагаешь хранить в базе несколько интересов? Приведи пример?

Автор: Цербер 20.12.2007, 00:37
Цитата

И как ты предполагаешь хранить в базе несколько интересов? Приведи пример?

как обычный текст... или так нельзя?
or die и mysql_error всё я это пробовал!
мускул ошибки не выдаёт=(

Автор: onsql 20.12.2007, 01:12
Но ведь чудес не бывет? 
Либо $_POST['med'] пусто и в цикл foreach ты не попадаешь - это легко посмотреть, поставив печать внутрь цикла. 
Либо ты попадаешь в цикл и происходит ошибка в insert - тогда должен срабатывать die() и скрипт прерываться (может у тебя php ошибки в лог пишутся и ты их на экране не видишь).
Либо ты попадаешь в цикл и ошибки при выполнении insert не происходит - тогда ты должен видеть новые строки в базе.
Либо тот код, который ты запускаешь, отличается от того что ты написал в форуме.

Автор: Цербер 21.12.2007, 00:48
короче всё с чекбохами разобрался. всем спасибо!
чекбоксы это связываемая таблица! а я просто не знал об этом=) 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)