В учебнике на сайте ibm.com "Изучаем PHP: Часть 1. Страница регистрации, формы и взаимодействие с базой данных" все рассматривается на примере создания реального приложения.
В этом конспекте: базовый синтаксис PHP, формы в HTML, массивы, ассоциативный массив $_GET (или $_POST) и циклы.
Базовый синтаксис
Признак переменной - знак доллара $
<html> <title>Workflow Registration</title> <body> <p>You entered:</p> <?php $password = "mypassword"; echo "<p>Password = " . $password . "</p>"; ?> </body> </html>
Определение и использование константы:
<?php
define("PAGE_TITLE", "Workflow Registration");
?>
<html>
<title><?php echo PAGE_TITLE ?></title>
<body> ...
В отличие от переменных константы записываются без знака доллара. Имя константы может быть любым, но, согласно принятым правилам, имена констант состоят из прописных букв.
Упрощенный вывод: когда вывести нужно один элемент, есть более постой способ - оператор вывода <?= ?>:
<title><?= PAGE_TITLE ?></title>
Создание формы в HTML
Начнем с создания страницы регистрации для приложения. Для начала просто создадим форму для ввода в файле registration.php:
<html>
<head><title>Workflow System</title></head>
<body>
<h1>Register for an Account:</h1>
<form action="registration_action.php" method="GET">
Username: <input type="text" name="name" /><br />
Email: <input type="text" name="email" /><br />
Password: <input type="password" name="pword" /><br />
<input type="submit" value="GO" />
</form>
</body>
</html>
Поместите этот файл в корневую папку и откройте браузер с адресом //localhost/registration.php.
Обратите внимание на URL в поле адреса браузера.
//localhost/registration_action.php?name=roadnick&email=
ibmquestions%40nicholaschase.com&pword=supersecretpassword
Поскольку в качестве метода используется GET, данные из формы передаются в строке URL. Каждому элементу формы в URL соответствует пара имя-значение, и эти пары разделены амперсандами.
Получение данных из формы на PHP-странице
<?php $username = $_GET['name']; $password = $_GET['pword']; ?>
Массивы
$formnames = array("name", "email", "pword");
echo "0=".$formnames[0]."<br />";
...
Функция array() возвращает переменную, которая является массивом. Первое значение в массиве имеет индекс 0.
Переменная $_GET является именем ассоциативного массива, к элементам которого обращаются не по индексам, а по ключам. Когда вы отсылаете форму, вы создаете ассоциативный массив (имена переменных играют роль ключей - $_GET["name"]):
$_GET = array("name" => "roadnick",
"email" => "ibmquestions@nicholaschase.com",
"pword" => "supersecretpassword");
Структура ассоциативного массива не всегда известна, например, если ассоциативный массив был получен в результате выполнения запроса к базе данных.
Функции array_keys() и array_values() возвращают простые массивы, к элементам которых можно обращаться при помощи числовых индексов:
$form_names = array_keys($_GET); $form_values = array_values($_GET);
Цикл for
Здесь используется функция sizeof() , которая возвращает число элементов массива:
for ($i = 0; $i < sizeof($_GET); $i++) {
echo "<p>".$form_names[$i]." = " . $form_values[$i] . "</p>";
}
Цикл foreach
Значения из массива $_GET в цикле приписываются переменной $value. Цикл работает до тех пор, пока в массиве $_GET еще остаются необработанные элементы.
Доступ к данным массива напрямую без ключей:
foreach ($_GET as $value) {
echo "<p>" . $value . "</p>";
}
Извлечение значений и ключей:
foreach ($_GET as $key=>$value) {
echo "<p>".$key." = " . $value . "</p>";
}
Повторяющиеся значения в формах
Иногда в форме должно быть введено несколько значений для переменной с одним и тем же именем. Например, поле пароля и поле повтора пароля.
Username: <input type="text" name="name" /><br /> Email: <input type="text" name="email" /><br /> Password: <input type="password" name="pword[]" /><br /> Password (again): <input type="password" name="pword[]" /><br /> <input type="submit" value="GO" />
Поскольку поле pword должно содержать несколько значений, оно стало массивом. Таким образом, массив передаваемых данных для этой формы будет содержать в качестве одного из своих элементов другой массив. Когда вы нажмете кнопку отправки формы, в поле адреса вы увидите примерно следующее:
//localhost/registration_action.php?
name=roadnick&email=ibmquestions%40nicholaschase.com&
pword[]=supersecretpassword&pword[]=supersecretpassword
Это значит, что были созданы массивы
$passwords = array("supersecretpassword", "supersecretpassword");
$_GET = array("name"=>"roadnick",
"email"=>"ibmquestions@nicholaschase.com",
"pword"=>$passwords);
И получать их значения нужно так:
foreach ($_GET as $key=>$value) {
echo "<p>".$key." = " . $value . "</p>";
}
$passwords = $_GET["pword"];
echo "First password = ".$passwords[0];
echo "<br />";
echo "Second password = ".$passwords[1];
Там, где раньше отображался пароль, появится слово Array, а элементы самого массива нужно извлекать отдельно.
Методы GET и POST
При использовании метода GET данные передаются открыто в URL-адресе, т.е. данные доступны для просмотра. Это небезопасно, т.к. эти данные могут быть перехвачены. Кроме того, в URL-адресе можно передавать ограниченное по объему количество данных.
Поэтому в большинстве случаев имеет смысл использовать метод POST, который передает данные в теле запроса, а не в заголовке, как метод GET. Для этого в HTML-форме вместо $_GET нужно писать $_POST.
Проверка ошибки при повторном вводе пароля
Используем условный оператор if-then ( проверка равенства - это двойной знак равенства, т.е. ==):
$passwords = $_POST["pword"];
echo "First password = ".$passwords[0];
echo "<br />";
echo "Second password = ".$passwords[1];
if ($passwords[0] == $passwords[1]) {
echo "<p>Пароли совпали.</p>";
} else {
echo "<p>Пароли не совпали. Введите пароль еще раз. </p>";
}
Для формирования более сложных логических выражений можно применять логические операторы, например, оператор И (&&) и оператор ИЛИ (||). Например:
if (($today == "Monday") && ($status == "Not a holiday")) {
echo "GO TO WORK!!!";
}