<?php
$student["name"] = "Ann";
$student["surname"] = "Petrova";
$student["age"] = 20;
print count($student);
?>
В данном примере мы сначала создаем массив $student, а затем просим вывести на экран браузера результат работы функции count(). В качестве аргумента функции используем массив $student, количество элементов которого необходимо подсчитать. Результатом работы программы является появление на экране браузера числа 3.
Просмотр массива с помощью цикла foreach
Очень часто требуется вывести на экран браузера все элементы массива. Для выполнения этой операции лучше всего использовать инструкцию foreach.
Пример 5.7 Просмотр массива с помощью инструкции foreach
<?php
$students = array("Ira","Vadim","Alex","AnnМ);
foreach($students as $temp)
{
print "$temp<br>";
}
?>
В данном примере мы сначала создаем массив $students, состоящий из четырех элементов. Затем мы используем инструкцию foreach. В данном случае $students – это имя массива, который нужно просмотреть, а $temp – переменная, где будет временно храниться значение каждого элемента. Инструкция foreach работает следующим образом: сначала значение каждого элемента массива временно помещается в переменную $temp, а потом выводится на печать с помощью функции print, содержащейся в теле (между фигурных скобок) инструкции foreach. Элементы массива перебираются последовательно, один за другим. Результатом работы данной программы будет вывод на экран браузера следующего:
Ira
Vadim
Alex
An4n
Просмотр в цикле ассоциированного массива
Для того, чтобы просмотреть в цикле ассоциированный массив, нужно написать инструкцию foreach несколько по-другому. Дело в том, что нам придется временно сохранять не только значение каждого элемента, но и его имя.
Пример 5.8 Просмотр ассоциированного массива
<?php
$tel = array(
"Max Koshelev" => "580-46-82",
"Ann Reish"=> "589-90-34",
"Pashsa Golikov" => "480-57-58"
);
foreach ($tel as $key=>$temp);
{
print "$key - $temp<br>";
}
?>
Здесь $tel – это имя массива, $key – переменная (ключ), в которой сохраняется имя каждого элемента массива, а $temp – переменная, где временно сохраняются значения каждого элемента.
Вывод этой программы выглядит следующим образом:
Max Koshelev - 580-46-82
Ann Reish - 589-90-34
Pashsa Golikov - 480-57-58
Сортировка простого массива с помощью функции sort()
Сортировка данных (т.е. расположение данных в некотором специальном порядке, например, по возрастанию или убыванию) является одним из наиболее важных применений компьютера.
Функция sort() принимает всего один аргумент – массив – и сортирует его в алфавитном порядке, если хотя бы один, из числа его элементов является строкой, и в числовом порядке, если все его элементы - числа. Эта функция преобразует переданный массив.
Пример 5.9 Сортировка простого массива с помощью функции sort()
<?php
$abc = array("c", "a", "b");
sort($abc);
foreach($abc as $temp)
{
print "$temp<br>";
}
?>
Результатом работы программы будет вывод на экран элементов отсортированного массива $abc.
A
B
C
Функция sort() изменяет положение элементов внутри нашего массива. Если до начала сортировки при запросе элемента массива с нулевым индексом вы получили бы значение c, то после применения функции sort() результатом на аналогичный запрос будет значение a. Сортировка массива в обратном порядке выполняется функцией rsort().
Сортировка ассоциированного массива производится аналогично, только используются функции asort() (сортировка по значениям в порядке возрастания) и ksort() (сортировка по ключам). Для сортировки в обратном порядке используются функции arsort() и krsort() соответственно.
Задание для самопроверки
Создайте массив, состоящий из десяти элементов, причем значение каждого последующего элемента должно быть больше предыдущего в три раза, используйте при создании данного массива цикл. Осуществите вывод данного массива на экран браузера.
Решите ту же задачу, но элементы массива выведите в обратном порядке.
П.6.Работа с формами
Мы рассмотрели достаточное количество примеров, но всем им не хватало связи с реальностью. Пора приступать к работе. В Web-пространстве для передачи данных от посетителя Web-страницы на сервер используются HTML-формы. В PHP предусмотрены многочисленные средства для работы с формами.
Для работы с данными из формы в современных версиях PHP используются специальные переменные окружения, которые представляют собой ассоциативные массивы. Сейчас нас интересуют две такие переменные - $_POST и $_GET. Они используются при соответствующих методах передачи данных через форму (параметр method в теге form). Ключом в массивах является имя поля в форме, а значением – значение поля. Например, если в форме был выбран метод GET и было поле name для занесения имени пользователя, то файлу указанному в параметре action тега form будет передан массив с одним элементом. Доступен он будет следующим образом:
echo $_GET['name'];
А при методе POST:
echo $_ POST['name'];
Так чем же отличаются методы POST и GET? Об этом мы поговорим чуть позже.
Программа обработки данных, введенных пользовател ем
Для того чтобы материал был понятнее, до некоторого времени будем разделять HTML-текст и текст PHP-программы.
Пример 6.1 HTML-форма для ввода пароля доступа (файл primer6_1.html)
<html>
<head>
<title> Form </title>
</head>
<body>
<form action="primer6_2.php" method="GET">
Введите пароль: <input Type="password" Name = "pas" Size="10" Maxlength = "10">
<input Type="Submit" Value="Проверка пароля" Name = "go" >
</form>
</body>
</html>
Мы создали форму, в которой есть модифицированное текстовое поле (текстовое поле типа password позволяет скрыть ввод пароля от посторонних наблюдателей) с именем “pas” и кнопка передачи данных “Submit”. Сделаем некоторые пояснения.
Рассмотрим дескриптор <form>. Дескриптор или тэг– это простой элемент разметки, который всегда имеет такой вид: <дескриптор>. Контейнером называется пара дескрипторов HTML в форме: <дескриптор> </дескриптор>. Элемент <дескриптор> служит для включения, а </дескриптор> для выключения одного и того же объекта.
Дескриптор <form> быть в начале каждой формы. При создании этого дескриптора указывается имя файла, находящегося на сервере, который будет обрабатывать, получаемую из формы информацию, и способ пересылки информации, задаваемый атрибутами ACTION и METHOD. ACTION – указывает на файл primer6_1.php, который должен обрабатывать данные полученные от формы. Поскольку мы указали здесь только имя файла, а путь к нему опустили, то этот файл должен находиться в том же каталоге на сервере, что и HTML–документы. METHOD – указывает, как следует отсылать информацию ее обработчику. Может принимать значение POST – при этом данные из формы передаются отдельно от URL обработчика, или GET – в этом случае информация из формы для передачи на сервер записывается в конец URL обработчика. Если сказать проще, разница между ними заключатся в том, будете вы видеть имена и значения предаваемых переменных вверху окна браузера или нет.
Дескриптор <Input> необходим для получения информации от пользователя. Параметр Type устанавливает нужный тип поля ввода, Name – указывает имя поля, Size –размер поля ввода в символах, Maxlength – устанавливает максимальное количество символов, вводимых в поле ввода.
Submit – кнопка, с помощью которой можно отправить на сервер данные, введенные в форму. Используя это значение с атрибутом VALUE, на кнопке можно установить любой текст.
На приведенном ниже рисунке можно посмотреть, какая форма у нас в итоге получилась.
Рис 6.1 HTML-форма для ввода пароля
Далее расположен файл с PHP-программой. Все данные из нашей формы будут поступать в этот файл, который будет их обрабатывать.
Пример 6.2 Обработчик HTML-формы для ввода пароля доступа ( файл primer6_2.php )
<?php
if ($_GET['pas'] == "17er0482")
{
print "Добро пожаловать!";
}
else
{
print "Незарегистрированный пользователь!";
}
?>
Как вы уже догадались, текст обработчика формы должен находиться в файле с именем primer6_2.php, и этот файл будет запускаться сервером тогда, когда пользователь нажмет кнопку передачи на форме. В программе мы обращаемся к единственной переменной $_GET['pas'], значение которой и просим ввести пользователя. Именно в эту переменную попадает значение пароля, который вводит пользователь. В самой PHP-программе мы сравниваем это значение с правильным (17er0482) и в зависимости от результатов сравнения принимаем решение о статусе пользователя.
Обработка элементов с многозначным выбором
В предыдущем примере у нас одному элементу соответствовало одно значение. Для того, чтобы обрабатывать информацию от элементов, которые позволяют выбирать сразу несколько значений из списка, необходимо использовать массивы. Рассмотрим небольшой пример с использованием тэга select.
Пример 6.3 HTML-форма с тэгом select (primer6_3.html)
<html>
<head>
<title>Form with select </title>
</head>
<body>
<form action="primer6_4.php" method="GET">
Ваш НИК: <input type="text" name="nick" size = "8" maxlength = "8">
<br>
Немного о себе:
<br>
<textarea name="info" rows = "5" cols = "30">
</textarea>
<br>
Увлечения:
<br>
<select name = "interests[]" multiple>
<option> Компьютеры
<option> Спорт
<option> Активный отдых
<option> Книги
</select>
<br>
<input type="submit" value="Послать анкету" Name = "go">
</form>
</body>
</html>
Теперь в программе, предназначенной для обработки этой формы, значения, выбранные пользователем в элементе "interests[]", будут доступны как элементы массива $_GET['interests']. Вся полученная информация передается файлу primer6_3.php.На рисунке 6.2 вы увидите, как будет выглядеть наша форма.
Рис 6.2 Форма-анкета
Пример 6.4 Обработка результатов анкетирования (файл primer6_4.php)
<?php
print "<h1>".$_GET['nick']."</h1><br>";
print "<b>Немного о себе<br>";
print $_GET['info']."<br>";
print "Мои увлечения</b><br>";
foreach($_GET['interests'] as $temp)
{
print "<i>".$temp."</i><br>";
}
?>
В нашей PHP-программе мы выводим на экран браузера значения переменных, полученных от формы ($_GET['nick'], $_GET[‘$info’] и массив $_GET[‘$interests’).
Расположение HTML-текста и PHP-программы на одной странице
При некоторых обстоятельствах вам может понадобиться расположить PHP-программу, обрабатывающую, данные на той же странице, что и форму, передающую такие данные. Для того, чтобы четко понимать зачем это делается, нужно знать различия между PHP и HTML.
PHP – это язык программирования, используемый на стороне сервера, конструкции которого вставляются HTML-текст. В отличие от обычного HTML-текста Web-страницы, программа PHP не передается браузеру, а обрабатывается интерпретатором PHP. Фрагменты HTML-текста остаются при этом без изменений, а операторы PHP выполняются и результат их обработки вставляется в HTML-текст, после чего они все вместе передаются браузеру клиента. Таким образом, для создания серьезного Web-проекта требуются два человека: дизайнер, обладающий тонким дизайнерским чутьем (работа заключается в размещении некоторого ресурса на Web-странице и в создании единого оформительского стиля), и программист, который пишет блоки программы, позволяющие оживить проект, сделать его интерактивным.
Основным недостатком HTML является то, что Web-страницы созданные с мощью HTML статичны, они мертвы и выводят всегда одну и туже информацию, хотя и в очень удобном виде. PHP позволяет убрать эту статичность.
Попробуем написать программу, в которой некоторая форма выводится несколько раз. Рассмотрим небольшой пример программы-игры, в которой я прошу игрока угадать слово.
Пример 6.5 Охота на слово (файл primer6_6.php)
<?php
$real_word = "bike";
if ($_GET['word'] = = "")
{
print "Введите слово";
}
elseif ($_GET['word'] = = $real_word)
{
print "Вы победили";
}
else
{
print "Пробуйте еще";
}
?>
<html>
<head>
<title> Охота на слово</title>
</head>
<body>
<form method = "GET">
Я думаю, что загаданное слово: <input type="text" name="word">
<input type="submit" value="Ответ готов" name="go">
</form>
</body>
</html>
С начала у нас идет блок PHP команд, в котором мы через переменную $real_word задаем слово, которое необходимо угадать. У нас также инициализирована переменная $word, в ней хранится значение, которое вводит пользователь. Мы постоянно проверяем, идентичны ли значения этих двух переменных, в случае успеха поздравляем пользователя с победой, если нет, просим попробовать еще раз, а если пользователь забыл ввести слово, просим его выполнить эту несложную операцию. В HTML-блоке мы просто создаем форму в которой пользователь пробует угадать наше слово. Эта форма будет выводиться постоянно до прекращения работы программы, данные, вводимые в нее, будут при этом постоянно обновляться.
Обратите внимание на то, что у нас отсутствует атрибут ACTION дескриптора FORM. Это связано с тем, что у нас обработчик формы и сама форма располагаются в одном файле.
Перенаправление пользователя
Для простоты объяснения, под пользователем будем понимать человека, зашедшего на вашу Web-станицу, а под перенаправлением обыкновенную загрузку другого документа в браузере, без участия в этом процессе самого пользователя.
Программа из предыдущего примера имеет один существенный недостаток: форма полностью выводится на экран, независимо от того, угадал пользователь слово или нет. Из-за того, что страница в основном сделана в статичном варианте, избежать этого довольно трудно. Однако в случае успеха мы можем перенаправить пользователя на другую страницу, где он увидит текст поздравления.
Когда программа на сервере общается с клиентом, она должна сначала послать некоторые заголовки, содержащие информацию о том документе, который за ними следует. Вы можете послать свой собственный заголовок с помощью функции header();
Послав браузеру заголовок “Location”, вы перенаправите пользователя на новую страницу.
Немного модифицируем пример 6.5.
Пример 6.6 Перенаправление пользователя с помощью заголовка “Location”
<?php
$real_word = "bike";
if ($_GET['word'] = = "")
{
print "Введите слово";
}
elseif ($_GET['word']= = $real_word)
{
header("Location: winner.html");
}
else
{
print "Пробуйте еще";
}
?>
<html>
<head>
<title> Охота на слово</title>
</head>
<body>
<form method = "GET">
Я думаю, что загаданное слово: <input type="text" name="word">
</form>
</body>
</html>
Изменения довольно легко заметить, в случае, когда пользователь угадывает слово, программа перенаправляет его на страницу winner.html (не забудьте, что данная страница должна существовать). Поскольку мы указали после имени заголовка (Location:) только имя файла, а путь к нему опустили, то этот файл должен находиться в том же каталоге на сервере, что и HTML–документы.
Задание для самопроверки
Напишите “программу-калькулятор”, которая должна передать два числа, операцию, выполняемую над ними, и выдать результат на экран.
П.7.Работа с файлами
Включение файлов в документ
Хранение данных в переменных и массивах является временным; все эти данные теряются при завершении работы программы. Для постоянного хранения больших объемов данных используются файлы. Использование файлов очень удобно. Допустим, вы хотите узнать, подбирал ли кто-нибудь пароль к вашему ресурсу. Для этого достаточно создать файл, в который будут писаться все попытки неудачного ввода пароля пользователями, и проанализировать его (см. пример 7.8).
Для того, чтобы включить файл PHP-документ достаточно воспользоваться директивой include(). После этого текст PHP-программы во включаемом файле будет исполняться точно так же, как если бы он был записан во включающем файле непосредственно. Это удобно, когда вы хотите использовать одну и ту же программу в различных документах.
Функция include() требует одного аргумента – пути к файлу, который необходимо включить в документ.
Пример 7.1 Включение файлов в документ (файл primer7_1.php)
<html>
<head>
<title>Включение файлов в документ</title>
</head>
<body>
<?php
include("primer7_2.php");
?>
</body>
</html>