1. у каждой формы есть метод отправки (см. тег form) - method - default GET
<form action="" method="GET">
<form action="" method="POST">
если ты указывает GET - то все параметры формы будут передены в суперглобальный массив $_GET - кроме этого ты увидишь их в урл -
http://site.ru?param1=val1&m2=val2&sumbit=sendНедостатков у GET хватает, например
- в урле поместится только определённое кол-во символов
- в урле они доступны визуально - и с ними просто можно хулиганить
метод POST - передаст же данные в суперглобальный массив $_POST (такую форму можно так же с имитировать с cURL), но кол-во параметров, которые можно передать - в разы больше, чем у GET, я не помню точно ограничение - не суть, главно - что так просто POST не с имитировать - как это можно с GET
кроме этого - чтобы управлять данными - т.е. отправить их на нужный обработчик (файл) - есть атрибут action - если он не указан или пуст - то бед расцениваться - что данные расчитывается принять - там же, где и сама форма
чтобы форма отправила данные - необходима кнопка (input) с атрибутом type="submit"
по твоему вопросу:
submit - всегда будет передан после нажатия , но он нужен лишь для того, по сути, чтобы поймать тот момент - отправки данных с формы,т.е.
test.php<?php
if(isset($_POST['send'])){
$p1=$_POST['p1'];
$p2=$_POST['p2'];
echo 'переданы след. параметры: '.$p1.', '.$p2;
}
?>
<html>
<head>
<body>
<form method="POST" action="">
<input type="text" name="p1"/>
<input type="text" name="p2"/>
<input type="submit" name="send"/>
</form>
</body>
</html>
можно сделать простую проверку - на обязательность заполнения полей
<?php
if(isset($_POST['send'])){
$p1=trim($_POST['p1']);
$p2=trim($_POST['p2']);
$errors = array();
if(empty($p1)) $errors[] = 'Поле p1 не может быть пустым';
if(empty($p2)) $errors[] = 'Поле p2 не может быть пустым';
if(!empty($errors)){
echo implode("<br/>", $errors);
}
else{
echo 'переданы след. параметры: '.$p1.', '.$p2;
}
}
?>
по твоему варианту с несколькими вариантами ответов на примере кнопок radio
<form method="POST" action="">
<input type="radio" name="q" value="answer1"/>answer1
<input type="radio" name="q" value="answer2"/>answer2
<input type="radio" name="q" value="answer3"/>answer2
<input type="submit" name="send"/>
</form>
тут особое внимание на HTML, на правильность формы
3 кнопки radio - с одним именем (q) - говорят о том, что из всех 3х - можно выбрать только одну
если нет очмеченной кнопки по дефолту checked="checked" - значит - ты допускаешь - что могут не выбрать ни один ответ, в этой случае
$_POST['q'] - просто не будет существовать после отправки - isset($_POST['q']) === false
если ты сделаешь у одной кнопки атрибут checked="checked" - значит при прорисовки формы - уже оДин варианта будет выбран, посетителю - нужно будет укакзать свой вариант из группы кнопок - в этом случае ты будешь иметь isset($_POST['q']) === true , а значение
$_POST['q'] будет равен
value этой кнопки
т.е - ещё раз об основных моментах:
- если ты хочешь предоставить несколько вариантов ответов на один вопрос - используй группы - radio, checkbox - несколько кнопок с одинаковым name
- если ответ на вопрос обязателен - задай default ответ с помошью checked="checked"
<input type="radio" name="q" value="answer1" checked="checked"/>answer1
вот в принципе и усё.
можно использовать ещё и select - но тогда весь список доступных ответов будет доступен только при раскрытии списка - что по моему - не комильфо.
можно так же и проверять обязательность ответов и на клиенте - JS - для юзабилити - подсветки обязательных вопросов, да чтоб данные на сервер не гонять в холостую каждый раз
но, если есть проверка на клиенте - то совсем не говорит о том, что на серверной стороне на проверки можно забить - нет - серверные проверки нужны в любом случае.
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker