Учебник PHP - Оглавление....3x

advertisement

Введение
Краткое введение, и чему можно здесь научиться.

Урок 1: Что такое PHP
Кратко о том, как PHP работает, почему PHP называется серверной технологией и что
вы будете изучать в следующих уроках.

Урок 2: Серверы
Рассмотрим опции запуска PHP на вашем компьютере или на вэб-хосте.

Урок 3: Ваша первая РНР-страница
В этом уроке вы создадите вашу первую простейшую PHP-страницу. Здесь также вы
сможете проверить, правильно ли настроен ваш сервер для работы PHP.

Урок 4: Работа с датой и временем
Функции, используемые для работы с временем и датами.

Урок 5: Циклы
Циклы могут повторять часть кода скрипта. В этом уроке мы рассмотрим циклы, такие
как while и for.

Урок 6: Условия
Условия используются для управления выполнением PHP-скрипта. Мы изучим if ...
elseif ... else... и switch ... case.

Урок 7: Комментарии в скрипте
Комментарии делают работу РНР-скрипта более прозрачной и понятной. Комментарии
могут помочь, если вам или кому-либо ещё в дальнейшем понадобится внести
изменения в код.

Урок 8: Массивы
В этом уроке вы узнаете, что такое "массив", как он используется и каковы его
возможности.

Урок 9: Функции
В предыдущих уроках вы узнали, как использовать различные встроенные функции.
Теперь мы научимся создавать наши собственные функции.

Урок 10: Передача данных через URL
Учимся передавать переменные и значения из одной страницы в другую с
использованием HTTP-строки запроса.

Урок 11: Передача переменных через формы
Интерактивные вэб-сайты требуют от пользователей ввода данных. Один из обычных
способов принятия ввода - формы.

Урок 12: Сессии
Сессии можно использовать для хранения и извлечения информации в течение визита
пользователя на сайт.

Урок 13: Куки
Куки можно использовать для хранения и извлечения информации о пользователе от
визита к визиту.

Урок 14: Файловая система
С помощью функций файловой системы вы можете получать доступ к файловой
системе сервера. Это позволяет работать с файлами, папками и дисками с помощью
PHP-скриптов.

Урок 15: Чтение из текстового файла
В этом уроке вы будете использовать файловую систему для чтения из текстового
файла. Текстовые файлы могут очень пригодиться для хранения различных данных.

Урок 16: Запись в текстовый файл
Здесь поговорим о том, как записать в текстовый файл с использованием filesystem.
Текстовые файлы могут очень пригодиться для хранения различных данных.

Урок 17: Базы данных
В это учебнике мы используем БД MySQL. MySQL - удобное место, чтобы начать
изучение использования БД в PHP.

Урок 18: Создание баз данных и таблиц
В этом уроке мы рассмотрим два способа создания БД и таблиц. Первый - как это
сделать в PHP, второй - с использованием более удобной утилиты : PhpMyAdmin.

Урок 19: Вставка данных в базу данных
Как использовать SQL-операторы для вставки данных в БД. Мы рассмотрим также
типы данных и наиболее распространённые ошибки начинающих.

Урок 20: Получение данных из БД
Использование SQL-запроса для получения данных из таблицы.

Урок 21: Удаление данных из базы данных
Как удалить записи из БД с помощью SQL.

Урок 22: Обновление данных в базе данных
В этом последнем уроке мы научимся обновлять данные с помощью SQL-оператора.







Введение
PHP позволяет добавлять продвинутые технологии на ваш сайт.
Задача данного учебника - в лёгкой и доступной форме дать вам понятие о PHP.
Изучение начинается с нуля, но необходимо, чтобы вы уже хорошо разбирались в
HTML. Если это не так, вам нужно начать с нашего учебника HTML.
PHP можно использовать в различных контекстах - на форумах, поллах, в магазинах,
SMS-шлюзах, списках рассылки и т. п. Единственное ограничение в работе PHP - ваше
воображение. Изучить PHP нетрудно, но помните, что PHP сложнее и труднее для
изучения, нежели HTML. Соответственно, будьте терпеливы.
В этом учебнике невозможно рассмотреть всё. Поэтому от вас потребуется некоторая
настойчивость и желание экспериментировать. Если понадобится помощь, мы
рекомендуем обращаться на форумы. Здесь вы встретите настоящих экспертов,
которые могут помочь в работе, что-то подсказать, посоветовать.
Что понадобится?

Предполагается, что у вас уже имеется текстовый редактор и вы умеете им
пользоваться.
Далее, вам нужен доступ к компьютеру или серверу, на котором можно запускать PHP.
В отличие от HTML и CSS, PHP зависит не от того, каким браузером пользуется
посетитель вашего сайта, а от типа сервера, на котором размещены ваши страницы.
Именно поэтому PHP является серверной/server-side технологией.
В ближайших уроках мы узнаем, как работает PHP и как настроить ваш компьютер для
работы с PHP. Затем вы изучите специфические функции и методы.
Освоив этот учебник, вы сможете создавать РНР-код и получите доступ к
безграничным возможностям добавление интерактивных функций на ваши вэбстраницы.
Успехов!

Урок 1: Что такое PHP








Первые вопросы, возникающие при изучении РНР: Что такое PHP и как это работает?
Именно этими вопросами мы и займёмся в данном уроке. Очень важно разобраться с
этими вопросами, прежде чем начинать создавать собственные РНР-страницы.
Понимание этого значительно ускорит изучение.
Итак, начнём!
Что такое PHP?
PHP это первоначально аббревиатура для Personal Home Pages (Личные Домашние
Страницы), но в настоящее время это рекурсивный акроним
для PHP: Hypertext Preprocessor (Гипертекстовый Препроцессор).






