Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Генерация большой формы!
 
 автор: Front   (26.09.2007 в 09:17)   письмо автору
 
 

Добрый день!
Подскажите как лучше сделать!
Есть таблица ( 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 за пределы цикла. В этом случае данные передаются только из последней сгенерированной циклом формой.
Спасибо!

   
 
 автор: sim5   (26.09.2007 в 09:26)   письмо автору
 
   для: Front   (26.09.2007 в 09:17)
 

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

   
 
 автор: Front   (26.09.2007 в 09:34)   письмо автору
 
   для: 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)

   
 
 автор: sim5   (26.09.2007 в 09:37)   письмо автору
 
   для: Front   (26.09.2007 в 09:34)
 

Тогда вы должны указывать имена чекбоксов как элементы массива, т.е.:


<input type="checkbox" name="soup[]" value="">
<input type="checkbox" name="hot_one[]" value="">
и т.д.

А в скрипте обработчике принимать и обрабатывать эти массивы чекбоксов.

   
 
 автор: Front   (26.09.2007 в 09:44)   письмо автору
 
   для: sim5   (26.09.2007 в 09:37)
 

А как мне получить такой массив checkbox в обработчике?

   
 
 автор: sim5   (26.09.2007 в 09:52)   письмо автору
 
   для: 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>';
  }
}
?>

Будет легко уяснить как это все работает. Далее, думаю, вы сделаете то, чего хотите.

   
 
 автор: Front   (26.09.2007 в 10:20)   письмо автору
 
   для: 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 массивов получается!

   
 
 автор: sim5   (26.09.2007 в 10:40)   письмо автору
 
   для: 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, уясните хрошо как все работает, наведете потом "красоту".

   
 
 автор: Front   (26.09.2007 в 11:17)   письмо автору
 
   для: sim5   (26.09.2007 в 10:40)
 

Так у меня поля то именно так называются (soup, hot_one, hot_two, salad_one, salad_two). Как мне потом в них записывать данные! Мне по любому нужно передать 5 массивов.

   
 
 автор: sim5   (26.09.2007 в 11:31)   письмо автору
 
   для: Front   (26.09.2007 в 11:17)
 

Как у вас называтся поля в таблице, никакой роли не играет. Вы можете назвать чекбоксы вообще как A[], B[], C[], D[].... и так далее по алфавиту. Не скрипт же "чешет темечко" и думает что ему делать, вы ведь определяете, что и куда записывать. Узнали в цикле имя ключа, например это "A", вы знаете что его значение нужно загрузить в поле "soup" таблицы. Вы что думаете, что имена полей вашей таблицы должны обязательно соответсвовать именам чекбоксов. Нет. Но можете и так прописать, но выбирите тогда хотябы стиль написания имен для чекбоксов однотипным, вам же легче будет ориентироваться.
При проходе массива, вы можете просто сформировать запрос к базе, а затем вне цикла выполнить его. Либо делать запросы к базе в цикле после получения значения всех имен кнопок с идексом 0, затем 1 и т.д.
Еще раз говорю, сделайте тестовый скрипт, прогоните его отдельно, и уясните хорошо как это все работает. Воспользуйтесь для этого циклом FOR, это более наглядно и поучительно.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования