|
|
|
| Здравствуйте!
Подскажите, пожалуйста, возможна ли такая ситуация?
Имеется форма в виде чекбоксов:
<form action="obrabot.php" method="post" name="dano">
<input name="id" type="checkbox" value="1">
<input name="id" type="checkbox" value="2">
<input name="id" type="checkbox" value="3">
…
<input name="id" type="checkbox" value="500">
<input name="sub" type="submit" value="Отправить">
</form>
Также имеется таблица (tabl) в БД MySQl с полями:
id text
1 Текст описания пункта 1
2 Текст описания пункта 2
3 Текст описания пункта 3
…
500 Текст описания пункта 500
Необходимо, что бы при выборе нескольких чекбоксов в форме, из БД выводились описания для выбранных пунктов.
Например, выбраны чекбоксы с номерами 1, 5, 156, 487, 500 и из БД должна выводится информация по описаниям выбранных пунктов.
В файле-обработчике (obrabot.php) я прописал код:
$result=mysql_query("SELECT * FROM tabl WHERE id='$id'",$db);
if (!$result) {echo "<p> Запрос не прошел. <br> Код ошибки:</p>"; exit(mysql_error());}
if (mysql_num_rows($result) > 0) {$myrow= mysql_fetch_array ($result);
do {printf ("<table>
<tr>
<td>
<p> %s </p>
</td>
</tr>
<tr>
<td Описание пункта: %s </td>
</tr>
</table><br>",$myrow["id"],$myrow["text"]);}
while ($myrow= mysql_fetch_array($result)); }
В итоге у меня выводится только последнее значение id =500, а остальные (1,5,156,487) к сожалению нет. Подскажите пожалуйста, можно ли вывести сразу все выбранные значения.
Заранее большое спасибо! | |
|
|
|
|
|
|
|
для: АлексейК
(30.12.2010 в 13:26)
| | Переработайте форму следующим образом (т.е. добейтесь, чтобы у вас был массив данных)
<form action="obrabot.php" method="post" name="dano">
<input name="id[]" type="checkbox" value="1">
<input name="id[]" type="checkbox" value="2">
<input name="id[]" type="checkbox" value="3">
…
<input name="id[]" type="checkbox" value="500">
<input name="sub" type="submit" value="Отправить">
</form>
|
А в запрос (после предварительной проверки на SQL-инъекции и на то, что выбрано хотя бы одно значение) сформируйте следующим образом
<?php
$query = "SELECT * FROM tabl ".
"WHERE id IN (".implode(", ", $_POST['id']).")";
$result=mysql_query($query,$db);
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(30.12.2010 в 14:38)
| | а можно поинтересоваться зачем нужна точка после "SELECT * FROM tabl " ? это всмысле конкатинация строк? чтоб понятнее было? | |
|
|
|
|
|
|
|
для: lightning.say
(30.12.2010 в 15:11)
| | По привычке набрал... Это чтобы строка была короткая (в пределах 80 символов). Так то, конечно этот разрыв не обязателен. | |
|
|
|
|
|
|
|
для: cheops
(30.12.2010 в 16:08)
| | Спасибо cheops!
Идея о массиве, действительно верная я даже похожую форму сделал, но вот с выводом полей из БД, пока что- то не выходит. Вставил Ваш РНР-код, выводит пустую строку, пытаюсь разобраться в чем дело, но всё равно большое спасибо! | |
|
|
|
|
|
|
|
для: АлексейК
(30.12.2010 в 16:19)
| |
<?
$query = "SELECT * FROM tabl WHERE id IN (".implode(",", array_map('intval',$_POST['id'])).")";
|
| |
|
|
|