Алгоритмы программирования на РНР

Введение

Целью данного пособия является освоение студентами основ построения удаленных баз данных. Вернее сказать, освоение основ разработки програмной системы, с удаленным доступом эксплуатации.

После освоения курса студент должен иметь представление:

§ о построении систем на базе клиет-сервер;

§ о классе задач, решаемых в среде удаленного доступа;

§ об основных принципах построения систем с удаленным доступом эксплуатации;

§ о языках и програмных средах, используемых в таких системах.

После освоения курса студент должен знать:

§ этапы разработки системы;

§ схему размещения ( локализации) web-систем;

§ основную терминологию предметной области;

§ основной синтаксис трех языков программирования: SQL, HTML и PHP.

После освоения курса студент должен уметь:

§ получать необходимую информацию из дополнительных источников;

§ самостоятельно разработать простую web-систему с использованием БД.

 

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

Создание базы в среде MySQL

Основное достоинство MySQL - это его производительность. MySQL отменно справляется даже с гигантскими объемами данных - его разработчики сознательно отказались от многих функциональных "наворотов" в пользу скорости работы. MySQL - самый популярный в мире SQL-сервер для web-проектов.

Теория создания реляционной базы данных, состоящей из нескольких таблиц была изучена в других дисциплинах. В данном пособии будет представлен пример создания и использования такой базы.

Краткий обзор языка запросов SQL

Основные типы данных

INTEGER Тип данных INTEGER можно сократить до INT. Это просто целое число в заданном диапазоне. Для хранения этого типа данных отводится 4 байта и оно может хранить числа до двух в тридцать второй степени.

FLOAT Это числа с плавающей точкой с обычной точностью (4 байта). Они могут представлять числа в диапазоне от 1.18 на 10 в минус 38 степени до 3.4на 10 в тридцать восьмой степени.

CHAR Тип CHAR используется для хранения строк фиксированной длинны. После ключевого слова CHAR обычно указывается длинна строки, например, CHAR(50) если длинна строки не указана то считается, что длинна равна одному символу. Максимальная длинна поля данного типа равняется 255 символам. Если число переданных в строку символов меньше указанной длинны, то строка будет дополнена пробелами, если больше, то обрезана. При возврате значения пробелы будут удалены из строки.

VARCHAR Тип VARCHAR предназначен для хранения строк переменной длинны. Так же, как и в предыдущем типе данных у VARCHAR задается максимальная длинна строки, например, VARCHAR(30) более длинные строки, переданные в этот столбец, будут обрезаны.

Разница двух описанных типов заключается в том, что по строкам с фиксированной длинной выборка идет намного быстрее. И если Вам важна скорость работы базы данных, то предпочтительно выбирать именно фиксированный тип строки.

TEXT и BLOB Типы полей TEXT используются для хранения более длинных фрагментов текста, чем допускается предыдущими типами. Сокращение BLOB означает большой двоичный объект. Эти два типа одинаковы за исключением того, что в типе BLOB сравнение строк идет с учетом регистра символов, а в типе TEXT без учета регистра.

DATE Тип применяется для хранения дат в формате(гггг-мм-дд)

TIME Хранит время в виде (чч:мм:сс)

С другими типами данных можно познакомиться в дополнительной литературе.

Создание таблиц

Прежде, чем приступить к созданию таблиц, необходимо создать базу данных. Синтаксис его очень прост:

CREATE DATABASE test;

В результате исполнения этого оператора будет создана таблица с названием "test".

Прежде, чем создавать таблицы или выполнять иные действия с вновь созданной базой данных, нужно сообщить СУБД о своем намерение работать с ней. Делается это командой:

USE test;

Теперь база данных "test" выбрана и все действия, которые будут совершены по умолчанию будут относиться СУБД именно к этой базе данных. Подошла очередь создания таблиц. В своей самой простой форме создание таблицы выглядит так:

CREATE TABLE имя_табицы (описание таблицы);

Как видите, начать нужно со слов CREATE TABLE (создать таблицу), затем указать имя таблицы, которую мы хотим создать. Далее в скобочках указать, какие именно столбцы таблицы мы хотим создать.

Обычно все необходимые индексы создаются вместе с таблицами базы данных. Все столбцы, объявленные как PRIМARY КЕУ( первичный ключ таблицы – столбец содержащий уникальные идентификаторы строки ) или КЕУ( внешний ключ таблицы – столбец для связи с другими таблицами базы ), будут индексированы.

Для любого столбца можно объявить NULL либо NOT NULL. данное объявление означает, позволено или нет столбцу содержать значение NULL (или не позволено(NOT NULL)). Объявить для столбца значение по умолчанию можно используя ключевое слово DEFAULT, за которым должно следовать значение которое мы хотим использовать по умолчанию.

Ключевое слово AUTO_INCREMENT используется для генерации порядкового номера при этом генерируемый номер будет на единицу больше, чем текущее значение номера в таблице. Первая созданная в таблице строка будет иметь порядковый номер 1. По вполне понятным причинам, AUTO_INCREMENT может быть применен только к столбцам таблицы содержащим числовой тип данных. В каждой таблице разрешается иметь не более одного столбца AUTO_INCREMENT и он должен быть индексным.

В представленном примере для интернет магазина были разработаны две независимые таблицы. Таблица 1 shop содержит информацию о товаре: номер, наименование, цену, примечание. Таблица 2 users содержит информацию о зарегистрированных пользователях: идентификатор, имя, пароль, электронный адрес.

Таблица 1 shop

Таблица 2 users

Заполнение таблиц

INSERT INTO имя_таблицы (столбец1, столбец2, ...) VALUES('знач1','знач2',...);

Эту команду используют для вставки записей в таблицу. Сначала указывается имя таблицы, в которую нужно добавить информацию. Затем может идти список столбцов, в которые добавляются данные, а в VALUES указываются значения, которые добавляются в таблицу. Можно опустить список полей, если значения добавляются в каждое в том же порядке, в каком определены поля в таблице. Использование команды показано в примере Таблица 3 Вставка строк в таблицу:

 

Таблица 3 Вставка строк в таблицу

Выбор из таблиц

Результатом выбора из таблицы является так же таблица, полная или частичная. В среде MySQL она имеет очень простой вид: на черном фоне – белые символы. Примерно так, как показано ниже:

Выборка всех записей в таблице

SELECT * FROM имя_таблицы;

 

mysql> SELECT * FROM developers;

+-------------+-----------------------+----------------+

| name | email | job |

+-------------+-----------------------+----------------+

| Joe Smith | joesmith@gentoo.org | toolchain |

| John Doe | johndoe@gentoo.org | portage |

| Chris White | chriswhite@gentoo.org | documentation |

| Sam Smith | samsmith@gentoo.org | amd64 |

| Jane Doe | NULL | Outsourced job |

+-------------+-----------------------+----------------+

 

Выборка конкретных записей в таблице

SELECT * FROM имя_таблицы WHERE поле=значение;

 

mysql> SELECT * FROM developers WHERE name = 'Chris White';

+-------------+-----------------------+---------------+

| name | email | job |

+-------------+-----------------------+---------------+

| Chris White | chriswhite@gentoo.org | documentation |

+-------------+-----------------------+---------------+

Выборка конкретных полей

SELECT поле1,поле2,поле3 FROM имя_таблицы [WHERE поле=значение];

 

mysql> SELECT email,job FROM developers WHERE name = 'Chris White';

+-----------------------+---------------+

| email | job |

+-----------------------+---------------+

| chriswhite@gentoo.org | documentation |

+-----------------------+---------------+

Использование MySQL запросов в системе интернет-магазина будет рассмотрено в следующих главах.

Использование языка HTML

HyperText Markup Language (HTML)является стандартным языком, предназначенным для создания гипертекстовых документов в среде WEB. HTML-документы могут просматриваться различными типами WEB-броузеров. Когда документ создан с использованием HTML, WEB-броузер может интерпретировать HTML для выделения различных элементов документа и первичной их обработки. Использование HTML позволяет форматировать документы для их представления с использованием шрифтов, линий и других графических элементов на любой системе, их просматривающей.

Таким образом язык HTML предоставляет возможность разработать графический интерфейс для работы с базой данных. Иначе говоря, уровень представления системы, в данном случае интернет-магазина, осуществляется с помощью страниц, разработанных на HTML. С лексикой языка можно познакомиться в дополнительной литературе. В данном пособии будут разобраны связи HTML и PHP на примерах.

Код первой страницы интернет-магазина выглядит следующим образом Рисунок 1 index.html. Она разделена на два фрэйма в одном столбце. Окно браузера будет разделено на две части по горизонтали – 25% верхняячасть и 75% нижняя. Описание верхней части содержит файл topframe.php, нижней – main.php.

 

Рисунок 1 index.html

 

На использование шрифтов и картинок нет никаких стандартов, поэтому все зависит от вкуса и профессионализма разработчиков. Наполнение фраймов будет рассмотрено в следующей главе, а это внешний вид первой страницы Рисунок 2 Главная страница интернет-магазина.

 

Рисунок 2 Главная страница интернет-магазина

 

Алгоритмы программирования на РНР

Связь HTML и РНР

