Дополнение к уроку:
Работая с $_GET или $_POST нам важно в начале разобраться какие данные мы передали в скрипт, поэтому не стесняйтесь распечатывать в момент разработки эти переменные на экран:
echo '<pre>'.print_r($_GET,1).print_r($_POST,1).'</pre>';
Забегая вперёд сразу скажу, что эту строчку в финальной версии всегда необходимо удалять. Отправляя домашку на проверку так же этой строчки не должно быть!
Хочу напомнить важное правило из прошлых уроков, нельзя внутри функции использовать $_POST, только передавать значение внутрь функции.
На таймере урока 1:09:00 был рассмотрен важнейший момент работы с данными, в нём говорилось, что нельзя принимать факт отправки формы если была нажата кнопка:
if(isset($_POST['submit']))
Форма была отправлена тогда, когда были переданы
ВСЕ ДАННЫЕ, даже если форму не заполнили, для нас важен факт того, что эта форма не была модернизирована хакерами, поэтому мы проверяем была ли форма отправлена так:
if(isset($_POST['login'],$_POST['password']))
Данная проверка говорит о том, что у нас форма состоит из логина и пароля, других данных обязательных нет. Хочу заметить, что checkbox является необязательным, так как в случаях, если не отметить его, то $_POST['checkbox'] не будет передан в наш скрипт. Мы же проверяем только обязательные данные.
Если Вам любопытно применить на себе одежду хакера, то зайдите в HTML-инспектор в Chrome, найдите указанный input и удалите его, таким образом Вам удастся отправить форму с нажатием кнопки SUBMIT, но без передачи удалённых input, о чём и идёт речь с демонстрацией в уроке в 1:09:00.
К вышесказанному правилу можно добавить и следующее: нельзя работать с данными, которые могут существовать, а могут и не существовать не проверив их наличие, если мы не уверены в том, что они существуют. Поэтому мы и делаем проверку isset. Если мы создали самостоятельно в PHP $x = 1; то эта переменная всегда существует, а значит проверять её на isset не имеет смысла.
Правильно код выглядит так:
function test($x) {
return $x * 2;
}
if(isset($_POST['number'])) {
echo test($_POST['number']); // вывод результата функции на экран
$result = test($_POST['number']); // записываем результат в переменную
}
Код выше демонстрирует важный момент, если мы пишем return, то мы можем эти данные как выводить, так и помещать в переменную в зависимости от необходимой нам ситуации. Если бы мы писали в функции echo, то мы бы потеряли возможность записать результат в переменную, а значит наша функция стала бы в 2 раза хуже по качеству. Поэтому функция всегда должна возвращать информацию, а не выводить её за исключением редчайших моментов, когда функция служит для вывода информации на экран.
Чуть не забыл маленькую вещь, которая очень важна на мой взгляд. Вместо checkbox или radio верстайте с тегом LABEL так:
<label><input type="radio" name="question" value="да"> Да</label>
<label><input type="radio" name="question" value="нет"> Нет</label>
Массивы из формы мы используем только тогда, когда у нас могут передаваться более 1 значения, а это бывает с checkbox, или специальном select (multiple):
<input type="checkbox" name="question[]">
Под каждым уроком есть 10 тестов, которые помогут Вам закрепить пройденный материал.
Один из тестов будет развивать Вашу логику и интеллект!
Чтобы получить доступ к тестам -
авторизируйтесь!
{"118":{"id":"118","lesson":"14","type":"input","title":"","text":"Прочитайте \u003Ca href=\u0022https:\/\/school-php.com\/tricks\/21\/otnositelnyie-i-absolyutnyie-puti-v-html-i-php\u0022 target=\u0022_blank\u0022\u003EПути для ссылок\u003C\/a\u003E и укажите содержание action у тега form, если мы хотим указать обработчик формы на странице 15.php, лежащий в корне сайта. Запишите только содержание атрибута action без кавычек","answer_type":"Full","answer":"\/15.php","variables":{"0":""},"group":"lvl1","course":"2"},"119":{"id":"119","lesson":"14","type":"yesno","title":"","text":"Может ли форма отправлять данные на другой сайт, а так же передавать любые данные туда?","answer_type":"Int","answer":"0","variables":{"0":""},"group":"lvl1","course":"2"},"120":{"id":"120","lesson":"14","type":"input","title":"","text":"Какой тег крайне рекомендован к использованию всегда мною и связывает радио кнопку или чекбокс с текстом описывающим этот самый input, то есть по нажатию на текст ставилась бы галочка в input","answer_type":"Tag","answer":"label","variables":{"0":""},"group":"lvl1","course":"2"},"121":{"id":"121","lesson":"14","type":"yesno","title":"","text":"Если я не укажу ни один из checkbox name=\u0022mycheckbox\u0022 на странице, будет ли отправлены пустые данные mycheckbox?","answer_type":"Int","answer":"1","variables":{"0":""},"group":"lvl1","course":"2"},"122":{"id":"122","lesson":"14","type":"radio","title":"","text":"Как будет переданы данные с checkbox, если я выберу несколько значений, то есть укажу несколько галочек?","answer_type":"Int","answer":"2","variables":{"0":"Будет передана последняя указанная галочка","1":"Будут данные записаны через запятую","2":"Данные передадутся в виде массива","3":"Будет ошибка"},"group":"lvl1","course":"2"},"123":{"id":"123","lesson":"14","type":"yesno","title":"","text":"Правильно ли написан код обработки отправленной формы:\r\n\u003Cpre class=\u0022code-code\u0022\u003E\u003Ccode\u003Eif(isset($_POST[\u0026#039;submit\u0026#039;])) {\r\n \/\/ обработка формы\r\n}\u003C\/code\u003E\u003C\/pre\u003E\r\nЭта вещь была рассказана в уроке в 1:09:00-1:12:00","answer_type":"Int","answer":"1","variables":{"0":""},"group":"lvl1","course":"2"},"124":{"id":"124","lesson":"14","type":"yesno","title":"","text":"Не беря в пример данный урок вопрос на логику. Если же в определённых ситуациях переменная может существовать, а определённых может не существовать, а нам надо проверить эту переменную равна ли она цифре 1, то обязательно ли нам писать isset в условии if перед проверкой $x == 1 ?","answer_type":"Int","answer":"0","variables":{"0":""},"group":"lvl1","course":"2"},"125":{"id":"125","lesson":"14","type":"input","title":"","text":"Запишите URL-строчку ведущую на файл http:\/\/site.ru\/1.php с передачей методом GET следующих данных ключ=значение: x=1 и y=2","answer_type":"Full","answer":"http:\/\/site.ru\/1.php?x=1\u0026y=2","variables":{"0":""},"group":"lvl1","course":"2"},"126":{"id":"126","lesson":"14","type":"radio","title":"","text":"Какое из следующих утверждений неправильное:","answer_type":"Int","answer":"0","variables":{"0":"Данные переданные методом POST и GET отображаются в адресной строке и дублируются в скрытых данных","1":"Метод GET записывается в адресной строке и новой страницей можно поделиться с другими пользователя","2":"Метод POST передаёт скрытые данные и поделиться с остальными пользователями новой страницей с переданными данными нельзя","3":"Методы GET и POST являются способом общения посетителя с сайтом"},"group":"lvl1","course":"2"},"127":{"id":"127","lesson":"14","type":"radio","title":"","text":"Какой метод служит для передачи файлов?","answer_type":"Int","answer":"1","variables":{"0":"GET","1":"POST","2":"FILE","3":"DATA"},"group":"lvl1","course":"2"}}
{"0":"118","1":"119","2":"120","3":"121","4":"122","5":"123","6":"124","7":"125","8":"126","9":"127"}