За последние 24 часа нас посетил 17631 программист и 1722 робота. Сейчас ищет 931 программист ...

Форма в цикле

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

  1. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    Есть форма в цикле. Есть инпуты с уникальными именами. Как обработать конкретный инпут.
    Код (Text):
    1. <form method="post">
    2.                         <? foreach($res as $val):?>
    3.                             <p>
    4.                                 <input type="text" name="<?="id[{$val['id']}]";?>" value="<?=$val['id']?>" hidden>
    5.                                 <input type="text" name="username" value="<?=$val['username']?>" readonly>
    6.                                 <input type="text" name="password" value="<?=$val['password']?>">
    7.                                 <input type="text" name="fio" value="<?=$val['fio']?>">
    8.                                 <input type="submit" class="buttons" value="Изменить"/>
    9.                             </p>  
    10.                         <? endforeach;?>
    11.                 </form>
     
  2. neverlose

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

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    Можно массив сделать.

    Например:
    HTML:
    1. <input name="id[random_string]"/>
    2. <input name="id[random_string2]"/>
    ..
    Обрабатывать можно
    PHP:
    1. foreach ($_POST['id'] as $value) {
    2.     // обработка $value;
    3. }
    Иначе придётся все значения перебирать:
    PHP:
    1. foreach ($_POST as $value) { ... }
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
    после того как отправил POST запрос на некий скрипт, допустим post.php
    PHP:
    1. <?php
    2.  
    3. var_dump ( $_POST );
    узнаешь как работать
    --- Добавлено ---
    не забудь в теге форм прописать атрибут action
    --- Добавлено ---
    P.s: я еще тут.. О великий Нео :D
     
  4. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    По поводу атрибут action. Он не обязателен если скрипт будет выполнятся в том же файле. Мне же просто нужно получить пост с уникальным названием инпута.
     
  5. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    С какой целью фигурные скобки?
     
  6. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    Уникальное имя в массиве. Как нужно? Подскажите?!
     
  7. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    @mkramer экранирование обращения к массиву в строке, не?
     
    mkramer нравится это.
  8. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    А именно?
     
  9. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    Как мне словить именно тот инпут который я отправляю?
     
  10. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    А, невнимательно посмотрел
    --- Добавлено ---
    Ну так, если у input name='id[123]', то он будет доступен в php в $_POST["id"][123] для post или в $_GET["id"][123] для get. Элементарная работа с массивами
    --- Добавлено ---
    Только тога у всех input такие имена должны быть
     
  11. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    В общем тема такая! после
    Код (Text):
    1. <form method="post">
    2.                         <? foreach($res as $val):?>
    3.                             <p>
    4.                                 <input type="text" name="<?="id[{$val['id']}]";?>" value="<?=$val['id']?>" readonly>
    5.                                 <input type="text" name="<?="username[{$val['username']}]";?>" value="<?=$val['username']?>" readonly>
    6.                                 <input type="text" name="<?="password[{$val['password']}]";?>" value="<?=$val['password']?>">
    7.                                 <input type="text" name="<?="fio[{$val['fio']}]";?>" value="<?=$val['fio']?>">
    8.                                 <input type="submit" class="buttons" value="Изменить"/>
    9.                             </p>  
    10.                         <? endforeach;?>
    11.                 </form>
    Нужно обработать только тот инпут который был нажат!
    Код (Text):
    1.     if(isset($_POST['id'])){
    2.         foreach($_POST['id'] as $key=>$val){
    3.             foreach($_POST['fio'] as $key=>$v) {
    4.        
    5.                 $query =  "    UPDATE users
    6.                             SET `fio` = '".$v."'
    7.                             WHERE `id` = '".$val."'
    8.                             ";
    9.                             mysql_query($query) or die(mysql_error());
    10.             }          
    11.         }
    12.     }
    Но почему то он всем `fio` ставит один и тот же инпут!!!!!!! Помогите !!! Рвет крышу совсем! Спасибо!
     
  12. Sergey_Tsarev

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

    С нами с:
    17 мар 2016
    Сообщения:
    502
    Симпатии:
    105
    @New_neo Ты в одной форме создаёшь несколько кнопок submit?
    Каждый проход цикла создавай новую форму. И задай ей имя. И в сабмите пропиши его.

    PHP:
    1. <? foreach($res as $val):?>
    2.     <form method="post" name="form_".уникальное имя или число>
    3.        <input type="text" name="<?="id[{$val['id']}]";?>" value="<?=$val['id']?>" readonly>
    4.        <input type="text" name="<?="username[{$val['username']}]";?>" value="<?=$val['username']?>" readonly>
    5.        <input type="text" name="<?="password[{$val['password']}]";?>" value="<?=$val['password']?>">
    6.        <input type="text" name="<?="fio[{$val['fio']}]";?>" value="<?=$val['fio']?>">
    7.        <input type="submit" class="buttons" form=имя формы value="Изменить"/>
    8.    </form>
    9. <? endforeach;?>
     
  13. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    Допустим я задаю каждой форме имя уникальное. Все равно не получается. Как то все не то!
    --- Добавлено ---
    Есть такой момент! Мне скажем нужно одной кнопкой обновить поля которые я поменял. Как тут быть?
     
  14. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    Форма должна быть вот так:
    Код (Text):
    1.  
    2. <form method="post" name="new_form" action="new.php">
    3.                 <input type="submit" name="rename" class="buttons" value="Изменить"/>
    4.                     <? foreach($res as $val):?>
    5.                             <p>
    6.                                 <input type="text" name="<?="id[{$val['id']}]";?>" value="<?=$val['id']?>" readonly>
    7.                                 <input type="text" name="<?="username";?>" value="<?=$val['username']?>" readonly>
    8.                                 <input type="text" name="<?="password";?>" value="<?=$val['password']?>">
    9.                                 <input type="text" name="fio<?="[{$val['id']}]";?>" value="<?=$val['fio']?>">
    10.                             </p>
    11.                     <? endforeach;?>
    12. </form>
    А вот с отправкой запроса проблема. Когда дамп снимаю вроде все приходит. Когда в цикле начинаю обновлять информацию то она не приходит и данные не сохраняются.
    Код (Text):
    1. if(isset($_POST['fio'])){
    2.         $top=$_POST['id'];
    3.         $fio=$_POST['fio'];
    4.         if(isset($_POST['id'])){
    5.             foreach($top as $key=>$val){      
    6.                 foreach($fio as $v) {
    7.                         $query =  "    UPDATE users2
    8.                                 SET `fio` = '$v'
    9.                                 WHERE `id` = '$val'    ";
    10.                     mysql_query($query) or die(mysql_error());
    11.                 }      
    12.             }
    13.         }
    14.     }
     
  15. neverlose

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

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    Как-то так:

    PHP:
    1. <form method="post" action="new.php">
    2.   <input type="submit" class="buttons" value="Изменить"/>
    3.     <?php
    4.     foreach ($res as $val) {
    5.         $id = htmlspecialchars($val['id']);
    6.         ?>
    7.       <p>
    8.         <input value="<?php echo $id; ?>" readonly="readonly"/>
    9.         <input value="<?php echo htmlspecialchars($val['username']); ?>" readonly="readonly"/>
    10.         <input name="password[<?php echo $id; ?>]" value="<?php echo htmlspecialchars($val['password']); ?>"/>
    11.         <input name="fio[<?php echo $id; ?>]" value="<?php echo htmlspecialchars($val['fio']); ?>"/>
    12.       </p>
    13.         <?php
    14.     }
    15.     ?>
    16. </form>
    PHP:
    1. <?php
    2. if (!empty($_POST['fio'])) {
    3.     foreach ($_POST['fio'] as $id => $value) {
    4.         $query = vsprintf('UPDATE `users2` SET `fio` = "%s" WHERE `id` = "%s"', array(
    5.             mysql_real_escape_string($value),
    6.             mysql_real_escape_string($id),
    7.         ));
    8.         mysql_query($query) or die(mysql_error());
    9.     }
    10. }
    Правда не совсем понятно для чего передавать/выводить пароль, ведь он нигде не используется.
    Код не проверял.
     
  16. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    Это не совсем то!
     
  17. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    Решено! Все гораздо проще оказалось!
    Код (Text):
    1. if(isset($_POST['fio'])){
    2.         $top=$_POST['id'];
    3.         $fio=$_POST['fio'];
    4.         $len=count($top);
    5.         if(isset($_POST['id'])){
    6.             $len = count($top);
    7.             for($i=0; $i<$len; $i++) {              
    8.                 foreach($fio AS $k=>$v) {
    9.                         $query =  "    UPDATE users2
    10.                                     SET fio = '".$v."'
    11.                                     WHERE id = '".$k."'
    12.                                     ";
    13.                                     mysql_query($query) or die(mysql_error());
    14.                 }  
    15.             }
    16.            
    17.         }
    18.     }
     
  18. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    [​IMG]
     
    New_neo нравится это.
  19. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    Код ужасный и опасный? А подробнее. Хочу понять.
    --- Добавлено ---
    Пожалуйста удалите это!
     
  20. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Что удалить?

    лучше вместо цикла, выполнить сразу все запросы, например https://secure.php.net/manual/ru/mysqli.multi-query.php
    ещё код не безопасный, http://phpfaq.ru/mysql/sql_injection