PHP был разработан датским гренландцем Rasmus Lerdorf, а затем дорабатывался как
открытый код. PHP это не вэб-стандарт, а технология с открытым кодом. PHP это и не
язык программирования, и не вэб-стандарт, но он позволяет использовать т. н.
скриптинг в ваших документах.
При описании РНР-страницы вы может сказать, что это файл с расширением .php,
содержащий комбинацию HTML-тэгов и скриптов, запускаемых для выполнения на
вэб-сервере.
Как работает PHP?
Лучший способ объяснить, как работает PHP - сравнить его со стандартным HTML.
Предположим, вы печатаете адрес HTML-документа
(например, http://www.mysite.com/page.htm) в адресной строке браузера. При этом
вы запрашиваете HTML-страницу. Вот пример:
Вы видите, что сервер просто высылает HTML-файл клиенту. Но если вы
напечатаете http://www.mysite.com/page.php - то есть запроситеPHP-страницу сервер начинает работать:






Сервер сначала читает PHP-файл и смотрит, нет ли задач, которые необходимо
выполнить. Только после выполнения серверной работы результат отсылается
клиенту. Важно понимать, что клиент видит только результат работы сервера, а не
реальные инструкции.
Это означает, что, если вы нажимаете в браузере "view source/просмотреть исходный
код" PHP-страницы, вы увидите не PHP-коды, а лишь тэги HTML. То есть вы не
сможете с помощью "view source" увидеть, как создаётся PHP-страница. Необходимо
изучать РНР другими способами, например, читая данный учебник.
Вы этой книге вы научитесь создавать команды для сервера!
Итак, первое, что нужно ... это сервер! Но не волнуйтесь - вам не нужно покупать
новый компьютер. Просто установите определённое программное обеспечение,
которое заставит его работать в качестве сервера. Кроме того, понадобится вэб-сайт
на сервере-хосте, поддерживающий работу с PHP. Ну и, наконец, вы должны быть
онлайн, когда кодируете.
Следующий урок посвящён тому, как сделать из вашего компьютера сервер.
Урок 2: Серверы
PHP это серверная/server-side технология. Следовательно, для работы РНР вам нужен
сервер. Но вам для этого не придётся дополнительно раскошеливаться.
Поскольку вам нужно выбрать лишь один вариант из нескольких, этот урок мы разделили на
три части. Сначала даётся обзор разных опций (просто выберите одну, подходящую). Если
сервер уже имеется и работает, см. Урок 3 - создание вашей первой РНР-страницы.
Вариант 1: Вб-сайт на сервере-хосте
Вы можете иметь сайт на сервере-хосте, поддерживающем РНР.


Проверьте, поддерживает ли ваш хост-сервер работу с РНР.
Если у вас ещё нет вэб-сайта на сервере-хосте, можете создать бесплатную учётную
запись на 000webhost.com, который поддерживает PHP.
Вариант 2: Установить PHP на ваш компьютер
Не так-то просто установить РНР на ваш комп. Этот вариант рекомендуется только для
опытных пользователей, но можно выбрать и его. Вот ссылки для загрузки и установки:



Windows Installation Guide
Mac Installation Guide
Linux Installation Guide
Вариант 3: XAMPP
XAMPP это программа упрощает для нас, простых смертных, работу с РНР прямо на нашем
компе без необходимости устанавки.

Как установить XAMPP
Урок 3: Ваша первая РНР-страница
На уроках 1 и 2 вы уже немного познакомились с PHP и настроили сервер (или получили к
нему доступ). Теперь мы готовы к созданию первой РНР-страницы. Это будет легко и просто,
но после этого урока вы уже будете знать о РНР намного больше.
Как правило PHP-файл представляет собой текстовый файл с расширением .php, состоящий
из:



Текста
HTML-тэгов
PHP-скриптов
Вы уже знакомы с текстом и HTML-тэгами. Теперь остановимся на РНР-скриптах.
PHP-скрипты
PHP Documentation Group выпустила подробную документацию
. По всему данному
учебнику даётся множество ссылок на эту документацию. Цель - чтобы вы привыкли искать
ответы на ваши вопросы. PHP настолько обширен, что его невозможно охватить в этом
учебнике. Но PHP достаточно прост! Более того, язык PHP часто весьма похож на обычный
английский.
Давайте начнём конструирование вашей первой РНР-страницы.
Пример: Hello World!
Начнём создание обычного HTML-документа, но назовём файл page.php и поместим его в
корневую директорию сайта. Если вы используете XAMPP (см. Урок 2), путь к файлу на вашем
компьютере (который теперь является сервером) будет "c:\xampp\htdocs\page.php".
HTML-код должен выглядеть примерно так:
<html>
<head>
<title>Моя первая PHP-страница</title>
</head>
<body>
</body>
</html>
Как вы помните, вероятно, из первого урока, PHP даёт команды серверу. Так что давайте
напишем команду серверу.
Сначала мы должны указать серверу, где код PHP начинается и заканчивается. В PHP
тэги <?php и ?> используются для обозначения начала и конца блоков РНР-кода, которые
сервер должен исполнять (на большинстве серверов достаточно использовать <? в качестве
стартового тэга, но <?php будет более корректно при первом использовании PHP.)
Попробуем теперь добавить такой блок кода в ваш HTML-код:
<html>
<head>
<title>Моя первая PHP-страница</title>
</head>
<body>
<?php
echo "<h1>Hello World!</h1>";
?>
</body>
</html>
Если просмотреть этот PHP-документ в браузере, то он будет выглядеть примерно так:
Но интересно будет просмотреть HTML-код в браузере (выбрав "view source"):
PHP-коды исчезли! Из первого урока, вы помните, что только сервер может видеть PHP-коды клиент (программа-браузер) видит только результат!
Посмотрим, что происходит. Мы просим сервер написать <h1> Hello World!</h1>. Говоря
более техническим языком, мы используем строковую функцию
echo для написания
клиенту специализированной строки, где точка с запятой обозначают конец команды. Но не
волнуйтесь! В этом учебнике мы постараемся использовать техническую терминологию поминимуму.
Наш первый пример, очевидно не особо впечатляющ. Но не спешите! Теперь будет всё
интереснее. Рассмотрим другой пример.
Пример: Now!
Заставим сервер написать что-нибудь ещё. Мы можем, например, попросить его вывести
текущие дату и время:
<html>
<head>
<title>Моя первая PHP-страница</title>
</head>
<body>
<?php
echo date("r");
?>
</body>
</html>
В браузере мы увидим:
Соответствующий HTML-код:
Стало уже немного интереснее, не правда ли?
Сервер отображает дату и время при отображении РНР-страницы. Заметьте, что при
обновлении страницы в браузере, отобразится новое время. Сервер выводит текущие дату и
время всякий раз при отправке страницы клиенту.
Отметим также, что HTML-содержит только дату и время, но не РНР-коды. Следовательно,
этот пример не зависит от того, какой браузер используется. В реальности вся
функциональность выполняется серверными технологиями и всегда работает во всех
браузерах!
И вновь отметим точку с запятой в конце строки кода. Этот разделитель очень важен - при его
отсутствии скрипт работать не будет.
В этом примере мы использовали
время сервера.
date, функцию, которая возвращает текущие дату и
Попробуем расширить пример, записав строку/string и функцию/function, разделив их
символом "." (точка) - примерно так:
<html>
<head>
<title>Мой первый PHP-документ</title>
</head>
<body>
<?php
echo "<p>Текущие дата и время: " . date("r") . "</p>";
?>
</body>
</html>
В браузере это выглядит так:
А вот соответствующих код HTML:
В следующем уроке мы поближе познакомимся с функцией
представления даты и времени.
date и различными форматами
Урок 4: Работа с датой и временем
В этом уроке мы попытаемся рассмотреть различные опции работы с датой и временем в
PHP. На предыдущем занятии мы видели очень простые примеры того, что собой
представляет РНР. В этом уроке мы более внимательно рассмотрим функцию
date.
Функции даты и времени
В PHP имеется ряд функций для работы с датами и временем. В этом уроке разберём
наиболее важную из этих функций:
date.
Принимая различные параметры, функция
date может возвращать дату/время в различных
форматах. Вот наиболее часто используемые параметры:
date("y")
Возвращает текущий год даты - на сегодня возвращает: 12
date("m")
Возвращает текущий месяц даты - на сегодня возвращает: 01
date("F")
Возвращает текущий месяц даты - на сегодня возвращает: January
date("d")
Возвращает текущее число месяца даты - на сегодня возвращает: 30
date("l")
Возвращает название для недели даты - на сегодня возвращает: Monday
date("w")
Возвращает текущий день недели даты - на сегодня возвращает: 1
date("H")
Возвращает текущий час - в данное время возвращает: 17
date("i")
Возвращает текущую минуту - в данное время возвращает: 45
date("s")
Возвращает текущую секунду - в данное время возвращает: 48
Следующий пример иллюстрирует использование функции
date:
<html>
<head>
<title>Время и дата</title>
</head>
<body>
<?php
echo "<p>Сегодня " . date("l") . "</p>";
?>
</body>
</html>
Отображение примера
Текущее время: 1327941948
Теперь держитесь крепче... немного притормозим! Функция
time() возвращает текущее
время в виде количества секунд, прошедших после 1 января 1970 года, 12:00 PM, GMT.
<html>
<head>
<title>Время и
</head>
<body>
дата</title>
<?php
echo "<p>Сейчас ровно " . time() . " секунд после January 1, 1970,
12:00 PM, GMT </ p> ";
?>
</body>
</html>
Отображение примера
Отображение в виде количества секунд после January 1, 1970, 12:00 PM GMT называется
"timestamp/штамп времени" (UNIX timestamp), который весьма употребителен при работе с
датой/временем будущего или прошлого.
По умолчанию функция
date использует текущий timestamp (т. е. текущее значение
time()). но с помощью дополнительного параметра вы можете специфицировать другой штамп
времени и таким образом работать с прошлым или будущим. В следующем примере мы
установим timestamp на 0 секунд после January 1, 1970 12:00 PM, GMT. Тогда можно узнать,
каким днём недели было 1 января 1970 года.
<html>
<head>
<title>Время и дата</title>
</head>
<body>
<?php
echo "<p>1 января 1970 года - " . date("l",0) . "</p>";
?>
</body>
</html>
Отображение примера
Если вы не гений-математик, вам будет нелегко быстро перевести количество секунд после
January 1, 1970 в в конкретное время прошлого или будущего. Но здесь вам поможет ещё
одна функция:
mktime, выполняющая вычисления за вас.
Синтаксис функции
mktime таков (hour, minute, second, month, day, year). Следующий
пример - конвертация первой фазы луны (July 21, 1969, 02:56):
<html>
<head>
<title>время и дата</title>
</head>
<body>
<?php
echo mktime (2,56,0,7,21,1969);
?>
</body>
</html>
Отображение примера
Заметьте, что возвращается отрицательное число, поскольку это дата ранее January 1, 1970.
Теперь можно объединить это с функцией
недели.
date и определить, какой тогда был день
<html>
<head>
<title>Время и дата</title>
</head>
<body>
<?php
echo date("l", mktime(2,56,0,7,21,1969));
?>
</body>
</html>
Отображение примера
Для чего это можно использовать?
Всё это пока что может показаться несколько отвлечённым. Кроме того, для чего ещё модно в
этой жизни использовать функцию вроде
time()? И что ещё важнее: когда наконец вы
узнаете что-то реально необходимое для ваших вэб-страниц?
Ответ: всё, что вы здесь изучаете - строительные блоки, и единственное, что может
ограничивать вас, это ваше собственное творческое воображение! Рискну утверждать, что вы
уже знаете больше, чем предполагаете. Например, вы в курсе, что можете сделать сайт с
различными фоновыми изображениями для каждого дня недели и что это будет работать в
любом браузере?
Это действительно правда! Посмотрите на пример:
<html>
<head>
<title>Время и дата</title>
</head>
<body background="background_<?php echo date("w"); ?>.png">
</body>
</html>
Отображение примера
Этот пример, с динамическим фоновым изображением, требует наличия семи изображений,
именованных background_1.png, background_2.png, background_3.png, etc.
Если пользователь входит на ваш сайт во вторник, фоновым будет изображение
background_2.png, на следующий день - background_3.png. Легко и просто!
На следующем уроке вы узнаете о о новых строительных блоках, которые можно
использовать для создания циклов и повторов вашего кода.
PHP увлекателен, вы не находите?
Урок 5: Циклы
В PHP имеется возможность управлять выполнением скриптов с помощью различных
управляющих структур. В этом уроке мы рассмотри циклы. Циклы могут использоваться для
повторения частей скриптов указанное число раз или до выполнения определённого условия.
Циклы "while"
Синтаксис цикла
while таков:
while (условие) {
Оператор
}
Этот синтаксис можно перевести непосредственно на нормальный язык: while/пока условие
соблюдается, делать что-то.
Рассмотрим простой пример:
<html>
<head>
<title>Циклы</title>
</head>
<body>
<?php
$x = 1;
while ($x <= 50) {
echo "<p>Этот текст повторяется 50 раз</p>";
$x = $x + 1;
}
?>
</body>
</html>
Отображение примера
В этом примере используется переменная/variable "$x". Как вы могли заметить, имена
переменных в РНР всегда начинаются с символа "$". Поначалу это легко забыть, но это
абсолютно необходимо запомнить, иначе скрипт не будет работать.
Помимо прочего, пример почти всегда говорит сам за себя. Сначала переменная $x получает
значение 1. Затем цикл запрашивает у сервера повторение текста, пока $x не станет меньше
или равна 50. При каждом проходе цикла значение переменной $x уменьшается на 1.
Циклы "for"
Другой способ создания цикла - с использованием
for (Инициализация; Условие; Шаг) {
Оператор
}
for:
Оператор повторяется, пока 'Инициализация' + 'Шаг' удовлетворяют 'Условию'. Если это
непонятно, взгляните на пример:
<html>
<head>
<title>Циклы</title>
</head>
<body>
<?php
for ($x=0; $x<=50; $x=$x+5) {
echo "<p>variable $x теперь = " . $x . "</p>";
}
?>
</body>
</html>
Отображение примера
В вышеприведённом примере $x увеличивается на 5 при каждом проходе цикла. Цикл
продолжается, пока $x меньше или равна 50. Обратите также внимание, как значение $x
используется в качестве части этого выражения.
Вот другой пример:
<html>
<head>
<title>Циклы</title>
</head>
<body>
<?php
for ($ x=1; $x<=6; $x=$x+1) {
echo "<h" . $x . ">Уровень заголовка " . $x . "</h" . $x . ">";
}
?>
</body>
</html>
Отображение примера
Всё ли понятно? Сначала мы устанавливаем $x равной 1. Затем при каждом проходе цикла
мы поднимаем уровень заголовка на $x (h1, h2, h3, etc.), пока $x не будет равна 6.
Вложенные циклы
В принципе нет никаких ограничений на использование циклов. Например, вы можете
размещать циклы внутри других циклов и создавать таким образом много повторений.
Но будьте осторожны! PHP работает медленнее со сложными и большими скриптами.
Например, в следующем примере с тремя циклами мы можем записать более 16 миллионов
цветов!
Чтобы не замедлять работу страницы, мы должны значительно урезать это число, сделав шаг
равным 30 и ограничив количество цветов числом 512.
<html>
<head>
<title>Циклы</title>
</head>
<body>
<?php
for ($intRed=0; $intRed<=255; $intRed=$intRed+30) {
for ($intGreen=0; $intGreen<=255; $intGreen=$intGreen+30) {
for ($intBlue=0; $intBlue<=255; $intBlue=$intBlue+30) {
$StrColor = "rgb(" . $IntRed . "," . $IntGreen . "," .
$IntBlue . ")";
echo "<span style='color:" . $StrColor . "'>" . $ StrColor .
"</span>";
}
}
}
?>
</body>
</html>
Отображение примера
В этом примере каждый из трёх основных цветов может (red, green и blue) может иметь
значение от 0 до 255. Любое сочетание этих трёх цветов создаёт цвет в форме
rgb(255,255,255). Этот код цвета используется как color в тэге <span>.
Циклы станут более применимыми, если вы научитесь ещё кое чему. Если вы в принципе
поняли, что такое циклы, можете перейти к следующему уроку, где мы разберёмся с
условием.
Урок 6: Условия
Условия используются для выполнения части скрипта, только если некоторые
предопределённые требования (условия/conditions) выполняются. Например, условие может
требовать, чтобы дата была после January 1, 2012, или чтобы переменная была больше 7.
If...
Первый тип условия, который мы рассмотрим, называется
if, и оно имеет такой синтаксис:
if (условие) {
оператор
}
Этот синтаксис, опять-таки близок нормальному языку: If\если условие соответствует, то
выполняется ещё что-то. Рассмотрим простой пример:
<html>
<head>
<title>Циклы</title>
</head>
<body>
<?php
$x = 2;
if ($x > 1) {
echo "<p>переменная $x больше 1</p>";
}
?>
</body>
</html>
if ... else ...
Следующий тип условия, который мы рассмотрим, называется
представлен в следующей форме:
else , который может быть
if (условие) {
оператор
}
else {
оператор
}
Синтаксис: if\если условие соответствует, выполняется что-то,
либо else\иначе выполняется ещё что-то.
В уроке 4 вы узнали, как определить число/день месяца. В следующем примере мы
используем номер месяца в условии
if
else для определения времени года:
<html>
<head>
<title>Условия</title>
</head>
<body>
<?php
if (date ("m") == 3) {
echo "<p>Сейчас весна!</p> ";
}
else {
echo "<p>Я не знаю, какое сейчас время года!</p> ";
}
?>
</body>
</html>
Отображение примера
Как видите, это условие работает не особо тонко - оно выполняется, только если сейчас март!
Однако есть масса способов усложнить условие и сделать его работу более точной. Ниже
перечислены операции сравнения, которые можно использовать в нашем операторе:
== равно
< меньше, чем
> больше, чем
<= меньше или равно
>= больше или равно
!= не равно
Кроме того существуют логические операции:
&& И
|| ИЛИ
! НЕ
Эти операции можно использовать для создания более сложных условий, так что мы теперь
можем расширить предыдущий пример и включить в него все весенние месяцы:
<html>
<head>
<title>Условия</title>
</head>
<body>
<?php
if (date("m") >= 3 && date("m") <= 5) {
echo "<p> Сейчас весна!</p> ";
}
else {
echo "<p> Сейчас, зима, лето или осень!</p> ";
}
?>
</body>
</html>
Рассмотрим расширенное условие подробнее:
date("m") >= 3 && date("m") <= 5
Его можно расшифровать так:
Если месяц больше или равен 3 и меньше или равен 5
Неплохо, а? Операции играют важную роль в PHP.
Но это работает только с мартом, апрелем и маем. Все другие месяцы не охватываются этим
условием. Так что попытаемся усложнить условие ещё немного.
if ... elseif ... else...
Используя
elseif, мы можем расширить условие, и оно будет работать для всех месяцев:
<html>
<head>
<title>Условия</title>
</head>
<body>
<?php
if (date("m") >= 3 && date("m") <= 5) {
echo "<p>Сейчас весна!</p>";
}
elseif (date("m") >= 6 && date("m") <= 8) {
echo "<p>Сейчас лето!</p>";
}
elseif (date("m") >= 9 && date("m") <= 11) {
echo "<p>Сейчас осень!</p>";
}
else {
echo "<p>Сейчас зима!</p>";
}
?>
</body>
</html>
Отображение примера
Написание условий требует методичности и логического подхода. Предыдущий пример
достаточно прямолинеен, но условия могут быть весьма сложными.
switch ... case
Другой способ написания условий - использование метода
switch:
switch (выражение) {
case 1:
оператор
break;
case 2:
оператор
break;
default:
оператор
break;
}
Этот метод основан на выражении и перечисляет различные "ответы" или "значения" с
соответствующими операторами. Проще всего объяснить работу этого метода на примере.
Как вы помните из урока 4, функция
date("w") возвращает текущий день недели. Можно
использовать это в нашем примере, где выводится названия дня (вместо цифры):
<html>
<head>
<title>Условия</title>
</head>
<body>
<?php
switch(date("w")) {
case 1:
echo "Сегодня
break;
case 2:
echo "Сегодня
break;
case 3:
echo "Сегодня
break;
case 4:
echo "Сегодня
break;
case 5:
echo "Сегодня
break;
понедельник";
вторник";
среда";
четверг";
пятница";
case 6:
echo "Сегодня суббота";
break;
default:
echo "Сегодня воскресенье";
break;
}
?>
</body>
</html>
Отображение примера
Часто
switch может быть альтернативой условиям
if
else. Что использовать в
конкретной ситуации - зависит от того, какой метод представляется вам наиболее простым и
логичным. Сделать ваши логичными и понятными - вот ваша задача.
В следующем уроке мы рассмотрим, как добавлять комментарии в скрипты для пояснения их
работы. Хорошие комментарии могут понадобиться если вы или кто-то ещё захочет в
будущем внести изменения в код.
Урок 7: Комментарии в скриптах
Как вы могли заметить, PHP-скрипты могут выглядеть непонятно. В этом уроке мы выясним,
почему комментарии так важны, и как вставить их в ваши скрипты.
Почему комментарии так важны для ваших
скриптов?
Когда вы кодируете, вы пишете команды серверу/компьютеру и должны использовать весьма
формальный язык, который может не вполне понятно отражать ход ваших мыслей при
написании скрипта.
Следовательно, другим людям (или вам самим) может быть трудно понять структуру скрипта,
и, соответственно, трудно идентифицировать и корректировать ошибки.
С помощью комментариев можно вставлять в скрипт краткий пояснительный текст. Сервер
полностью игнорирует комментарии, и они не влияют на функциональность самогó скрипта.
В бизнес-среде часто предъявляется требование, чтобы скрипты и программы
комментировались, иначе существует риск, что компания примет систему, в которой слишком
сложно будет находить и устранять ошибки.
Как вставлять комментарии?
Это весьма просто. Комментарий начинается двойным слэшем: "//".
См. этот пример из урока 5, теперь с комментариями:
<html>
<head>
<title>Циклы</title>
</head>
<body>
<?php
// Здесь записываем коды цвета с использованием трёх циклов
// Red может быть в диапазоне от 0 до 255
for ($intRed=0; $intRed<=255; $intRed=$intRed+30) {
// Green может быть в диапазоне от 0 до 255
for ($intGreen=0; $ intGreen<=255; $intGreen=$intGreen+30) {
// Blue может быть в диапазоне от 0 до 255
for ($ intBlue=0; $intBlue<=255; $intBlue=$intBlue+30) {
// Код цвета образуется в форме rgb(red,green,blue)
$strColor = "rgb(" . $intRed . "," . $intGreen . "," .
$intBlue . ")"
// Теперь записываем код цвета для клиента
echo "<span style='color:" . $strColor . "'> " . $strColor .
" </span>";
// Закрываем циклы
}
}
}
?>
Для примера мы вставили несколько комментариев, поэтому понятно, что отлаживать такой
скрипт намного проще при наличии комментариев, нежели без них.
Так что не забывайте комментировать ваши скрипты!
Урок 8: Массивы
В этом уроке познакомимся с массивами, узнаем, как их использовать и что они могут.
Понимание массивов может сначала вызвать затруднения. Но всё-таки попытаемся...
попытаемся максимально облегчить это.
Что такое массив?
Массив это набор индексированных элементов, каждый их которых имеет свой уникальный
идентификационный номер.
Звучит непонятно? На самом деле всё не так уж сложно.
Представьте себе список слов, разделённых запятыми. Он может выглядеть, например, так:
яблоки, груши, бананы, апельсины, лимоны
Затем представьте разделение списка по запятым. Далее дайте каждому разделу уникальный
идентификационный номер:
То, что получилось, и является массивом. Можем назвать этот массив "fruits". Идея в том,
чтобы можно было получать доступ к массиву по номеру элемента и получать значение этого
элемента:
fruits(0) = яблоки
fruits(1) = груши
fruits(2) = бананы
fruits(3) = апельсины
fruits(4) = лимоны
Такова базовая идея массивов. Попробуем использовать это на практике.
Как использовать массив?
Продолжим с примером fruit. Шаг за шагом, мы заставим его работать как реальный массив.
Сначала создадим переменную для обозначения списка фруктов:
<?php
$fruitlist = "яблоки, груши, бананы, апельсины, лимоны";
?>
Затем используем функцию
explode для разделения списка по запятым:
<?php
$fruitlist = "яблоки, груши, бананы, апельсины, лимоны";
$arrFruits = explode(",", $fruitlist);
?>
Вуаля! "$arrFruits" теперь обозначает массив!
Заметьте, что мы вызвали функцию
explode с двумя аргументами:
1. список для разделения
2. разграничитель - т. е. символ, используемый для разделения (в нашем случае запятая) - в двойных кавычках: ",".
Здесь в качестве разграничителя использована запятая, но это может быть любой символ или
слово.
Прокомментируем скрипт и вставим его в РНР-страницу:
<html>
<head>
<title>Массив</title>
</head>
<body>
<?php
// Список с разделением запятыми
$fruitlist = "яблоки, груши, бананы, апельсины, лимоны";
// Создать массив путём разделения списка (с разделителем-запятой)
$arrFruits = explode(",", $fruitlist);
// Записать значения из нашего массива
echo "<p>Список фруктов:</p>";
echo
echo
echo
echo
echo
echo
echo
"<ul>";
"<li>" .
"<li>" .
"<li>" .
"<li>" .
"<li>" .
"</ul>";
$arrFruits[0]
$arrFruits[1]
$arrFruits[2]
$arrFruits[3]
$arrFruits[4]
.
.
.
.
.
"</li>";
"</li>";
"</li>";
"</li>";
"</li>";
?>
</body>
</html>
Отображение примера
Этот пример - очень простой, и здесь трудно увидеть преимущества использования массива в
данной конкретной задаче. Но потерпите... массивы пригодятся для множества полезных
вещей.
Циклы через массивы
В уроке 5 вы познакомились с циклами. Теперь посмотрим, как пройти циклом по массиву.
Когда известно, сколько элементов содержится в массиве, проблем с определением цикла
нет. Вы просто начинаете с 0 и разрешаете циклу выполняться до количества имеющихся
элементов. В примере с fruits можно идти по массиву так:
<html>
<head>
<title>Массив</title>
</head>
<body>
<?php
// Список с разделением запятыми
$fruitlist = "яблоки, груши, бананы, апельсины, лимоны";
// Создать массив путём разделения списка (с разделителем-запятой)
$arrFruits = explode (",", $fruitlist);
echo "<p>Список фруктов:</p>";
echo "<ul>";
// Цикл по массиву $arrFruits
for ($x=0; $x<=4; $x++) {
echo "<li>" . $arrFruits[$x] . "</li>";
}
echo "</ul>";
?>
</body>
</html>
Отображение примера
Как видите, переменная $x (с инкрементом от 0 до 4 в цикле) использована для вызова этого
массива.
Как определить размер массива?
Но что, если мы добавим в список новый фрукт? Тогда массив будет содержать на один
элемент больше - с идентификатором 5. Видите проблему? Тогда нам нужно изменить цикл, и
он будет работать от 0 до 5, иначе не все все элементы будут охвачены.
Не удобнее ли, если количество элементов массива будет определяться автоматически?
Это можно сделать с помощью функции
количества элементов:
foreach. Теперь массив работает независимо от
<?php
foreach ($arrFruits as $x) {
echo $x;
}
?>
Этот цикл будет работать независимо от того, сколько элементов в нём содержится.
Ещё пример
Вот другой пример использования массива для записи названия месяца:
<html>
<head>
<title>Массив<title>
</head>
<body>
// Создать массив из всех названия месяцев.
// Создать массив из месяцев. Обратите внимание на запятую перед
January - поскольку нет месяца с номером 0
$arrMonths =
array("","January","February","March","April","May","June","July","August","S
eptember","October","November","December");
// Вызвать массив с номером месяца - записать клиенту
echo $arrMonths[date("m")];
?>
</body>
</html>
Отображение примера
Обратите внимание на использование функции
создания массива.
array вместо функции
explode для
Ok. Хватит о массивах! В следующем уроке вы узнаете, как создавать ваши собственные
функции.
Урок 9: Функции
В предыдущих уроках вы узнали, как использовать функции вроде
date() и
array(). В
этом уроке мы научимся создавать собственные функции с помощью
function.
Что такое функция?
Функция обрабатывает ввод и возвращает вывод. Это необходимо, например, если у вас
большой объём данных, или если необходимо многократно выполнять вычисления.
Функция имеет следующий синтаксис:
Имя Функции(список параметров) {
Оператор
}
Таким образом, можно создать простейшую функцию, которая прибавляет значение 1 к числу.
Выглядит это так:
function AddOne($x) {
$x = $x + 1;
echo $x;
}
Наша функция называется AddOne и должна вызваться с числом - например, 34 ...
echo AddOne(34);
... которое (вот сюрприз!) возвращает 35.
Этот пример работает с числом, но функции могут работать с текстом, датами и др. Можно
создавать функции с множеством разных параметров. В этом уроке вы увидите примеры
разнообразных функций.
Пример 1: Функция с несколькими
параметрами
Как сказано выше, вы можете легко создавать функции, вызываемые с несколькими
параметрами. В следующем примере мы создадим функцию, вызываемую с тремя числами,
возвращающую значение суммы этих числе:
<html>
<head>
<title>Функции</title>
</head>
<body>
<?php
function AddAll($number1,$number2,$number3) {
$plus = $number1 + $number2 + $number3;
return $plus;
}
echo "123 + 654 + 9 equals " . AddAll(123,654,9);
?>
</body>
</html>
Отображение примера
Ok. Это тоже почти так же просто! Но важно было показать, что функция может вызываться с
несколькими параметрами.
Пример 2: Английские дата и время
Попробуем создать более сложную функцию. Функция, вызываемая с датой и временем,
возвращает это в формате: Wednesday, 15 February, 2012, 10:00:00 AM
<html>
<head>
<title>Функции</title>
</head>
<body>
<?php
function EnglishDateTime($date) {
// Массив с английскими названиями дней недели
$arrDay =
array("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday")
;
// Массив с английскими названиями месяцев
$arrMonth =
array("","January","February","March","April","May","June","July","August","S
eptember","October","November","December");
// Конструируется дата
$EnglishDateTime = $arrDay[(date("w",$date))] . ", " .
date("d",$date);
$EnglishDateTime = $EnglishDateTime . " " .
$arrMonth[date("m",$date)] . " " . date("Y",$date);
$EnglishDateTime = $EnglishDateTime . ", " . date("H",$date) . ":"
. date("i",$date);
return $EnglishDateTime;
}
// Проверка работы функции
echo EnglishDateTime(time());
?>
</body>
</html>
Отображение примера
Обратите внимание, как '$arrMonth' и '$EnglishDateTime' конструируются в нескольких строках.
Это сделано, чтобы пользователи с низким разрешением экрана могли лучше разглядеть
пример. Это не влияет на сам код.
Эта функция работает на всех вэб-серверах, независимо от языка. То есть вы можете видеть
работу этой функции, если ваш сайт, например, размещён на французском сервере, но вам
нужны английские даты.
Пока мы не углубляемся в работу функций, но уже знаем немного о них.
Урок 10: Передача переменных через
URL
При работе с PHP часто необходимо передать переменные с одной страницы в другую. Этот
урок - о передаче переменных в URL.
Как это работает?
Возможно, вас удивляло, почему некоторые URL выглядят наподобие этого:
http://html.net/page.php?id=1254
Почему после имени страницы стоит знак вопроса?
Ответ: символы после знака вопроса это строка HTTP-запроса. Строка HTTP-запроса может
содержать как имена переменных, так и их значения. В вышеприведённом примере строка
HTTP-запроса содержит переменную "id" со значением "1254".
Вот другой пример:
http://html.net/page.php?name=Joe
То есть у вас снова переменная ("name") со значением ("Joe").
Как получить переменную с помощью PHP?
Предположим, у вас есть PHP-страница people.php. Можно вызвать её с использованием
URL:
people.php?name=Joe
В PHP вы можете получить значение переменной 'name' таким образом:
$_GET["name"]
То есть вы используете
на примере:
$_GET для поиска значения именованной переменной. Попробуем
<html>
<head>
<title>Строка запроса</title>
</head>
<body>
<?php
// Значение переменной найдено
echo "<h1>Hello " . $ _GET["name"] . "</h1>";
?>
</body>
</html>
Отобразить пример (обратите внимание на URL)
Попробуйте в этом примере заменить "Joe" вашим собственным в URL и снова вызвать
документ! Довольно прикольно, а?
Несколько переменных в одном URL
В URL можно передавать и не одну переменную. Разделяя переменные знаком &, можно
передавать несколько:
people.php?name=Joe&age=24
Этот URL содержит две переменные: name и age. Как и ранее, можно получит переменные так
:
$_GET["name"]
$_GET["age"]
Добавим в пример ещё одну переменную:
<html>
<head>
<title>Строка запроса</title>
</head>
<body>
<?php
// Значение имени переменной name найдено
echo "<h1>Hello " . $_GET["name"] . "</h1>";
// Значение имени переменной age найдено
echo "<h1>You are " . $_GET["age"] . " years old </h1>";
?>
</body>
</html>
Отобразить пример (обратите внимание на URL)
Вы узнали, как передать значения между страницами с использованием URL. В следующем
уроке мы изучим другой способ: формы.
Урок 11: Передача переменных через
формы
Интерактивные сайты принимают ввод от пользователей. Один из распространённых
способов получения ввода - формы.
В этом уроке посмотрим, как создать форму и обработать ввод на сервере.
<form>
При создании формы участвуют два важных атрибута: action и method.
action
Используется для ввода URL, куда отправляется форма. Это может быть PHP-файл,
который обрабатывает ввод.
method
Может иметь значение "post" или "get", которые являются различными методами
передачи данных. Пока вам нет необходимости углубляться в отличия этих методов;
методом "get" данные отправляются через URL, а методом "post" - как блок данных
через стандартный сервис ввода/standard input service (STDIN). В последнем
пройденном уроке мы видели, как данные получаются через URL с
использованием
$_GET. В этом уроке мы рассмотрим, как получаются данные,
отправленные через форму методом "post".
HTML-страница с формой
Страница с формой не обязаны быть РНР-файлом (но может быть). Она даже не обязана
находиться на том же сайте, что и файл, который получает данные.
В нашем первом примере мы рассмотрим очень простую форму с одним текстовым полем:
<html>
<head>
<title>Форма</title>
</head>
<body>
<h1>Введите ваше имя</h1>
<form method="post" action="handler.php">
<input type="text" name="username">
<input type="submit">
</form>
</body>
</html>
В браузере отобразится форма:
Теперь начинается самое интересное: получение и обработка данных с помощью PHP.
Запрашивание данных формы с помощью PHP
Если вам необходимо запросить данные, отправленные через форму (методом post), вы
используете
$_POST:
$_POST["fieldname"];
который возвратит значение поля формы. Попробуем это на примере.
Сначала создадим страницу с формой, как ранее. Затем создадим РНР-страницу
(обработчик) "handler.php" (обратите внимание, что это имя страницы, которое мы записали в
атрибуте action в нашей <form>).
Файл "handler.php" будет содержать:
<html>
<head>
<title>Форма</title>
</head>
<body>
<?php
echo "<h1>Привет, " . $_POST["username"] . "</h1>";
?>
</body>
</html>
Отображение примера
Пользовательский ввод и условия
В следующем примере мы попробуем использовать пользовательский ввод для создания
условий. Сначала нам понадобится форма:
<html>
<head>
<title>Форма</title>
</head>
<body>
<form method="post" action="handler.php">
<p>Как вас зовут:</p>
<input type="text" name="username"></p>
<p>Ваш
<input
<input
<input
любимый цвет:
type="radio" name="favoritecolor" value="r" /> Красный
type="radio" name="favoritecolor" value="g" /> Зелёный
type="radio" name="favoritecolor" value="b" /> Синий </p>
<input type="submit" value="Submit" />
</form>
</body>
</html>
В браузере это будет так:
Теперь используем эти вводы для создания страницы, которая автоматически изменяет цвет
фона на основе указаний пользователя. Это делается созданием условия (см. Урок 6),
которое использует данные, введённые пользователем в форму.
<?php
$strHeading = "<h1>Привет, " . $_POST["username"] . "</h1>";
switch ($_POST["favoritecolor"]) {
case "r":
$strBackgroundColor
break;
case "g";
$strBackgroundColor
break;
case "b":
$strBackgroundColor
break;
default:
$strBackgroundColor
break;
}
= "rgb(255,0,0)";
= "rgb(0,255,0)";
= "rgb(0,0,255)";
= "rgb(255,255,255)";
?>
<html>
<head>
<title>Форма</title>
</head>
<body style="background: <? echo $strBackgroundColor; ?>;">
<? echo $strHeading; ?>
</body>
</html>
Фон будет белым, если пользователь не укажет в форме предпочтительный цвет. Это
достигается установкой значения default (по умолчанию), которое применяется, если ни одно
из условий не выполнено.
Но что будет, если пользователь не укажет своё имя? Тогда в заголовке будет только
"Привет,". Создадим дополнительное условие для изменения этого варианта.
<?php
$strUsername = $_POST["username"];
if ($strUsername != "") {
$strHeading = "<h1>Привет, " . $_POST["username"] . "</h1>";
}
else {
$strHeading = "<h1>Привет, незнакомец!</h1> ";
}
switch ($_POST["favorite color"]) {
case "r":
$strBackgroundColor = "rgb(255,0,0)";
break;
case "g";
$strBackgroundColor = "rgb(0,255,0)";
break;
case "b":
$strBackgroundColor = "rgb(0,0,255)";
break;
default:
$strBackgroundColor = "rgb(255,255,255)";
break;
}
?>
<html>
<head>
<title>Форма</title>
</head>
<body style="background: <? echo $strBackgroundColor; ?>;">
<? echo $strHeading; ?>
</body>
</html>
Отобразить пример.
В вышеприведённом примере мы используем условия для проверки информации от
пользователя. В данном случае не столь важно, если пользователь не укажет имя. Но
поскольку ваш код становится всё более навороченным, жизненно важно, чтобы учитывался
вариант, когда пользователь вообще не заполняет формы.
Пример: Форма контактной информации
Основываясь на имеющихся знаниях о PHP и формах, вы можете создать форму контактной
информации с использованием функции
mail, которая имеет следующий синтаксис:
mail(куда, субъект, сообщение);
Сначала создаём простую HTML-форму:
<html>
<head>
<title>Форма контактной информации</title>
</head>
<body>
<h1>Форма контактной информации</h1>
<form method="post" action="handler.php">
<p>Субъект:<br /><input type="text" name="subject" /></p>
<p>Сообщение:<br /><textarea name="message"></textarea></p>
<input type="submit">
</form>
</body>
</html>
Затем понадобится РНР-скрипт для отправки пользовательского ввода:
<html>
<head>
<title>Функции</title>
</head>
<body>
<?php
// Получатель (измените на ваш e-mail адрес)
$strEmail = "name@mydomain.com";
// Получить пользовательские вводы
$strSubject = $_POST["subject"];
$strMessage = $_POST["message"];
mail($strEmail,$strSubject,$strMessage);
echo "Mail Sent.";
?>
</body>
</html>
Заметьте, что пример работает, только если у вас есть доступ к почтовому серверу. По
умолчанию это не так в XAMPP и в большинстве бесплатных хостов. Итак, некоторые хосты
могут требовать наличия заголовка формы, который выполняется с дополнительным
параметром:
mail("вы@имявашегодомена.com", "Тест", "Это тестовое сообщение", "От:
мне@мойдомен.com");
Урок 12: Сессии
При посещении сайта вы выполняете различные действия. Переходите с одной страницы на
другую. Возможно, заполняете форму или покупаете что-то.
Это очень важно учитывать при создании успешных вэб-проектов.
Предположим, например, что вы хотите создать сайт, на котором несколько страниц
защищены логином и паролем. Чтобы эта защита действовала эффективно, защищённые
паролем страницы должны иметь доступ к информации о том, зашёл ли пользователь ранее в
систему. Вы должны, иначе говоря, "помнить", что пользователь делал до этого.
Именно об этом наш урок - как использовать сессии в PHP для сохранения и получения
информации в процессе визита пользователя на наш сайт.
Сессии
РНР-сессии
дают возможность работать с информацией о пользовательской сессии. Вы
можете создавать приложения, которые идентифицируют и собирают информацию о
пользователях.
Сессии могут начинаться разными способами. Мы не будем углубляться в технические
тонкости, а сконцентрируемся на варианте, когда сессия начинается с сохранения значения.
Сессия заканчивается/загибается (dies), если пользователь не запрашивает страниц в
течение какого-то времени (стандартное значение - 20 минут). Разумеется, вы в любой
момент можете закончит/убить сессию в вашем скрипте.
Скажем, 50 пользователей просматривают страницы одного сайта, например, вэб-шоп.
Информацию о том, что у каждого посетителя в корзине, лучше всего сохранить в сессии.
Чтобы идентифицировать пользователей, сервер использует уникальные пользовательские
идентификаторы/user ID, которые хранятся в куках. Кука это небольшой текстовый файл,
хранимый на компьютере пользователя (см. Урок 13). Следовательно, сессии часто требуют
поддержки кук в браузерах пользователей.
Пример использования сессий
Если вы запрашиваете эту страницу, я сохраняю текущее время в сессии. Я сделал это и могу
теперь показать вам пример работы сессии.
Я назвал элемент "StartTime" и сохранил его, добавив следующую строку в мой РНР-скрипт:
<?php
session_start();
$_SESSION["StartTime"] = date("r");
?>
Таким образом, сессия началась. Как сказано выше, каждая сессия получает ID от сервера.
Ваша сессия имеет следующий ID: 66f92c3a155004dd0054e9c7453c63c8
В любое время я могу вызвать "StartTime" из сессии, введя:
<?php
session_start();
echo $_SESSION["StartTime"];
?>
что покажет, что страница была запрошена в (в соответствии с временем данного вэбсервера).
Но интересно, штаа эта информация остаётся в сессии, даже после выхода со страницы. Эта
информация будет сопровождать вас, пока ваша сессия не завершится.
По умолчанию сессия длится, пока пользователь не закроет окно браузера, и тогда она
загибается автоматически. Но если вы хотите принудительно завершить сессию, её всегда
можно замочить таким образом:
<?php
session_destroy();
?>
Посмотрим другой пример использования сессий: с паролем.
Логин в систему с сессиями
В следующем примере мы создадим простейшую систему с логином. Используем многое из
того, что изучили на предыдущих занятиях.
Первое, что необходимо, это форма, в которой люди могу указывать username и password.
Она может выглядеть так:
<html>
<head>
<title>Login</title>
</head>
<body>
<form method="post" action="login.php">
<p>Username: <input type="text" name="username" /></p>
<p>Password: <input type="text" name="password" /></p>
<p><input type="submit" value="Let me in" /></p>
</form>
</body>
</html>
Затем создадим файл login.php.
В этом файле мы проверяем, введены ли корректные username и password. Если это так, мы
начинаем сессию, в которой указано, что пользователь вошёл с корректными username и
password.
<html>
<head>
<title>Login</title>
</head>
<body>
<?php
// Проверить корректность username и password
if ($_POST["username"] == "php" && $_POST["password"] == "php") {
// Если корректны, устанавливаем значение сессии в YES
session_start();
$_SESSION["Login"] = "YES";
echo "<h1>Вы зашли некорректно</h1>";
echo "<p><a href='document.php'>Ссылка на защищённый файл</a><p/>";
}
else {
// Если некорректны, устанавливаем сессию в NO
session_start();
$_SESSION ["Login"] = "NO";
echo "<h1>Вы зашли НЕкорректно </ h1>";
echo "<p><a href='document.php'>Ссылка на защищённый файл</a><p/>";
}
?>
</body>
</html>
При работе с защищёнными файлами мы проверяем, вошёл ли пользователь с корректным
логином. Если нет, the пользователь отправляется обратно к логин-форме. Вот как делается
эта защита:
<?php
// Начать вашу РНР-сессию
session_start();
// Если пользователь не зашёл, отправить его/её к логин-форме
if ($_SESSION["Login"] != "YES") {
header("Location: form.php");
}
?>
<html>
<head>
<title>Логин</title>
</head>
<body>
<h1>Этот документ защищён</h1>
<p>Вы можете получить к нему доступ, только если вошли в систему.</p>
</body>
</html>
Нажмите здесь для проверки логин-системы
Вы получили представление об объекте Session. В следующем уроке мы продолжим работу в
этом же направлении, но также подробнее познакомимся с куками.
Урок 13: Куки
Крайне важно, Как и какую информацию вэб-сайты собирают у пользователей, в особенности
как её используют. Куки часто упоминаются как пример того, что информация собирается и
ставит под угрозу вашу секретность. Но есть ли повод для волнения? Судите сами. Пройдя
этот урок, вы узнаете, что можно делать с куками.
Что такое кука?
Кука это небольшой текстовый файл, в котором сайт может хранить различную информацию.
Куки сохраняются на жёстком диске пользователей, а не на сервере.
Срок годности большинства кук истекает после предопределённого периода времени (они
самоудаляются), и этот период может варьироваться от одной минуты до нескольких лет. Но
пользователь и сам может удалять любые куки на своём компьютере.
Большинство браузеров, таких как Microsoft Internet Explorer, Mozilla Firefox и Google Chrome,
могут быть сконфигурированы так, что пользователь может решать, принимать ли куки. Но
тогда почему не сказать "нет" всем кукам? Это возможно. Но многие сайты не будут работать
соответствующим образом без кук, поскольку куки во многих контекстах используются для
улучшения функциональности сайтов.
Как информация хранится в куке?
В РНР легко установить или настроить куку с помощью
создадим куку и установим её значение.
setcookie. В первом примере мы
Прежде всего нужно дать куке имя. В данном примере используем "HTMLTest". Далее вы
устанавливаете значение куки:
<?php
// Установка куки
setcookie("HTMLTest", "Это тестовая кука");
?>
По умолчанию кука хранится, пока не закроется браузер, но это легко изменить, добавив
другой параметр - установив срок годности:
<?php
// Установка куки
setcookie("Name", "C. Wing, time()+3600);
setcookie("Interests", "plane spotting", time()+3600);
?>
"Time()+3600" специфицирует, что кука должна действовать 3600 секунд (60 минут) с данного
момента.
В вышеприведённом примере мы сохранили информацию об имени пользователя и его
интересах. Эта информация может пригодиться, например, для настройки сайта под
конкретного посетителя.
Как вы запрашиваете значение куки?
Для получения значения куки используется
$_COOKIE. Например, если вам необходима
информация из предыдущего примера, мы делаем так:
<?php
// Запросить значение куки
$strName = $_COOKIE["Name"];
strInterest = $_COOKIE["Interest"];
// Вывести клиенту
echo "<p>" . strName . "</p>"
echo "<p>Вас интересует . " strInterest . "</p>"
?>
Кто может читать куки?
По умолчанию куки читаются на том же домене второго уровня (например, html.net), на
котором они созданы. Применяя параметры domain иpath, вы можете внести ограничения на
использование куки, используя такой синтаксис:
setcookie(name, value, expiration time, path, domain);
Посмотри пример:
<?php
// Установка куки: name, value, expiration time, path, domain
setcookie("Name", "C. Wing", time()+60*60*24*365, "/tutorials/php/",
"www.html.net");
?>
В вышеприведённом примере мы установили куку "Name" со значением "C. Wing." Срок
действия куки истекает через год (60 секунд * 60 минут * 24 часов * 365 дней), и она может
читаться только сайтами, размещёнными в директории "/tutorials/php/" на (суб-)домене
"www.html.net".
Пример куки
Можно попробовать сохранить сэмпл куки на вашем компьютере и потом посмотреть, как она
выглядит.
Вот код установки куки:
<?php
// Установит куку
setcookie("HTMLTest", "Этот текст - кука!", time()+60*60*24,
"/tutorials/php/", "www.html.net");
// Записать информацию клиенту
echo $_COOKIE ["HTMLTest"];
?>
Отображение примера
Кука размещается на ваш жёсткий диск. В зависимости от вашей операционной системы ваши
куки могут сохраняться в разных местах. Когда вы их найдёте, они могут выглядеть примерно
так:
Как видите, кука это нормальный текстовый файл, который можно открыть с помощью
Notepad, например. Содержимое куки, которую мы только что создали, может выглядеть
примерно так:
HTMLTest TEXT=This+text+is+in+a+cookie% 21 www.html.net/tutorials/php
0 80973619229399148 4216577264 29399141 *
Не будем углубляться в анализ различных кодов, а лишь отметим, что пользователь имеет
полный контроль куками на своём компьютере.
В этом уроке мы узнали, что могут куки, но не определили, для чего их можно использовать.
Общеизвестно, что куки могут использоваться для нежелательной деятельности. Но в
большинстве случаев куки используются для удобства конечных пользователей.
Если вы решите использовать куки на вашем сайте, неплохо сообщить об этом вашим
друзьям. Это можно сделать, например, в условиях пользования сайтом или в процессе
регистрации.
Урок 14: Файловая система
С помощью PHP вы можете получить доступ к файловой системе сервера. Это даёт
возможность работать с папками и текстовыми файлами в РНР-скриптах.
Например, можно использовать PHP для чтения и записи текстовых файлов. Либо можно
получить список всех файлов в папке. Возможностей много, и РНР может избавить вас от
рутинной работы.
Здесь мы посмотрим, как можно использовать РНР для работы с файлами и папками. Цель дать вам общее представление. В следующих уроках мы более подробно рассмотрим эти
возможности. Полный список см. в документации.
filemtime
Возвращает время, когда файл в последний раз редактировался (в виде UNIX
timestamp - см. Урок 4)).
fileatime
Возвращает время, когда к файлу в последний раз осуществлялся доступ (в виде UNIX
timestamp - см. Урок 4)).
filesize
Возвращает размер файла, в байтах.
Попробуем определить эти три свойства файла: "/tutorials/php/lesson14.php"
<html>
<head>
<title>Файловая система</title>
</head>
<body>
<?php
// Найти и записать свойства
echo "<h1>file: lesson14.php</h1>";
echo "<p>В последний раз редактировался: " . date("r",
filemtime("lesson14.php"));
echo "<p>В последний раз был открыт: " . date("r",
fileatime("lesson14.php"));
echo "<p>Размер: " . filesize("lesson14.php") . " байт";
?>
</body>
</html>
Отображение примера
Папки
PHP позволяет также работать с папками на сервере. Мы не будем рассматривать все
возможности - только покажем на примере. Не забывайте смотреть документацию.
opendir
Открывает специфицированную папку/директорию.
readdir
Возвращает имя следующего файла в открытой папке (соотв.
closedir
opendir)
Закрывает специфицированную папку/директорию.
В примере создаётся листинг папки "tutorials/php/".
<html>
<head>
<title>FileSystemObject</title>
</head>
<body>
<?php
// Открыть папку
$folder = opendir("../../tutorials/php/");
// Цикл по всем файлам папки
while (readdir($folder) != "") {
echo readdir($folder) . "<br />";
}
// Закрыть папку
$folder = closedir($folder);
?>
</body>
</html>
Отображение примера
В этом примере сначала открывается директория "../../tutorials/php/". Затем используется цикл
для написания имени следующего файла в папке, если файлы ещё есть. В конце папка
закрывается.
В следующих уроках мы узнаем, как как читать и записывать текстовые файлы.
Урок 15: Чтение из текстового файла
В предыдущем уроке мы научились использовать РНР для доступа к файловой системе
сервера. В этом уроке используем эту информацию для чтения из простого текстового файла.
Текстовые файлы отлично подходят для хранения разного рода данных. Они не так гибки, как
базы данных, но обычно не требую такого количества памяти. Более того, текстовые файлы
имеют формат, который читается на большинстве систем.
Открыть текстовый файл
Для открытия текстового файла используем функцию
fopen(filename, mode)
fopen. Вот её синтаксис:
filename
Имя открываемого файла.
mode
Mode/Режим может быть "r" (reading/чтение), "w" (writing/запись) или "a"
(appending/присоединение). В этом уроке мы будем только читать из файла и,
соответственно, используем "r". В следующем уроке мы научимся записывать и
присоединять текст.
Примеры этого урока используют файл unitednations.txt. Это простой список программ и
фондов ООН и их доменов. Можете загрузить этот файл или создать свой и использовать его
в примерах.
Сначала попробуем открыть unitednations.txt:
<?php
// Открыть текстовый файл
$f = fopen("unitednations.txt", "r");
// Закрыть текстовый файл
fclose($f);
?>
Пример 1: Чтение строки из текстового файла
С помощью функции
fgets можно читать строку из текстового файла. Этот метод читает до
первого символа переноса строки (но не включая символ переноса строки).
<html>
<head>
<title>Чтение из текстовых файлов</title>
</head>
<body>
<?php
$f = fopen("unitednations.txt", "r");
// Читать строку их текстового файла и записать содержимое клиенту
echo fgets($f);
fclose($f);
?>
</body>
</html>
Отображение примера
Пример 2: Чтение всех строк текстового файла
<html>
<head>
<title>Чтение из текстовых файлов</title>
</head>
<body>
<?php
$f = fopen("unitednations.txt", "r");
// Читать построчно до конца файла
while(!feof($f)) {
echo fgets($f) . "<br />";
}
fclose($f);
?>
</body>
</html>
Отображение примера
В этом примере мы выполняем цикл по всем строкам и используем функцию
feof (for endof-file/до конца файла) для проверки достижения конца файла. Если конец не достигнуть ("!" см. Урок 6), строка записывается.
Вместо цикличного прохода по всем строкам мы можем получить тот же результат
функцией
fread. При работе с очень большими текстовыми файлами помните, что
fread использует больше ресурсов, чем
fgets. Для маленьких файлов разница в работе
несущественна.
Пример 3: Простая директория ссылок
Как сказано в начале этого урока, текстовые файлы могут отлично подойти для хранения
данных. Это показано на следующем примере, где создаётся простая директория ссылок из
содержимого файла unitednations.txt.
В файле систематизированно записаны: название программы, запятая, домен. Как вы,
вероятно, могли предположить, в файле с разделением запятыми можно записать куда
больше информации.
Для получения информации из каждой строки используем массив. См. в Уроке 8 о массивах.
<html>
<head>
<title>Чтение из текстовых файлов</title>
</head>
<body>
<?php
$f = fopen("unitednations.txt", "r");
// Читать построчно до конца файла
while (!feof($f)) {
// Создать массив с запятой-разделителем
$arrM = explode(",",fgets($f));
// Записать ссылки (получить данные из массива)
echo "<li><a href='http://" . $arrM[1] . "'>" . $arrM[0].
"</a></li>";
}
fclose($f);
?>
</body>
</html>
Отображение примера
Весьма удобно, правда? В принципе вы можете расширить этот файл сотнями ссылок или
расширить директорию, включив также адреса.
В следующем уроке мы мы посмотрим, как записать в текстовый файл.
Урок 16: Запись в текстовый файл
В предыдущем уроке мы научились читать из текстового файла. В этом уроке будем
записывать в него.
Эти два метода очень похожи, но есть одно важное отличие: для записи необходимо наличие
права на запись. Это значит, что должен размещаться в директории, в которой у вас есть
необходимые права.
Если вы работаете локально на своём компьютере, то можете сами установить права:
щёлкните правой мышью на папке и выберите "Свойства/Properties". На большинстве вэбхостов обычно имеется только одна папка с правами записи. Часто она называется "cgi-bin",
"log", "databases" и т. п. Если ваш вэб-хост допускает, можно устанавливать права
самостоятельно. Обычно можно щёлкнуть правой мышью на папке в FTP-клиенте и выбрать
"properties" или "permissions" ил что-то похожее. Скриншот ниже показывает, как это выглядит
в FileZilla.
См. также страницы поддержки ваших вэб-хостов.
Обратите внимание, что именно текстовый файл должен находиться в папке с правами на
запись, а не РНР-файл.
Открытие текстового файла для записи
Как и при чтении текстового файла, функция
fopen используется при записи, но на этот раз
режим устанавливается "w" (writing) или "a" (appending).
Разница между writing и appending в том, как размещается 'курсор' - в начале или в конце
текстового файла.
В примерах этого урока используется пустой текстовый файл textfile.txt. Но вы можете создать
свой собственный файл, если желаете.
Сначала попробуем открыть этот текстовый файл для записи:
<?php
// Открыть текстовый файл
$f = fopen("textfile.txt", "w");
// Закрыть текстовый файл
fclose($f);
?>
Пример 1: Запись строки в текстовый файл
Для записи строки мы должны использовать функцию
<html>
<head>
fwrite:
<title>Запись в текстовый файл</title>
</head>
<body>
<?php
// Открыть текстовый файл
$f = fopen("textfile.txt", "w");
// Записать строку текста
fwrite($f, "PHP is fun!");
// Закрыть текстовый файл
fclose($f);
// Открыть файл для чтения и прочитать строку
$f = fopen("textfile.txt", "r");
echo fgets($f);
fclose($f);
?>
</body>
</html>
Отображение примера
Поскольку файл открыть для записи, строка добавляется в начало файла и перезаписывает
существующую строку. Если мы открываем файл для appending, строка добавляется в низ
файла, который увеличивается на одну строку всякий раз при записи.
Пример 2: Добавление блока текста в
текстовый файл
Разумеется, можно также добавлять целый текстовый блок, а не одну строку:
<html>
<head>
<title>Запись в текстовый файл</title>
</head>
<body>
<?php
// Открыть текстовый файл
$f = fopen("textfile.txt", "w");
// Записать текст
fwrite($f, $_POST["textblock"]);
// Закрыть текстовый файл
fclose($f);
// Открыть файл для чтения и прочитать строку
$f = fopen("textfile.txt", "r");
// Читать текст
echo fgets($f);
fclose($f);
?>
</body>
</html>
Отображение примера
В следующих уроках мы разберём другой способ хранения данных: базы данных.
Урок 17: Базы данных (БД)
БД это коллекция информации/данных, организованная для упрощения доступа к ним, их
администрирования и обновления. БД дают возможность создавать динамические вэб-сайты
с большим объёмом информации. Например, все данные членов HTML.net и все пóсты
форумов хранятся в БД.
БД обычно состоит из одной или более таблиц. Если вы привыкли работать с
крупноформатными таблицами или пользовались БД до этого, то таблицы будут выглядеть
привычно для вас - столбцы и ряды:
Существует множество различных БД: MySQL, MS Access, MS SQL Server, Oracle SQL Server
и многие другие. В этом учебнике мы используем БД MySQL. MySQL - естественное место для
начала использования БД в PHP.
Вам нужен доступ к MySQL, чтобы работать с этим и следующим уроками:



Если у вас имеется сайт на вэб-хосте с PHP, MySQL, скорее всего, уже установлен на
сервере. См. страницы помощи на вашем хосте.
Если вы самостоятельно устанавливали РНР на свой компьютер, а также имеете
смелость установить MySQL, можете загрузить его бесплатную версию (MySQL
Community Edition) с сайта MySQL.
Если вы используете XAMPP (см. Урок 2), MySQL уже установлен и готов к
использованию на вашем компьютере. Просто проверьте в Панели Управления,
работает ли MySQL:
Далее в этом уроке мы подробно остановимся на том, как подключиться к серверу БД, прежде
чем начнём создавать БД, запрашивать и обновлять данные в следующих сессиях.
Соединение с сервером БД
Сначала необходимо получить доступ к серверу, где находится ваша БД MySQL. Это
делается функцией
mysql_connect с таким синтаксисом:
mysql_connect(сервер, username, password)
Проще говоря: сначала вы записываете местоположение БД (сервер), а затем
указываете username и password.
Если у вас имеется собственный вэб-сайт, вы должны прочесть о размещении вашего MySQLсервера на страницах поддержки. Username и password - часто те же, что для FTP-доступа.
Иначе свяжитесь с провайдером.
Пример MySQL-соединения на вэб-сайте хоста:
mysql_connect("mysql.myhost.com", "user001", "sesame") or
die(mysql_error());
Пример MySQL-соединения с XAMPP (установки по умолчанию):
mysql_connect("localhost", "root", "") or die (mysql_error());
В этих примерах добавлены or die(mysql_error()) , которые, коротко говоря, прерывают
работу скрипта и записывают ошибку, если соединение не удалось.
Теперь мы установили соединение с MySQL-сервером и может начать создание БД,
запрашивать и вставлять данные. Именно этим мы и займёмся в следующих уроках.
Кстати, не забывайте, что правильно будет закрывать БД всякий раз после окончания
запрашивания и обновления данных. Это делается функцией
mysql_close.
Урок 18: Создание БД и таблиц
В предыдущем уроке мы узнали, как создать соединение с сервером БД. Следующий шаг создание БД и таблиц.
Рассмотрим два способа создания БД и таблиц. Первый, как это делается в PHP, второй - с
помощью более дружественной утилиты PhpMyAdmin, которая является стандартной на
большинстве вэб-хостов и в XAMPP.
Если у вас на хосте есть сайт с поддержкой PHP и MySQL, БД, возможно, уже создана для
вас, и вы можете пропустить это раздел урока и начать создавать таблицы. Не забывайте
консультироваться со страницами помощи хоста.
Создание БД и таблиц с помощью PHP
Функция
mysql_query используется для отправки запроса БД MySQL. Запросы
записываются на языке Structured Query Language (SQL). SQL - наиболее широко
распространённый язык запросов БД - не только для БД MySQL - он очень логичен и прост
для изучения. В этом и следующем уроках вы узнаете всё самое важное о SQL-запросах.
При создании БД используется SQL-запрос
CREATE DATABASE с таким синтаксисом:
CREATE DATABASE имя БД
Легко и просто, не так ли!? Попробуем вставить это в PHP-скрипт:
mysql_connect("mysql.myhost.com", "user", "sesame") or
die(mysql_error());
mysql_query("CREATE DATABASE mydatabase") or die(mysql_error());
mysql_close();
Сначала соединяемся с MySQL-сервером. Затем создаём БД "mydatabase". И наконец закрываем соединение с MySQL-сервером.
Пока неплохо... но всё несколько усложняется, когда мы хотим создать таблицы в PHP. При
создании таблиц мы используем SQL-запросCREATE TABLE с таким синтаксисом:
CREATE TABLE имя таблицы
(
имя_столбца1 ТИП_ДАННЫХ,
имя_столбца2 ТИП_ДАННЫХ,
имя_столбца3 ТИП_ДАННЫХ,
...
)
имя_таблицы и имя_столбца это, понятное дело, соответствующие
имена. ТИП_ДАННЫХ используется для специфицирования типа данных, вставляемых в
столбец. Вот наиболее распространённые типы:
INT
Целые числа
DECIMAL
Десятичные числа
CHAR
Краткий текст до 255 символов длиной
TEXT
Обычный текст до 65,535 символов
LONGTEXT
Длинные куски текста до 4,294,967,295 символов
Date
Даты в формате ГГГГ-MM-ДД
Time
Время в формате ЧЧ:MM:СС
DATETIME
Время и дата в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС
В целом логично и относительно просто. Попробуем вставить это в наш пример:
mysql_connect("mysql.myhost.com", "user", "sesame") or
die(mysql_error());
mysql_select_db("people") or die(mysql_error());
mysql_query("CREATE TABLE MyTable (
id INT AUTO_INCREMENT,
FirstName CHAR,
LastName CHAR,
Phone INT,
BirthDate DATE
PRIMARY KEY(id)
)") Or die(mysql_error());
mysql_close ();
В этом примере мы начинаем с соединения с MySQL-сервером. Затем используем
функцию
mysql_select_db для выбора БД "people". Далее создаём таблицу "persons" из 5
столбцов.
Обратите внимание, что для столбца "id" мы используем
INT для специфицирования того,
что столбец содержит числа, а затем добавляем
AUTO_INCREMENT для автоматического
инкремента этих чисел и гарантирования тог, что для каждого ряда будет сгенерирован
уникальный ID.
В конце мы используем
PRIMARY KEY для установки столбца "id" как первичного
ключа/primary key. Первичный ключ уникально идентифицирует каждую запись (/ряд) в
таблице, что особенно пригодится при последующих обновлениях БД.
Создание БД и таблиц с использованием
phpMyAdmin
Бывает полезно иметь возможность создавать БД и таблицы напрямую в PHP. Но часто
проще использовать phpMyAdmin (или любую иную утилиту администрирования MySQL),
которая является стандартной на большинстве вэб-хостов и в XAMPP. Скриншот ниже
показывает, как создавать БД и таблицы с применением phpMyAdmin.
Начинаем со входа в phpMyAdmin. Часто адрес - тот же, что и для вашего MySQL-сервера
(например, "http://mysql.myhost.com"), с теми же username и password. В XAMPP адрес:
http://localhost/phpmyadmin/
Если вы вошли, просто введите имя БД и нажмите кнопку "Create":
На некоторых хостах БД уже могут быть созданы, и у вас может не быть прав создавать
новые. Если это так, вы, очевидно, можете использовать только уже назначенную БД.
Для создания таблицы щёлкните вкладку "Databases" и выберите БД, щёлкнув на ней:
Затем появится бокс "Create new table in database", где вы вводите имя таблицы и количество
столбцов и нажимаете "Go":
Далее вы можете именовать столбцы и указать типы данных etc., как в предыдущем примере
с SQL.
Заметьте, что здесь мы так же устанавливаем "id" как
AUTO_INCREMENT (A_I).
PRIMARY KEY используем
Теперь у вас создана собственная БД и таблица. В следующих уроках мы разберёмся, как
вставлять, запрашивать и удалять данные в БД.
Урок 19: Вставка данных в БД
В этом уроке мы рассмотрим, как вставлять данные в БД непосредственно из ваших РНРскриптов.
Вставка данных с использованием SQL
Вы используете SQL для вставки данных в БД точно так же, как используете SQL для
создания БД и таблиц. Синтаксис SQL-запроса таков:
INSERT INTO ИмяТаблицы(столбец1, столбец2, ...) VALUES(значение1,
значение2, ...)
Как видите, вы можете обновлять несколько столбцов в одном SQL-операторе, указывая их в
разделённом запятыми списке. Но разумеется, можно также специфицировать только один
столбец и одно значение. Столбцы, не упомянутые в данном SQL-операторе, останутся
пустыми.
Пример: Вставка новой персоны в таблицу
В этом примере мы используем БД из Урока 18. Скажем, мы хотим вставить персону в БД. Это
может быть Gus Goose с номером телефона99887766 и датой рождения 1964-04-20.
Оператор SQL может выглядеть так:
$strSQL = "INSERT INTO people(FirstName,LastName,Phone,BirthDate)
VALUES('Gus','Goose','99887766 ','1964-04-20')";
mysql_query($strSQL) or die(mysql_error());
Как видите, SQL-операторы могут быть весьма длинными, и можно легко потерять след.
Поэтому лучше записывать SQL-оператор слегка иначе:
strSQL = "INSERT INTO people(";
strSQL
strSQL
strSQL
strSQL
=
=
=
=
strSQL
strSQL
strSQL
strSQL
.
.
.
.
"FirstName, ";
"LastName, "
"Phone, ";
"birth) ";
strSQL = strSQL . "VALUES (";
strSQL = strSQL . "'Gus', ";
strSQL = strSQL . "'Goose', ";
strSQL = strSQL . "'99887766', ";
strSQL = strSQL . "'1964-04-20')";
mysql_query($strSQL) or die(mysql_error());
Здесь SQL-оператор строится с разделением предложения на небольшие части с
последующим объединением их в переменную $strSQL.
На практике нет разницы в применении того или другого метода, но при работе с большими
таблицами становится крайне важной возможность "держать след", так что выбирайте
наиболее подходящий метод.
Попробуем выполнить следующий код для вставки Gus Goose в БД:
<html>
<head>
<title>Вставка данных в БД</title>
</head>
<body>
<?php
// Соединение с сервером БД
mysql_connect("mysql.myhost.com", "user", "sesame") or die
(mysql_error ());
// Выбор БД
mysql_select_db("mydatabase") or die(mysql_error());
// Построение SQL-оператора
$strSQL = "INSERT INTO people(";
$strSQL = $strSQL . "FirstName, ";
$strSQL = $strSQL . "LastName, ";
$strSQL = $strSQL . "Phone, ";
$strSQL = $strSQL . "BirthDate) ";
$strSQL = $strSQL . "VALUES(";
$strSQL = $strSQL . "'Gus', ";
$strSQL = $strSQL . "'Goose', ";
$strSQL = $strSQL . "'99887766', ";
$strSQL = $strSQL . "'1964-04-20')";
// SQL-оператор выполняется
mysql_query($strSQL) or die (mysql_error());
// Закрытие соединения
mysql_close();
?>
<h1>БД обновлена!</h1>
</body>
</html>
Сохранение пользовательского ввода в БД
Часто бывает необходимо сохранить в БД данные, вводимые пользователем.
Вы, вероятно, уже сообразили, что для этого можно создать форму, как в Уроке 11, а
значения из формы можно вставить в SQL-оператор. Предположим, у вас имеется простая
форма:
<form action="insert.php" method="post">
<input type="text" name="FirstName" />
<input type="submit" value="Save" />
</form>
Эта форма отправляется в файл insert.php , где вы, как показано в Уроке 11, можете
получить пользовательский ввод, запросив содержимое формы. В данном конкретном случае
SQL-оператор может быть таким:
strSQL = "INSERT INTO people(FirstName) values('" .
$_POST["FirstName"] . "')"
Аналогично можно запросить данные кук, сессий строк запроса etc.
Наиболее распространённые ошибки
начинающих
Сначала вы, возможно, будете получать кучу сообщений об ошибках при попытках обновить
БД. При работе с БД совершенно недопустимы никакие погрешности. Неверно поставленная
запятая может означать, что БД не обновляется, и вы получите сообщение об ошибке. Ниже
мы описываем наиболее распространённые ошибки.
Неверный тип данных
Важно, чтобы данные и тип данных столбца соответствовали друг другу. Каждый столбец
может содержать данные определённого типа. Следующий скриншот показывает типы данных
таблицы "people" из нашего примера.
Выдаётся ошибка, если вы, например, попытаетесь вставить текст или число в поле данных.
Следовательно, устанавливайте тип данных как можно точнее.
Ниже перечислены наиболее употребительные типы данных:
Значение
Тип Данных
CHR
Текст или комбинация текста и чисел. Может также использоваться для числе, не
используемых при расчётах (напр., номера телефонов).
TEXT
Большие блоки текста или комбинация текста и чисел.
INT
Числовые данные для математических вычислений.
DATE
Даты в формате ГГГ-ММ-ДД
TIME
Время в формате чч:мм:сс
DATETIME Дата и время в формате ГГГ-ММ-ДД чч:мм:сс
SQL-операторы с кавычками или обратными слэшами
Если вы попытаетесь вставить текст, содержащий символы одинарной кавычки ('), двойной
кавычки (") или обратного слэша (\), запись не будет вставлена в БД. Решением будет
подстановка обратных слэшей перед символами, которые должны мнемонизироваться при
вставке в запросы БД.
Это делается функцией
addslashes:
<?php
$strText = "Is your name O'Reilly?";
$strText = addslashes($strText);
?>
Все двойные ('), одинарные (") кавычки м обратные слэши (\) получат дополнительный
обратный слэш перед символом. Это делается только при вставке данных в БД, эти
дополнительные \ не вставляются. Обратите внимание, что PHP запускает по умолчанию
addslashes для всех данных $_GET, $_POST и $_COOKIE. Так что не используйте
addslashes в строках, которые уже мнемонизированы.
В следующем уроке вы научитесь запрашивать данные из БД. Но сначала попытайтесь
вставить несколько персон в вашу БД (как в примере с Gus Goose).
Урок 20: Получение данных из БД
Теперь настало время запросить данные из нашей БД для наших PHP-страниц.
Это один из наиболее важных уроков данного учебника. Когда вы прочтёте и разберёте этот
урок, вы поймёте, почему вэб-решения на основе БД настолько мощны, и ваше
представление о вэб-разработке значительно расширится.
SQL-запросы
Для получения данных из БД вы используете запросы. Примером запроса может быть:
"получить данные из таблицы 'people', отсортированные по алфавиту" или "получить имена из
таблицы 'people'".
Напоминаем, что язык Structured Query Language (SQL) используется для общения с БД.
Посмотрим на простой пример:
Получить все данные из таблицы 'people'
В SQL мы запишем:
SELECT * FROM people
Синтаксис говорит сам за себя. Просто читайте и смотрите, как используются SQL-операторы
в следующих примерах.
Пример 1: Запрос данных из БД
Этот пример использует БД и таблицу из Урока 19 и Урока 18. Следовательно, прочтите
сначала эти уроки.
Данный пример показывает, как данные из таблицы "people" запрашиваются с помощью SQLзапроса.
Этот SQL-запрос возвращает результат в виде серии записей/records. Эти записи хранятся в
так называемом наборе Записей/recordset. Набор записей можно охарактеризовать как род
таблицы в памяти сервера, содержащей данные (записи), и каждая запись подразделяется на
отдельные поля (или столбцы).
Набор данных можно сравнить с таблицей, где каждая запись аналогична ряду таблицы. В
PHP мы может пройти по набору записей с помощью циклов и функции
mysql_fetch_array,
которая возвратит каждый ряд в виде массива.
Следующий код показывает, как использовать
записей:
mysql_fetch_array для прохода по набору
<html>
<head>
<title>Запрос данных из таблицы</title>
</head>
<body>
<?php
// Соединиться с сервером БД
mysql_connect("mysql.myhost.com", "user", "sesame") or die
(mysql_error ());
// Выбрать БД
mysql_select_db("mydatabase") or die(mysql_error());
// SQL-запрос
$strSQL = "SELECT * FROM people";
// Выполнить запрос (набор данных $rs содержит результат)
$rs = mysql_query($strSQL);
// Цикл по recordset $rs
// Каждый ряд становится массивом ($row) с помощью функции
mysql_fetch_array
while($row = mysql_fetch_array($rs)) {
// Записать значение столбца FirstName (который является теперь
массивом $row)
echo $row['FirstName'] . "<br />";
}
// Закрыть соединение с БД
mysql_close();
?>
</body>
</html>
Отображение примера
Обратите внимание, как для каждой записи мы получаем содержимое столбца "FirstName",
печатая $row['FirstName']. Аналогично мы можем получить содержимое столбца "Phone",
печатая $row['Phone'], к примеру.
Порядок набора записей точно такой же, как в таблице в БД. Но в следующем уроке мы
посмотрим, как сортировать набор записей.
Пример 2: Сортировка данных по алфавиту,
хронологически или численно
Часто бывает удобно, когда список или таблица представлены в алфавитном порядке,
хронологически или численно. Такая сортировка легко выполняется в SQL, и синтаксис Order
By ColumnName используется для сортировки содержимого столбцов.
Возьмём SQL-оператор из предыдущего примера:
strSQL = "SELECT * FROM people"
Запись может, например, быть отсортирована в алфавитном порядке по первому имени
людей:
strSQL = "SELECT * FROM people ORDER BY FirstName"
Либо хронологически по дате рождения:
strSQL = "SELECT * FROM people ORDER BY BirthDate"
Сортировка может выполняться по восходящей/ascending или по нисходящей/descending,
добавлением DESC:
strSQL = "SELECT * FROM people ORDER BY BirthDate DESC"
В следующем примере люди сортируются по возрасту:
<html>
<head>
<title>Запросить данные из БД</title>
</head>
<body>
<?php
// Соединиться с сервером БД
mysql_connect("mysql.myhost.com", "user", "sesame") or die
(mysql_error ());
// Выбрать БД
mysql_select_db("mydatabase") or die(mysql_error());
// SQL-запрос
$strSQL = "SELECT * FROM people ORDER BY BirthDate DESC";
// Выполнить запрос (набор записей $rs содержит результат)
$rs = mysql_query($strSQL);
// Цикл по набору записей $rs
while($row = mysql_fetch_array($rs)) {
// Записать значение столбцов FirstName и BirthDate
echo $row['FirstName'] . " " . $row['BirthDate'] . "<br />";
}
// Закрыть соединение с БД
mysql_close();
?>
</body>
</html>
Отображение примера
Попробуйте самостоятельно изменить этот SQL-оператор и отсортировать записи по имени,
фамилии или номеру телефона.
Получение выбранных данных
До сих пор наш SQL-оператор запрашивал все ряды таблицы. Но часто бывает необходимо
установить критерии SQL-запроса для выборки данных, например, если нам нужны только те
ряды, в которых есть телефонный номер или конкретная фамилия.
Скажем, мы хотим запросить из БД людей, имеющих номер телефона "66554433". Это можно
сделать так:
strSQL = "SELECT * FROM people WHERE Phone = '66554433 '"
В SQL имеется шесть операций сравнения:
= равно
< меньше
> больше
<= меньше или равно
> = больше или равно
!= не равно
Кроме того, имеются логические операции:
AND
OR
NOT
См. в Уроке 6 о настройке условий.
В следующем примере мы используем условия для настройки адресной книги.
Пример 3: Адресная книга
В этом примере мы попытаемся скомбинировать многое из уже изученного. Создадим список
имён из БД, где каждое имя будет ссылкой на последующую детальную информацию о
человеке.
Для этого понадобятся два файла - list.php и person.php - с таким кодом:
Код файла list.php
<html>
<head>
<title>Запросить данные из БД</title>
</head>
<body>
<ul>
<?php
// Соединиться с сервером БД
mysql_connect("mysql.myhost.com", "user", "sesame") or die
(mysql_error ());
// Выбрать БД
mysql_select_db("mydatabase") or die(mysql_error());
// SQL-запрос
$strSQL = "SELECT * FROM people ORDER BY FirstName DESC";
// Выполнить запрос (набор данных $rs содержит результат)
$rs = mysql_query($strSQL);
// Цикл по $rs
while($row = mysql_fetch_array($rs)) {
// Иям человека
$strName = $row['FirstName'] . " " . $row['LastName'];
// Создать ссылку на person.php с id-value в URL
$strLink = "<a href = 'person.php?id = " . $row['id'] . "'>" .
$strNavn . "</a>";
// Листинг ссылок
echo "<li>" . $strLink . "</li>";
}
// Закрыть соединение с БД
mysql_close();
?>
</ul>
</body>
</html>
Код файла person.php
<html>
<head>
<title>Запросить данные из БД</title>
</head>
<body>
<dl>
<?php
// Соединиться с сервером БД
mysql_connect("mysql.myhost.com", "user", "sesame") or die
(mysql_error ());
// Выбрать БД
mysql_select_db("mydatabase") or die(mysql_error());
// Получить данные из БД, в зависимости от значения id в URL
$strSQL = "SELECT * FROM people WHERE id=" . $_GET["id"];
$rs = mysql_query($strSQL);
// Цикл по $rs
while($row = mysql_fetch_array($rs)) {
// Записать данные человека
echo "<dt>Name:</dt><dd>" . $row["FirstName"] . " " .
$row["LastName"] . "</dd>";
echo "<dt>Phone:</dt><dd>" . $row["Phone"] . "</dd>";
echo "<dt>Birthdate:</dt><dd>" . $row["BirthDate"] . "</dd>";
}
// Закрыть соединение с БД
mysql_close();
?>
</dl>
<p><a href="list.php">Return to the list</a></p>
</body>
</html>
Отобразить пример
Пример с адресной книгой достаточно прост, но показывает потенциал возможностей при
работе с РНР и базами данных.
Представьте, что БД содержит 10,000 продуктов с детальным описанием. Сделав небольшие
изменения в предыдущие файлы, вы легко создадите каталог продукции с более чем 10,000
страниц при помощи лишь одной базы данных и двух РНР-файлов.
Добро пожаловать в мир огромных вэб-сайтов, которые легко разрабатывать и обслуживать!
Если вы освоили работу с БД, ваши вэб-решения уже никогда не будут прежними.
Урок 21: Удаление данных из БД
В предыдущих двух уроках вы научились вставлять и запрашивать данные из базы данных
(БД). В этом уроке мы узнаем, как удалять записи из БД, что значительно проще, чем вставка
данных.
Удаление данных с помощью SQL
Синтаксис SQL-оператора удаления записей таков:
DELETE FROM TableName WHERE condition
Пример: Удаление записи
При удалении записи можно использовать уникальное поле AutoNumber в базе данных. В
нашей БД это столбец id. Использование этого уникального идентификатора гарантирует, что
удаляется только одна запись. В следующем примере мы удаляем запись, где id имеет
значение 24:
<html>
<head>
<title>Удаление данных из БД</title>
</head>
<body>
<?php
// Соединение с сервером БД
mysql_connect("mysql.myhost.com", "user", "sesame") or die
(mysql_error ());
// Выбор Бд
mysql_select_db("mydatabase") or die(mysql_error());
// SQL-оператор, удаляющий запись
$strSQL = "DELETE FROM people WHERE id = 24";
mysql_query($strSQL);
// Закрыть соединение с БД
mysql_close();
?>
<h1>Запись удалена!</h1>
</body>
</html>
Помните, что не существует никакой "Recycle Bin" при работе с БД и PHP. Если вы удалили
запись, то восстановить её будет невозможно.
Урок 22: Обновление данных в БД
В предыдущих уроках вы научились вставлять, запрашивать и удалять данные в БД. В этом
уроке мы посмотрим, как обновлять БД, т. е. редактировать значения существующих полей
таблицы.
Обновление данных с помощью SQL
Синтаксис SQL-оператора обновления полей таблицы:
UPDATE TableName SET TableColumn='value' WHERE condition
Можно также обновлять несколько ячеек за раз, используя один оператор SQL:
UPDATE TableName SET TableColumn1='value1', TableColumn2='value2'
WHERE condition
С этим набором знаний Уроков 19, 20 и 21 вы должны достаточно легко разобраться, как этот
синтаксис применить на практике. Но мы, конечно, рассмотри это на примере.
Пример: Обновление ячеек в таблице "people"
Следующий код обновляет имя в Donald Duck на D. и меняет телефонный номер на 44444444.
Прочая информация (фамилия и дата рождения) не изменяются. Можете попробовать
изменить другие данные, создав собственные SQL-операторы.
<html>
<head>
<title>Обновление данных в БД</title>
</head>
<body>
<?php
// Соединение с сервером БД
mysql_connect("mysql.myhost.com", "user", "sesame") or die
(mysql_error ());
// Выбор БД
mysql_select_db("mydatabase") or die(mysql_error());
// Построение SQL-оператора
$strSQL = "Update people set ";
$strSQL = $strSQL . "FirstName= 'D.', ";
$strSQL = $strSQL . "Phone= '44444444' ";
$strSQL = $strSQL . "Where id = 22";
// SQL-оператор выполняется
mysql_query($strSQL);
// Закрыть соединение с БД
mysql_close();
?>
<h1>База обновлена!</h1>
</body>
</html>
Этот урок завершает занятия по базам данных. Вы научились вставлять, запрашивать,
удалять и обновлять БД с помощью PHP. Таким образом, вы теперь реально можете
создавать весьма продвинутые и динамичные вэб-решения, где пользователи могут
обновлять и обслуживать БД с применением форм.
Если хотите увидеть навороченный пример PHP с базами данных, попытайтесь вступить в
наше сообщество. Это бесплатно и займёт пару минут. Помимо прочего, вы сможете
обслуживать ваш профиль с использованием полей формы. Может быть у вас появятся свои
идеи...
Здесь учебник заканчивается. PHP даёт вам массу возможностей для добавления
интерактивности на ваш вэб-сайт. Единственное ограничение - ваше воображение. Удачи
вам!
Download