[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: checkbox
Guest
День добрый
Есть у меня в базе таблица разделов (id-int,title-var)
Ещё таблица подразделов, в которой также указывается к какому разделу относится подраздел (id-int, title-var, razdel-int)

делаю форму чекбоксов подразделов, группируя по раздела:

echo "<form action='specializacia.php' method='post'>
<br>"
;
$result_razdel = mysql_query ("SELECT * FROM razdel ORDER BY id",$db);
$myrow_razdel = mysql_fetch_array ($result_razdel);
do
{
echo "<br><br>$myrow_razdel[title]";
$razdel_id = $myrow_razdel['id'];
$result_podrazdel = mysql_query ("SELECT * FROM podrazdel WHERE razdel='$razdel_id' ORDER BY id",$db);


$myrow_podrazdel = mysql_fetch_array($result_podrazdel);
do
{
printf ("<br><input type='checkbox' name='cb[]' value='%s' />%s"
,$myrow_podrazdel["id"],$myrow_podrazdel["title"]);
}
while ($myrow_podrazdel = mysql_fetch_array($result_podrazdel));

}
while ($myrow_razdel = mysql_fetch_array ($result_razdel));

echo"<br><br><input type='submit' name='submit' value='Отправить'>
</form>"
;


что мне следует написать в name и value чекбоксов, что потом id выбранных подразделов внести в бд, каждый выбранный подраздел в новую строчку таблицы (т.е. не сплошным текстом в одну ячейку) ?



Спустя 8 минут, 28 секунд (24.05.2011 - 22:21) Игорь_Vasinsky написал(а):
уж не пожадничай - создай для них табличку - зато порядок wink.gif

Спустя 5 минут, 48 секунд (24.05.2011 - 22:26) Guest написал(а):
Игорь_Vasinsky
Да-да, в другую таблицу хочу записать, но как?
Погуглив, нашёл как все выбранные значения в одну ячейку записать, а как в разные - не нашёл

Спустя 14 минут, 33 секунды (24.05.2011 - 22:41) Игорь_Vasinsky написал(а):
Создать таблицу `chekboxs`
id-int | name

id-int - id раздела к которому относится checkbox
name - имя чекбокса

и ни каких auto_increment

Спустя 14 часов, 13 минут, 24 секунды (25.05.2011 - 12:54) Pandion написал(а):
Мой вопрос такой:
что прописать в name и value чекбоксов и каким кодом в обработчике отправить их в таблицу?

Спустя 3 минуты, 1 секунда (25.05.2011 - 12:57) Игорь_Vasinsky написал(а):
Цитата
что прописать в name и value чекбоксов

да хоть rand()
Цитата
и каким кодом в обработчике отправить их в таблицу?

SQL - INSERT INTO

Спустя 19 минут (25.05.2011 - 13:16) linker написал(а):
Поповс детектед.

Мало того, что do {} while() так еще и вложенные друг в друга в виде цикличного исполнения запросов. Всё это делает одним запросом и одним циклом while(){}.

Спустя 17 минут, 59 секунд (25.05.2011 - 13:34) ИНСИ написал(а):
Цитата
Всё это делает одним запросом

Напиши smile.gif

Спустя 30 минут, 29 секунд (25.05.2011 - 14:05) linker написал(а):
Я ничего не знаю о его полях, поэтому SELECT полей такой
SELECT 
`podrazdel`.*
FROM
`razdel`
LEFT JOIN
`podrazdel`
ON
`podrazdel`.`razdel` = `razdel`.`id`
ORDER BY
`podrazdel`.`razdel`,
`podrazdel`.`id`

Спустя 50 минут, 44 секунды (25.05.2011 - 14:56) Pandion написал(а):
Цитата (Игорь_Vasinsky @ 25.05.2011 - 09:57)
Цитата
что прописать в name и value чекбоксов

да хоть rand()
Цитата
и каким кодом в обработчике отправить их в таблицу?

SQL - INSERT INTO

Я так понимаю, это в цикле надо делать. А цикл по чему?

Спустя 33 минуты, 33 секунды (25.05.2011 - 15:29) Pandion написал(а):
например, я пишу в name 'cb[]'
в value пишу id подраздела
тогда на выходе получаю одномерный массив $_POST['cb']
как каждый его элемент записать в отдельное поле таблицы?

Спустя 9 минут, 31 секунда (25.05.2011 - 15:39) Pandion написал(а):
всем спасибо, сам допёр

Спустя 18 часов, 3 минуты, 46 секунд (26.05.2011 - 09:42) ИНСИ написал(а):
linker сейчас у тебя запрос, который просто вытаскивает подразделы сортируя по разделам, а у автор темы есть одно место:

Цитата
echo "<br><br>$myrow_razdel[title]";

То есть, он получается выводит название Раздела, а затем снизу все подразделы. Я так понял, что запрос который ты написал этого не делает. Поэтому мне было интересно, как сделать одним запросом и циклом.

Или ты по другому можешь написать запрос?

Спустя 47 минут, 12 секунд (26.05.2011 - 10:30) linker написал(а):
А в чём проблема?
SELECT 
`razdel`.`title`, `podrazdel`.*
FROM
`razdel`
LEFT JOIN
`podrazdel`
ON
`podrazdel`.`razdel` = `razdel`.`id`
ORDER BY
`podrazdel`.`razdel`,
`podrazdel`.`id`
После него один цикл с проверкой на раздел.
$lastrazdel = '';
while($row = mysql_fetch_assoc($res))
{
if ($lastrazdel != $row['razdel'])
{
echo "<br><br>$row['title']";
$lastrazdel = $row['razdel'];
}
... // Остальной ко дпо выводу подразделов
}
По моему сам должен понимать как это делается.

Спустя 27 минут, 14 секунд (26.05.2011 - 10:57) ИНСИ написал(а):
Цитата
По моему сам должен понимать как это делается.

Неее. Я то сразу знал как сделать, мне просто было интересно, может как-то в запросе какое-то "чудо" происходит :) Мой вариант, немного отличается от твоего, и думаю что твой вариант работать будет быстрее.

