За последние 24 часа нас посетили 43166 программистов и 6052 робота. Сейчас ищут 1764 программиста ...

обработка формы

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

  1. nexxer13

    nexxer13 Новичок

    С нами с:
    28 май 2018
    Сообщения:
    5
    Симпатии:
    0
    Здравствуйте! Я в php новичок, но возникла задача - сделать форму и обработать данные, который пользователь в нее вводит.

    Пример html кода формы

    Код (Text):
    1. <form action="form.php" method="post" name="form">
    2. <ul>        
    3. <li>
    4. <p>
    5. <input name="check[1]" type="checkbox" value="item1">item1
    6. <input name="value[1]" type="text" value="1" placeholder="Кол-во">
    7. </p>
    8. </li>
    9.  
    10. <li>
    11. <p>
    12. <input name="check[2]" type="checkbox" value="item2">item2
    13. <input name="value[2]" type="text" value="1" placeholder="Кол-во">
    14. </p>
    15. </li>
    16.  
    17. <li>
    18. <p>
    19. <input name="check[3]" type="checkbox" value="item3">item3
    20. <input name="value[3]" type="text" value="1" placeholder="Кол-во">
    21. </p>
    22. </li>
    23. </ul>
    24. </form>
    Так же есть стандартная форма (имя, почта)(но думаю это не важно)

    Задача: Если человек выбрал какой-то чекбокс или несколько (всего их 20, не стал полный код писать, все по тому же принципу как и в коде выше) надо вывести значение чекбокса(value) и вывести количество из поля value, что получилось например: item1 - 2 шт., item3 - 1 шт.

    Потом эти данные должны обработаться скриптом и отправиться автоматически на почту(до реализации этого еще не дошел, сейчас в первую очередь нужно понять как реализовать задачу по обработке введенных данных, что бы соответствовал checkbox количеству)
     
  2. nexxer13

    nexxer13 Новичок

    С нами с:
    28 май 2018
    Сообщения:
    5
    Симпатии:
    0
    Вроде решилось на другом форуме


    Код (Text):
    1. // Проверим что хоть один чекбокс выбран
    2. if (count($_POST['check'])) {
    3.     // перебор
    4.     foreach ($_POST['check'] AS $key=>$value){
    5.         echo '<br>'. $value .' - '. $_POST['value'][$key] ;
    6.     }
    7. } else
    8.     echo "<br> Вы ничего не выбрали";
     
  3. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    @nexxer13, чекбоксы могу пригодиться на стороне клиента, но по сути они тут не очень-то и нужны, т.к. одно поле может нести информацию и о товаре, и о его количестве.
    HTML:
    1. <form action="#" method="post">
    2.   <label>ФИО</label>
    3.   <input type="text" name="customer" placeholder="ФИО">
    4.   <label>Пивасик
    5.     <input type="checkbox">
    6.     <input type="number" name="item[Пиво]" placeholder="Кол-во" disabled>
    7.   </label>
    8.   <label>Вискарь
    9.     <input type="checkbox">
    10.     <input type="number" name="item[Вискарь]" placeholder="Кол-во" disabled>
    11.   </label>
    12.   <label>Боярышник
    13.     <input type="checkbox">
    14.     <input type="number" name="item[Боярышник]" placeholder="Кол-во" disabled>
    15.   </label>
    16.   <input type="submit" value="Погнали!">
    17. </form>
    Набросал рабочий пример в песочнице
     
  4. nexxer13

    nexxer13 Новичок

    С нами с:
    28 май 2018
    Сообщения:
    5
    Симпатии:
    0
    Спасибо. Вполне интересный вариант, теперь незнаю даже, какой лучше пользовать)
     
  5. nexxer13

    nexxer13 Новичок

    С нами с:
    28 май 2018
    Сообщения:
    5
    Симпатии:
    0
    Плавненько переходим на следующий сабж)

    Все теперь выводится как надо, написал так же код отправки на почту, передается но с проблемой: передается только один чекбокс и количество его, причем почему то крайний выбранный с конца, хотя просто при выводе результатов все работает как надо. Вот код всего моего php файла:

    Код (Text):
    1. <html>
    2.  <head>
    3.   <title>Тестируем PHP</title>
    4.  </head>
    5.   <body>
    6.  
    7. <?php
    8.  
    9. $firstname = $_POST[firstname];
    10. $mail = $_POST[mail];
    11. $message = $_POST[message];
    12. echo "Имя: $firstname\n";
    13. echo "<br>Email: $mail\n";
    14. echo "<br>Сообщение: $message\n";
    15.  
    16. // Проверим что хоть один чекбокс выбран
    17. if (count($_POST['check'])) {
    18.     // перебор
    19.     foreach ($_POST['check'] AS $key=>$value){
    20.         echo '<br>'. $value .' - '. $_POST['value'][$key];
    21.     }
    22. } else
    23.     echo "<br> Вы ничего не выбрали";
    24. mail("example@mail.ru", "Заявка с сайта", "Имя:".$firstname. "\r\nE-mail: ".$mail. "\r\nСообщение: ".$message. "\r\nТовары: ".$value.' - '. $_POST['value'][$key]);
    25. ?>
    26.  </body>
    27.  </html>
    Почему только последний чекбокс отправляется? Тестирую на open server, если важно.
     
  6. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Когда вы проверяете, что "хоть один чекбокс выбран", то догадались же использовать цикл.
    --- Добавлено ---
    Судя по этой фразе, вы входите в группу разработчиков PHP. Что там планируется в новых релизах?