|
|
|
| Добрый день!
Подскажите как лучше сделать!
Есть таблица ( id, soup, hot_one, hot_two, salad_one, salad_two ).
Я формирую форму в которой каждой записи соответствует checkbox:
$sql = mysql_query ( "SELECT
id,
soup,
hot_one,
hot_two,
salad_one,
salad_two
FROM menu " );
while ($res_menu = mysql_fetch_assoc($sql))
{
echo "<form action='index.php?ea=add_zakaz' method='post'>";
echo "<tr>";
echo "<td onclick='location.href=\"index.php?ea=disp_type&id=$res_type_sp[id]\"' class='list'>$res_menu[soup]</td>";
echo "<td><input type='checkbox' name='soup'></td>";
echo "</tr>";
echo "<tr>";
echo "<td onclick='location.href=\"index.php?ea=disp_type&id=$res_type_sp[id]\"' class='list'>$res_menu[hot_one]</td>";
echo "<td><input type='checkbox' name='hot_one'></td>";
echo "</tr>";
echo "<tr>";
echo "<td onclick='location.href=\"index.php?ea=disp_type&id=$res_type_sp[id]\"' class='list'>$res_menu[hot_two]</td>";
echo "<td><input type='checkbox' name='hot_two'></td>";
echo "</tr>";
echo "<tr>";
echo "<td onclick='location.href=\"index.php?ea=disp_type&id=$res_type_sp[id]\"' class='list'>$res_menu[salad_one]</td>";
echo "<td><input type='checkbox' name='salad_one'></td>";
echo "</tr>";
echo "<tr>";
echo "<td onclick='location.href=\"index.php?ea=disp_type&id=$res_type_sp[id]\"' class='list'>$res_menu[salad_two]</td>";
echo "<td><input type='checkbox' name='salad_two'></td>";
echo "</tr>";
echo "<tr>";
echo "<td colspan='2'>";
echo "<input type='submit' >";
echo "</td>";
echo "</form>";
echo "</tr>";
}
|
Если у меня одна запись в таблице формируется одна форма. Но как мне сделать если записей будет много. Как мне сделать чтобы на форму из трех записей была одна кнопка submit/ Выносил submit за пределы цикла. В этом случае данные передаются только из последней сгенерированной циклом формой.
Спасибо! | |
|
|
|
|
|
|
|
для: Front
(26.09.2007 в 09:17)
| | SUBMIT должна прописываться вне цикла, а вот - "В этом случае данные передаются только из последней сгенерированной циклом формой." как понимать? Тут речь идет о нескольких формах, чего вы хотите? | |
|
|
|
|
|
|
|
для: sim5
(26.09.2007 в 09:26)
| | Я хочу чтобы из допустим 2 записей в таблице фомрировалась форма в которой:
soup (запись_1 в таблице) = checkbox (с именем soup)
hot_one (запись_1) = checkbox (с именем hot_one)
hot_two (запись_1) = checkbox (с именем hot_two)
salad_one (запись_1) = checkbox (с именем salad_one)
salad_two (запись_1) = checkbox (с именем salad_two)
soup (запись_2 в таблице) = checkbox (с именем soup)
hot_one (запись_2) = checkbox (с именем hot_one)
hot_two (запись_2) = checkbox (с именем hot_two)
salad_one (запись_2) = checkbox (с именем salad_one)
salad_two (запись_2) = checkbox (с именем salad_two) | |
|
|
|
|
|
|
|
для: Front
(26.09.2007 в 09:34)
| | Тогда вы должны указывать имена чекбоксов как элементы массива, т.е.:
<input type="checkbox" name="soup[]" value="">
<input type="checkbox" name="hot_one[]" value="">
и т.д.
|
А в скрипте обработчике принимать и обрабатывать эти массивы чекбоксов. | |
|
|
|
|
|
|
|
для: sim5
(26.09.2007 в 09:37)
| | А как мне получить такой массив checkbox в обработчике? | |
|
|
|
|
|
|
|
для: Front
(26.09.2007 в 09:44)
| | Напишите маленький тестовый скрипт и запустите его отдельно.
<form action="" method="post">
<input type="checkbox" name="as[]" value="1">
<input type="checkbox" name="as[]" value="2">
<input type="checkbox" name="as[]" value="3">
<input type="submit" name="check" value="GO">
</form>
<?
if (isset($_POST['check'])) {
for ($i=0; $i<count($_POST['as']); $i++) {
echo $_POST['as'][$i].'<br>';
}
}
?>
|
Будет легко уяснить как это все работает. Далее, думаю, вы сделаете то, чего хотите. | |
|
|
|
|
|
|
|
для: sim5
(26.09.2007 в 09:52)
| | В цикле вывожу:
echo "<tr>";
echo "<td onclick='location.href=\"index.php?ea=disp_type&id=$res_type_sp[id]\"' class='list'>$res_menu[soup]</td>";
echo "<td><input type='checkbox' name='soup[]'></td>";
echo "</tr>";
echo "<tr>";
echo "<td onclick='location.href=\"index.php?ea=disp_type&id=$res_type_sp[id]\"' class='list'>$res_menu[hot_one]</td>";
echo "<td><input type='checkbox' name='hot_one[]'></td>";
echo "</tr>";
echo "<tr>";
echo "<td onclick='location.href=\"index.php?ea=disp_type&id=$res_type_sp[id]\"' class='list'>$res_menu[hot_two]</td>";
echo "<td><input type='checkbox' name='hot_two[]'></td>";
echo "</tr>";
echo "<tr>";
echo "<td onclick='location.href=\"index.php?ea=disp_type&id=$res_type_sp[id]\"' class='list'>$res_menu[salad_one]</td>";
echo "<td><input type='checkbox' name='salad_one[]'></td>";
echo "</tr>";
echo "<tr>";
echo "<td onclick='location.href=\"index.php?ea=disp_type&id=$res_type_sp[id]\"' class='list'>$res_menu[salad_two]</td>";
echo "<td><input type='checkbox' name='salad_two[]'></td>";
echo "</tr>";
|
В обработчике получаю:
$soup=($_POST['soup']);
$hot_one=($_POST['hot_one']);
$hot_two=($_POST['hot_two']);
$salad_one=($_POST['salad_one']);
$salad_two=($_POST['salad_two']);
|
А как мне теперь все это записать в таблицу состоящую из полей:
id, soup, hot_one, hot_two, salad_one, salad_two?
Я же не могу организовать цикл foreach т.к. у меня 5 массивов получается! | |
|
|
|
|
|
|
|
для: Front
(26.09.2007 в 10:20)
| | Можно и foreach применить, только смените названия чекбоксов на типа soup_[], hot_[] и т.д. Не надо называть так как вы опять пишите - ваши имена не должны быть hot_one[] и hot_two[], так как это уже разные массивы будут. У вас должно быть типа:
<input type="checkbox" name="soup_[]" value="">
<input type="checkbox" name="soup_[]" value="">
<input type="checkbox" name="soup_[]" value="">
//далее чекбоксы с этим именем массива
<input type="checkbox" name="hot_[]" value="">
<input type="checkbox" name="hot_[]" value="">
<input type="checkbox" name="hot_[]" value="">
//далее чекбоксы с этим именем массива
//и т.д.
|
Тогда, если применить foreach, пишием:
<?
foreach ($vars["_POST"] as $key => $val) {
if (strstr($key, "soup_")) {
$tmp = $val; //получили значение
//ваше действие
}
//определяем следующее имя
//и т.д.
}
?>
|
Вообще же, пишите так, как вам более понятно, особенно на первых порах, иначе малейшая ошибка вас приведет в ступор. Можно это все описать и простым циклом for, уясните хрошо как все работает, наведете потом "красоту". | |
|
|
|
|
|
|
|
для: sim5
(26.09.2007 в 10:40)
| | Так у меня поля то именно так называются (soup, hot_one, hot_two, salad_one, salad_two). Как мне потом в них записывать данные! Мне по любому нужно передать 5 массивов. | |
|
|
|
|
|
|
|
для: Front
(26.09.2007 в 11:17)
| | Как у вас называтся поля в таблице, никакой роли не играет. Вы можете назвать чекбоксы вообще как A[], B[], C[], D[].... и так далее по алфавиту. Не скрипт же "чешет темечко" и думает что ему делать, вы ведь определяете, что и куда записывать. Узнали в цикле имя ключа, например это "A", вы знаете что его значение нужно загрузить в поле "soup" таблицы. Вы что думаете, что имена полей вашей таблицы должны обязательно соответсвовать именам чекбоксов. Нет. Но можете и так прописать, но выбирите тогда хотябы стиль написания имен для чекбоксов однотипным, вам же легче будет ориентироваться.
При проходе массива, вы можете просто сформировать запрос к базе, а затем вне цикла выполнить его. Либо делать запросы к базе в цикле после получения значения всех имен кнопок с идексом 0, затем 1 и т.д.
Еще раз говорю, сделайте тестовый скрипт, прогоните его отдельно, и уясните хорошо как это все работает. Воспользуйтесь для этого циклом FOR, это более наглядно и поучительно. | |
|
|
|