В следующем разделе будет рассмотрено использование HTML-форм с PHP для ввода данных. Когда Web-сервер встречает последовательность символов <?php, то это служит для него сигналом, что далее следуют команды, а не просто текст, который надо послать браузеру. Сервер продолжает выполнять команды PHP, до тех пор, пока не дойдет до признака конца секции, а именно символов ?>. В примере Рисунок 4 topframe.php использована всего одна секция РНР с единственной функцией, функция будет описана позже.

Таким образом, в HTML документ в любом месте и в любом количестве можно всталять РНР секции. РНР код интерпритируется сервером и передается интернет-браузеру пользователя, как HTML документ. Файлы, содержащие HTML и PHP код имеют расширение ‘.php’.

Синтаксис языка РНР похож на язык «Си», изучаемый в другом курсе. Более подробно с языком РНР нужно познакомиться в дополнительной литературе.

Соединение с сервером

Прежде, чем приступать к работе с базой данных необходимо установить соединение с сервером MySQL. Для этого в языке РНР4.0 предусмотрена функция:

mysql_connect ([string server [, string username [, string password [, bool new_link]]]]).

Возвращает идентификатор ссылки MySQL при успехе, FALSE при неудаче.

mysql_connect() устанавливает соединение с MySQL-сервером. Следующие значения по умолчанию принимаются для для отсутствующих необязательных параметров: server = 'localhost:3306', username = имя пользователя - владельца серверного процесса, password = пустой пароль.

Следующий шаг – это выбор базы.

bool mysql_select_db (string database_name [, resource link_identifier])

Возвращает TRUE при успехе, FALSE при неудаче.

mysql_select_db() устанавливает текущую активную БД на сервере, ассоциированную со специфицированным идентификатором.

Пример выбора базы данных приведен ниже Рисунок 3 dbconnect.php.

 

Рисунок 3 dbconnect.php

Сессии в РНР

Предположим, что у каждого посетителя есть некая область памяти (у каждого - своя), в которую наша программа может что-то записывать и читать. Наша программа не должна заботиться о ней. И все это можно сделать. Эта абстрактная область памяти имеет идеальный интерфейс. Вернее, не имеет его. К примеру, если бы данная область хранилась в файлах, нам надо было бы файлы читать и анализировать. Для записи - надо было бы записывать туда данные в каком-то формате. При хранении в базе данных - нам пришлось в начале программы выполнять SQL-запрос, чтобы извлечь все данные и в самом конце выполнения программы записать их обратно. Все это (затраты на чтение файла или базы данных) - называется интерфейс. Как я сказал, наше общение с базой данных вообще не имеет интерфейса. Это значит, что любые переменные, которые мы пожелаем, будут с некоторого момента считаться областью памяти посетителя. При каждом запуске программы, от разных посетителей, она будет иметь доступ через какие-то переменные только к персональным настройкам.

С помощью чего PHP-процессор различает пользователей? С помощью идентификатора. Он является 128 битным числом. Если человек пришел на сайт впервые и PHP-процессор это видет, то данному посетителю присваивается какое-то случайное число, не присвоенное еще никому. В дальнейшем, при повторном заходе, посетитель будет ассоциирован с его личным числом (идентификатором), из-за чего программе будет предоставлена персональная область памяти.

По умолчанию, PHP хранит все в файлах (в своем формате) и сам достает из них сохраненные данные. После работы каждого скрипта PHP сам все записывает обратно в личный файл из переемнных, помеченных для хранения в сессии.

Старт сессии нужно вызывать в начале каждого РНР файла:

bool session_start (void).

session_start() создаёт сессию (или продолжает текущую на основе session id, переданного через GET-переменную или куку).

На следующем рисунке изображен код верхнего фрэйма стартовой страницы интернет-магазина Рисунок 2 Главная страница интернет-магазина с приветствием и кнопками-ссылками на три другие страницы Рисунок 4 topframe.php.

 

Рисунок 4 topframe.php

После окончания сеанса пользователя нужно закрыть сессию с помощью функции:

bool session_destroy (void)

session_destroy() разрушает все данные, ассоциированные с текущей сессией.

int header (string string [, bool replace])

header() используется для отправки необработанных HTTP-шапок.

В примере, приведенном ниже Рисунок 5 logout.php происходит закрытие сесии и перенапра-вление на страницу main.php.

Рисунок 5 logout.php

 

Пересылка данных из форм

На следующем рисунке изображен код нижнего фрэйма стартовой страницы интернет-магазина Рисунок 2 Главная страница интернет-магазина с двумя ссылками и формой авторизации Рисунок 6 main.php.

 

Рисунок 6 main.php

 

Форма содержит два поля ввода: логин и пароль, и кнопку «Вход». В верхней строке формы описано действие:

action = login.php

Это обозначает, что после нажатия кнопки управление будет передано в файл login.php, а содержимое полей будет сохранено под названием ‘login’ и ‘pass’ соответственно.

Рисунок 7 login.php