В
В этом конспекте: базовый синтаксис 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>
Поместите этот файл в корневую папку и откройте браузер с адресом http://localhost/registration.php.
Обратите внимание на URL в поле адреса браузера.
http://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 должно содержать несколько значений, оно стало массивом. Таким образом, массив передаваемых данных для этой формы будет содержать в качестве одного из своих элементов другой массив. Когда вы нажмете кнопку отправки формы, в поле адреса вы увидите примерно следующее:
http://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!!!"; }
Продолжение -