Формы могут содержать различные элементы - текстовые поля, флажки, переключатели и т.д., обработка которых имеет свои особенности.
Флажки или чекбоксы (html-элемент <input type="checkbox"/>
) могут находиться в двух состояниях: отмеченном (checked) и
неотмеченном. Например:
Запомнить: <input type="checkbox" name="remember" checked="checked" />
Если флажок находится в неотмеченном состоянии, например:
Запомнить: <input type="checkbox" name="remember" />
то при отправке формы значение данного флажка не передается на сервер.
Если флажок отмечен, то при отправке на сервер для поля remember
будет передано значение on
:
$remember = $_POST["remember"];
Если нас не устраивает значение on
, то с помощью атрибута value
мы можем установить нужное нам значение:
Запомнить: <input type="checkbox" name="remember" value="1" />
Иногда необходимо создать набор чекбоксов, где можно выбрать несколько значений. Например:
<!DOCTYPE html> <html> <head> <title>METANIT.COM</title> <meta charset="utf-8" /> </head> <body> <?php if(isset($_POST["technologies"])){ $technologies = $_POST["technologies"]; foreach($technologies as $item) echo "$item<br />"; } ?> <h3>Форма ввода данных</h3> <form method="POST"> <p>ASP.NET: <input type="checkbox" name="technologies[]" value="ASP.NET" /></p> <p>PHP: <input type="checkbox" name="technologies[]" value="PHP" /></p> <p>Node.js: <input type="checkbox" name="technologies[]" value="Node.js" /></p> <input type="submit" value="Отправить"> </form> </body> </html>
В этом случае значение атрибута name должно иметь квадратные скобки. И тогда после отправки сервер будет получать массив отмеченных значений:
$technologies = $_POST["technologies"]; foreach($technologies as $item) echo "$item<br />";
В данном случае переменная $technologies
будет представлять массив, который можно перебрать и выполнять все другие операции с массивами.
Переключатели или радиокнопки позволяют сделать выбор между несколькими взаимоисключающими вариантами:
<!DOCTYPE html> <html> <head> <title>METANIT.COM</title> <meta charset="utf-8" /> </head> <body> <?php if(isset($_POST["course"])) { $course = $_POST["course"]; echo $course; } ?> <h3>Форма ввода данных</h3> <form method="POST"> <input type="radio" name="course" value="ASP.NET" />ASP.NET <br> <input type="radio" name="course" value="PHP" />PHP <br> <input type="radio" name="course" value="Node.js" />Node.js <br> <input type="submit" value="Отправить"> </form> </body> </html>
На сервер передается значение атрибута value
у выбранного переключателя. Получение переданного значения:
if(isset($_POST["course"])) { $course = $_POST["course"]; echo $course; }
Список представляет элемент select
, который предоставляет выбор одного или нескольких элементов:
<!DOCTYPE html> <html> <head> <title>METANIT.COM</title> <meta charset="utf-8" /> </head> <body> <?php if(isset($_POST["course"])) { $course = $_POST["course"]; echo $course; } ?> <h3>Форма ввода данных</h3> <form method="POST"> <select name="course" size="1"> <option value="ASP.NET">ASP.NET</option> <option value="PHP">PHP</option> <option value="Ruby">RUBY</option> <option value="Python">Python</option> </select> <input type="submit" value="Отправить"> </form> </body> </html>
Элемент <select>
содержит ряд вариантов выбора в виде элементов <option>
:
Получить выбранный элемент в коде PHP как и обычное одиночное значение:
if(isset($_POST["course"])) { $course = $_POST["course"]; echo $course; }
Но элемент <select>
также позволяет сделать множественный выбор. И в этом случае обработка выбранных
значений изменяется, так как сервер получает массив значений:
<!DOCTYPE html> <html> <head> <title>METANIT.COM</title> <meta charset="utf-8" /> </head> <body> <?php if(isset($_POST["courses"])) { $courses = $_POST["courses"]; foreach($courses as $item) echo "$item<br>"; } ?> <h3>Форма ввода данных</h3> <form method="POST"> <select name="courses[]" size="4" multiple="multiple"> <option value="ASP.NET">ASP.NET</option> <option value="PHP">PHP</option> <option value="Ruby">RUBY</option> <option value="Python">Python</option> </select><br> <input type="submit" value="Отправить"> </form> </body> </html>
Такие списки имеют атрибут multiple="multiple"
. Для передачи массива также указываются в атрибуте name
квадратные скобки:
name="courses[]"