Pandion вот еще, вариант:

<form action="specializacia.php" method="post">
<?php

$rows = mysql_query("
SELECT `r`.*,`p`.*
FROM `razdel` AS `r`
LEFT JOIN `podrazdel` AS `p`
ON `p`.`razdel` = `r`.`id`
ORDER BY `p`.`razdel`,`p`.`id`
"
) or die(mysql_error());

if(mysql_num_rows($rows) > 0) {
$arrRazdel = array();
while($data = mysql_fetch_assoc($rows)) {

if(!in_array($data['razdel'],$arrRazdel)) {
echo '<br><br>'.$data['title'];
$arrRazdel[] = $data['razdel'];
}

echo '<br><input type="checkbox" name="cb[]" value="'.$data['id'].'" />' . $data['title'];
}
}

?>
<br><br>
<input
type="submit" name="submit" value="Отправить">

</form>

Спустя 57 минут, 57 секунд (26.05.2011 - 11:55) linker написал(а):
Это
if(sizeof($rows) > 0) {
глупость, даже если ничего не нашлось по запросу, то валидная ссылка на ресурс (пускай и с нулевым количеством записей) в sizeof() всегда отдаст 1. Неверный запрос отсекается or die(). Здесь нет никакого смысла проверять количество возвращаемых строк из базы.

Спустя 1 час, 24 минуты, 45 секунд (26.05.2011 - 13:20) ИНСИ написал(а):
Цитата
глупость, даже если ничего не нашлось по запросу, то валидная ссылка на ресурс (пускай и с нулевым количеством записей) в sizeof() всегда отдаст 1. Неверный запрос отсекается or die(). Здесь нет никакого смысла проверять количество возвращаемых строк из базы.

Упс smile.gif ссори. Я просто использую свой класс, где возвращается массив и потом проверю через sizeof. А тут забыл что не класс, поэтому так затупил, бывает smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.