Знакомство с формами

Итак открываем php.net, пугаемся, закрываем и забываем как страшный сон на пару-тройку месяцев.. затем открываем вновь и если уже не так страшно начинаем изучать.

Первый пример работающей чего-то полезного нам предлагают сделать это определить с какого браузера мы заходим. Для этого я создаю страницу со следующим содержанием

<?php
echo $_SERVER['HTTP_USER_AGENT'];
?>
Страница находится здесь http://ex.stosite.ru/yourbrouser.php
Собственно названия браузеров выдаются в том виде, в котором должны, но выглядя довольно странно.

Собственно начало работы с формами

Далее приводится пример с которого я и начал изучать, как оно работает. Предлагается ввести имя и возраст и узнать их же 🙂 Ну да, такой функционал не назовешь потрясающим, тем более, что работает он криво, но все же работает и раз уж я решил описывать так как все было то вот смотрите что получилось.

Использованный код:

1 страничка

<form action="action.php" method="post">
 <p>Ваше имя: <input type="text" name="name" /></p>
 <p>Ваш возраст: <input type="text" name="age" /></p>
 <p><input type="submit" /></p>
</form>
2я страничка
Здравствуйте, <?php echo htmlspecialchars($_POST['name']); ?>.
Вам <?php echo (int)$_POST['age']; ?> лет.

Вот что из этого получилось: ex.stosite.ru/name0.php 

Так вот. Вполне себе работает. Правда, когда я этот же самый код запустил на локальной машине вместо букв были сплошные знаки вопроса. Это все из-за кодировки, которая не была указана. Собственно кодировка не указана и сейчас, но её автоматически добавляет хостинг, и только поэтому оно и отображается корректно. Тем не менее скрипт работает. Вы вводите Имя Василий, возраст 25 лет и получаете, что вы Василий и вам 25 лет. Да еще раз, пока это все не очень впечатляет, зато уже работает.

Однако ж если вы допустим Дмитрий и вам 33 года, то вам вряд ли захочется, чтоб вам ответили, что вы Дмитрий и вам «33 лет».

И вот здесь уже начинает начинаться интересное.

Как же сделать так, чтоб в зависимости от того сколько вам лет вы получали ответ 22 года, 21 год или 25 лет.

Первая попытка получилась только для одного варианта — если вам 1 год.

Страничку переписал добавив условие if (1==$_POST[‘age’]), где $_POST[‘age’] — переменная полученная из строки возраст. Но делать то надо для различных возрастов. Тогда я вспомнил, что вообще-то существуют массивы и полазив по php.net нашел их описание. В частности массивы без ключа вида array (1, 2, 3, 4). Далее создал сначала массив возрастов заканчивающихся на год, и проверил его работоспособность, далее добавил массив заканчивающихся на года.

В процессе я выяснил, что сравнение массива и переменной невозможно (ну или у меня не получается), зато на одном из форумов нагуглил функцию in_array, которая позволяет проверить есть ли в массиве какое-то значение или нет. Правда функцию эту пришлось несколько подправить, поскольку она была написана с ошибкой. Помог мне как всегда php.net.

Результат получился такой.

<form action="action.php" method="post">
 <p>Ваше имя: <input type="text" name="name" /></p>
 <p>Ваш возраст: <input type="text" name="age" /></p>
 <p><input type="submit" /></p>
</form>

И вторая страничка

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Document</title>
</head>
<body>
Здравствуйте, <?php 
 
 
 echo htmlspecialchars($_POST['name']); ?>.
Вам <?php echo (int)$_POST['age']; 
 
 $array_god = array(1, 21, 31, 41, 51, 61, 71, 81, 91, 101); 
 
 $array_goda = array(2, 3, 4, 22, 23, 24, 32, 33, 34, 42, 43, 44, 52, 53, 54, 62, 63, 64, 72, 73, 74, 82, 83, 84, 92, 93, 94, 102, 103, 104,);
 
if (in_array($_POST['age'], $array_god)) 
 { 
echo " год.";}
 
elseif(in_array($_POST['age'], $array_goda)) 
 { 
echo " года.";}
 
 else {echo " лет.";}
?>
</body>
</html>

Обратите внимание, что здесь уже добавлены теги html, сделано это для того, чтоб отображалась кодировка utf-8 и соответственно корректно отображались русские буквы.

Получившийся результат можно посмотреть на страничке:

ex.stosite.ru/name.php 

Leave a Reply

Ваш e-mail не будет опубликован.