За последние 24 часа нас посетили 50850 программистов и 1747 роботов. Сейчас ищут 875 программистов ...

Динамическая форма

Тема в разделе "PHP для новичков", создана пользователем savsoft, 24 июн 2017.

Метки:
  1. savsoft

    savsoft Активный пользователь

    С нами с:
    1 фев 2017
    Сообщения:
    98
    Симпатии:
    3
    Всем привет.

    Делаю простой сайт, появилась необходимость создать динамическую форму, то есть по запросу выводить в таблицу записи и одно поле сделать динамическим. Я делаю так,
    Код (Text):
    1. <td><input type="checkbox" name="was<?php echo $row["std_id"]; ?>" value=""></td>
    Собственно вопросы

    1. Вроде выводится, но может есть более правильный вариант.
    2. И самое главное, как ее теперь обработать, в смысле работа с динамическими именами.

    Спасибо
     
  2. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    А кто их обрабатывать будет? JS или Вы хотите выделять чекбоксы и отправлять форму на сервер?
     
  3. savsoft

    savsoft Активный пользователь

    С нами с:
    1 фев 2017
    Сообщения:
    98
    Симпатии:
    3
    Отправлять форму на сервер, теперь мне как-то нужно обработать чекбоксы. Думаю повторно выполнить запрос к базе данных (по которому формировал форму), затем для каждой строки сформировать такое же имя, как и для формы, а затем как-то найти в $_POST нужные значения.
     
  4. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    тогда лучше вот так вот сделать
    Код (Text):
    1. <td><input type="checkbox" name="was[<?= $row["std_id"] ?>]" value="1"></td>
    после отправки на сервер получите в $_POST массив was у которого ключи будут Ваши std_id..
    --- Добавлено ---
    Код (Text):
    1. foreach($_POST['was'] as $k => $v){
    2.      echo "Ключ {$k} => Значение {$v}<br />";
    3. }
     
  5. savsoft

    savsoft Активный пользователь

    С нами с:
    1 фев 2017
    Сообщения:
    98
    Симпатии:
    3
    Спасибо, так гораздо лучше. Уже понятно, буду разбираться дальше.

    А можно ли в массиве хранить по два значения?
     
    #5 savsoft, 25 июн 2017
    Последнее редактирование: 25 июн 2017
  6. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    можно... значением массива может быть другой массив...
    Код (Text):
    1. $array = [
    2.      'key' => ['first_val', 'second_val],
    3. ]
     
  7. savsoft

    savsoft Активный пользователь

    С нами с:
    1 фев 2017
    Сообщения:
    98
    Симпатии:
    3
    Я имел ввиду двумерный массив. Что-то типа
    Код (Text):
    1. <td><input type="checkbox" name="was[<?= $row["std_id"][1] ?>]" value="1"></td>
    2. <td><input type="text" name="was[<?= $row["std_id"][2] ?>]"></td>
     
  8. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    это $row["std_id"][2] уже не двухмерный..
    Код (Text):
    1.  
    2. $row  = [
    3.      'std_id' =>  [
    4.           '2' => 'то значение которое Вы указали',
    5.       ]
    6. ];
    А Вы наверно вот это спрашивали... запустите этот код у себя и посмотрите что POST возвращает когда галочки чекбоксах стоят
    PHP:
    1. <?php
    2.    
    3. if(isset($_POST)){
    4.     var_dump($_POST);
    5.  
    6. }
    7.    
    8. echo '
    9.    <form method="POST" action="">
    10.    <input name="arr[]" type="checkbox" />
    11.    <input name="arr[][]" type="checkbox" />
    12.    <input type="submit">
    13.    </form>';
     
    MouseZver нравится это.
  9. savsoft

    savsoft Активный пользователь

    С нами с:
    1 фев 2017
    Сообщения:
    98
    Симпатии:
    3
    Немного проясняется. На самом деле мне нужно вывести в форме таблицу студентов определенной группы, 4 колонки:
    1. Имя
    2. Фамилия
    3. <input type="checkbox" name= для отметки о присутствии
    4. <input type="text" name= для оценки за урок, может быть, а может не быть

    Собственно, какие выводы я сделал. В массиве $_POST будут только выбранные элементы type="checkbox", но все type="text". Теперь собственно изучаю, как лучше задать атрибут name для этих двух input, и как правильно обработать.
     
  10. savsoft

    savsoft Активный пользователь

    С нами с:
    1 фев 2017
    Сообщения:
    98
    Симпатии:
    3
    Из-за того, что type="checkbox" будут только отмеченные, неизвестно будет ли включен js у клиента, решил использовать два массива was для отметки о присутствии на уроке и mark для оценки. Вот часть формы

    Код (Text):
    1.             <?php
    2.                 while($row = mysqli_fetch_assoc($result)) {                                  
    3.             ?>
    4.            <tr>
    5.                 <td><?php echo $row["std_FName"]; ?></td>
    6.                 <td><?php echo $row["std_LName"]; ?></td>
    7.                 <td><input type="checkbox" name="was[<?= $row["std_id"] ?>]" value="1"></td>
    8.                 <td><input style="width: 250px; margin-left: 50px;" type="text" name="mark[<?= $row["std_id"] ?>]"></td>
    9.                 </tr>
    10.             <?php
    11.                 }
    12.             ?>
    А вот код обработки

    Код (Text):
    1.     if(!empty($_POST["addlesson"])) {
    2.         echo "Добавляем уроки по группе!!! <br />";
    3.  
    4.         foreach($_POST['mark'] as $k => $v){
    5.             $www = 0;
    6.             if (!empty($_POST['was'][$k])) {
    7.                 $www = $_POST['was'][$k];
    8.             }
    9.             echo "Оценка для std_id = {$k} - {$v} Присутствовал - {$www} <br />";
    10.             // Формируем INSERT для записи урока для каждого студента
    11.         }      
    Необходимо ли что-нибудь улучшить или и так работать будет?

    Спасибо
     
  11. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Очень даже двухмерный. Две же "координаты" надо, чтобы локализовать ячейку.
     
  12. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    да... чего то протупил)