4371

Создание динамических сайтов средствами PHP и MySQL

Лекция

Информатика, кибернетика и программирование

PHP и MySQL. Основным достоинством динамических сайтов, по сравнению со статическими, является возможность отделения данных от кода, отвечающего за их визуальное представление. Благодаря такому подходу, можно создавать сайты, формирующие страницы в...

Русский

2012-11-18

80.5 KB

212 чел.

PHP и MySQL.

Основным достоинством динамических сайтов, по сравнению со статическими, является возможность отделения данных от кода, отвечающего за их визуальное представление. Благодаря такому подходу, можно создавать сайты, формирующие страницы в зависимости от запросов посетителей. Однако для того, чтобы создать такой сайт, необходимо организовать хранилище структурированных данных. Это необходимо для того, чтобы программа, формирующая страницы, могла выбирать данные согласно критериям запроса, поступившего от посетителя сайта.

Самым простым способом организации хранилища данных является использование текстовых файлов. Можно хранить данные в одном или нескольких текстовых файлах, а внутри файлов отделять элементы данных друг от друга при помощи символов – разделителей. Такой способ организации данных может быть эффективен при небольшом количестве хранимой и обрабатываемой информации. Однако для того, чтобы оперировать данными, хранимыми в текстовых файлах, необходимо разработать набор подпрограмм для добавления, удаления, модификации и выборки данных. В случае если структура данных будет изменена, подпрограммы управления данными придется переписывать.

Для того чтобы избежать подобных трудностей, можно использовать базы данных. Оперировать данными, занесенными в базу данных (БД), можно при помощи СУБД – системы управления базой данных. СУБД предоставляют интерфейс, при помощи которого можно организовывать базы данных с произвольной внутренней структурой и управлять данными, расположенными в них.

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

Схема работы динамического сайта, использующего в качестве хранилища базу данных:

  1.  Браузер посылает запрос веб-серверу на формирование HTML- страницы
  2.  Веб-сервер запускает интерпретатор PHP для выполнения скрипта, формирующего HTML-страницу
  3.  В процессе работы скрипта осуществляется обращение к базе данных для выборки информации, соответствующей параметрам запроса, посланного браузером
  4.  На основе информации, выбранной из базы данных, PHP- скрипт формирует HTML-страницу
  5.  Веб-сервер возвращает браузеру сформированную HTML-страницу
  6.  Браузер интерпретирует HTML-инструкции, содержащиеся в теле полученной страницы, и выводит ее содержимое на экран монитора

В настоящее время для организации хранилища данных веб-приложений наиболее часто используется СУБД MySQL.

MySQL является компактным и простым в эксплуатации сервером баз данных, доступным для платформ Unix, Windows NT, Windows 9x. При функционировании под управлением ОС Unix СУБД использует потоки, что позволяет создать на базе MySQL высокопроизводительный и хорошо масштабируемый сервер баз данных.

MySQL поддерживает стандарты начального уровня ANSI SQL92 и ODBC. Приложения базы данных могут быть реализованы при помощи популярных языков высокого уровня, таких как C, Perl, PHP и другие. СУБД позволяет оперировать таблицами с суммарным объемом данных до 4 Гбайт.

В PHP реализован набор функций, позволяющих скрипту взаимодействовать с MySQL. Для того чтобы воспользоваться базой данных, необходимо установить соединение между клиентской программой (в данном случае программой, написанной на языке PHP) и сервером MySQL. Установить соединение можно при помощи функции:

mysql_connect("хост[:порт][сокет]", "имя пользователя", "пароль")

Функция получает три входных параметра: хост, имя пользователя и пароль. Хост – имя сервера, на котором установлена СУБД. В случае, если веб-сервер и сервер базы данных работают на одной машине, значение параметра хост имеет значение "localhost". После имени хоста можно так же указать порт и путь к сокету. Это необходимо в случае, если в настройках используются порт и сокет, отличные от установленных по умолчанию.

Имя пользователя – логин пользователя, которому разрешен доступ к СУБД.

Пароль – пароль пользователя, которому разрешен доступ к СУБД.

Функция возвращает идентификатор соединения в случае успеха и значение "ложь" при неудаче. Идентификатор соединения будет использоваться при вызове всех функций, посылающих запросы серверу MySQL.

Если сделать повторный вызов rnysql_connect с теми же аргументами, новое соединение с сервером не будет установлено; будет возвращен идентификатор уже открытого соединения.

Обычно логин и пароль пользователя устанавливаются системным администратором.

После установки для обращения к MySQL достаточно указать в качестве хоста localhost, а в качестве имени пользователя и пароля использовать пустые строки (создание пользователей и раздача прав доступа осуществляется после установки администратором).

После завершения работы PHP-программы соединение будет автоматически закрыто. Однако если возникает необходимость закрыть соединение в процессе работы программы, можно воспользоваться функцией

mysql_close(идентификатор соединения)

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

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

mysql_select_db("имя базы данных",[идентификатор соединения])

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

Создать базу данных можно при помощи функции

mysql_create_db("имя базы данных",[идентификатор соединения])

Другой возможностью для создания новой базы данных является посылка запроса "create database" при помощи функции mysql_query, которая будет рассмотрена ниже.

Удалить базу данных со всем ее содержимым можно при помощи функции

mysql_drop_db("имя базы данных",[идентификатор соединения])

Аналогичного результата можно достигнуть путем посылки sql-запроса "drop database".

Одной из важнейших функций является функция отправки SQL-запроса

mysql_query ("запрос",[идентификатор соединения])

Функция возвращает идентификатор результата. Для команд определения данных, таких как CREATE, ALTER, DROP, идентификатор результата указывает на успех или неудачу при выполнении запроса.

Для команд манипулирования данными, таких как DELETE, INSERT, UPDATE, идентификатор результата позволяет узнать количество обработанных строк.

Для команды SELECT идентификатор результата является указателем на результирующий набор выбранных данных.

Узнать количество записей, выбранных в ответ на запрос, можно при помощи функции

mysql_num_rows (идентификатор результата)

Функция возвращает количество записей в наборе, ассоциированном с идентификатором результата. Следует заметить, что речь идет только об идентификаторе результата, полученного после запроса типа select.

Получить доступ к результатам выборки можно при помощи функций

mysql_fetch_row (идентификатор результата)

mysql_fetch_array (идентификатор результата)

Перечисленные выше функции получают в качестве параметра идентификатор результата. При выполнении функции извлекается одна запись из результирующего набора и возвращается в виде массива. Внутренний указатель автоматически перемещается на следующую запись (результат запроса может содержать более одной записи). В случае, если на момент вызова все записи были пройдены, функция возвращает значение "ложь".

После выполнения mysql_query указатель соответствующего результирующего набора устанавливается на первой записи. Последовательный вызов функции позволяет получить доступ ко всем записям результирующего набора.

Функции mysql_fetch_array и mysql_fetch_row отличаются типом возвращаемого результата:

  •  mysql_fetch_array возвращает ассоциативный массив, названия элементов которого соответствуют названиям столбцов в запросе типа select (и, соответственно, в полученном результате);
  •  mysql_fetch_row возвращает массив, индексированный числами, начиная с элемента 0 (последовательность элементов массива соответствует последовательности их перечисления в запросе).

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

mysql_free_result(идентификатор результата)

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

mysql_error (идентификатор соединения)

Функция возвращает сообщение об ошибке, полученное от сервера в результате предыдущей команды (функции, запроса), связанной с обращением к MySQL. Ошибки, возникающие на сервере MySQL, не вызывают прекращение выполнения сценария.

Рассмотрим пример, иллюстрирующий взаимодействие PHP и MySQL. Проектируемое веб-приложение должно предоставить посетителю сайта возможность заполнить и отправить форму, содержащую поля «Имя» и «Почтовый адрес». Данные, отправленные посетителем должны храниться в базе данных. Для просмотра информации, отправленной пользователями, должен быть реализован отдельный скрипт.

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


Поле

Тип данных

Описание

id

id int not null primary key auto_increment

Идентификатор посетителя

person

varchar(255) not null

Имя посетителя

name

mail varchar(255) not null

Почтовый адрес

База данных будет называться testbase. Для создания базы необходимо запустить входящий в состав СУБД консольный клиент mysql.exe (для OC Windows) и выполнить команду

create database testbase;

Создать таблицу (users), хранящую информацию о посетителях, можно также при помощи клиента, либо написав и выполнив следующий скрипт:

init.php

<?

if (!mysql_connect("localhost","root","")) die("Ошибка соединения");

mysql_select_db('testbase');

mysql_query("create table users(

id int not null primary key auto_increment,

person varchar(255) not null,

mail varchar(255) not null

)");

?>

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

input.php

<html>

<body>

<?

if (isset($ok)) {

if (!mysql_connect("localhost","root","")) die("Ошибка соединения");

mysql_select_db('testbase');

if (trim($person)=='') echo 'Необходимо ввести имя<br>';

elseif (trim($mail)=='') echo 'Необходимо ввести адрес<br>';

else {

$person=addslashes($person);

$mail=addslashes($mail);

mysql_query("insert into users values(NULL,'$person','$mail')");

 echo 'Данные сохранены<br>';

 }

}

?>

<form action="input.php" method="post">

 Имя: <input type="text" name="person"><br>

 Адрес: <input type="text" name="mail"><br>

<input type="submit" name="ok" value="ok">

</form>

</body>

</html>

При первой загрузке страницы отображается форма для ввода данных. При нажатии на кнопку «ok» страница перезагружается. Устанавливается соединение с базой данных. В случае обнаружения пустых полей в форме выводится сообщение об ошибке. Если пустые поля не обнаружены, в таблицу users добавляется новая запись с полученными параметрами и отображается сообщение об успешном добавлении данных.

После выполнения скрипта, вне зависимости от результатов его работы, вновь отображается форма.

Для просмотра записей в таблице реализуется отдельный скрипт.

output.php

<html>

<body>

<?

if (!mysql_connect("localhost","root","")) die("Ошибка соединения");

mysql_select_db('testbase');

$q=mysql_query("select * from users order by person");

while ($r=mysql_fetch_array($q))

echo $r['id'].' '.$r['person'].' '.$r['mail'].'<br>';

?>

</body>

</html>

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


 

А также другие работы, которые могут Вас заинтересовать

17872. Модели олигополии 261 KB
  17 Лекция 11 Тема: Модели олигополии Учебная цель лекции: изложить основные положения олигопольной структуры дать понятия моделей олигопольного поведения оказать содействие развитию у студентов экономического мышления формированию самост...
17873. Монополистическая конкуренция 197.5 KB
  11 Лекция 12 Тема: Монополистическая конкуренция Учебная цель лекции: изложить основные положения теории монополистической конкуренции дать понятия дифференциации экономических благ неценовой конкуренции оказать содействие развитию у студ
17874. Спрос на факторы производства 699.5 KB
  Лекция 13 Тема: Спрос на факторы производства Учебная цель лекции: изложить основные положения теории предельной полезности дать понятия потребностей экономических благ равновесия потребителя оказать содействие развитию у студентов экономического мышлени...
17875. КОРПОРАТИВНАЯ КУЛЬТУРА В МЕЖДУНАРОДНОМ БИЗНЕСЕ 261.5 KB
  Стиль выдерживания международной фирмой этических норм и правил определяет ее репутацию в международной среде, что в свою очередь предоставляет результативность и долговременное решение вопросов приспособления фирмой к внешним условиям международного рынка.
17876. Розробка та вдосконалення агротехнічних прийомів підвищення рівня урожайності та якості плодів гарбуза столового 374.5 KB
  Аналіз виробництва баштанних культур у Херсонській області свідчить, що за останні роки в цій галузі спостерігаються позитивні зрушення. Виробництво продовольчих баштанних повертає свої втрачені позиції і стає прибутковим, хоча досягнуто це було переважно екстенсивними методами (збільшенням посівних площ).
17877. Понятие общего равновесия 224 KB
  Понятие общего равновесия Caeteris paribus или при прочих равных При исследовании частичного равновесия мы рассматривали равновесие отдельного субъекта или рынка делая предположение caeteris paribus или в переводе с латинского языка при прочих равных. Например мы пытал...
17878. Общее равновесие конкурентных рынков 297.5 KB
  Лекция 16 Тема: Общее равновесие конкурентных рынков Учебная цель лекции: изложить основные положения теории предельной полезности дать понятия потребностей экономических благ равновесия потребителя оказать содействие развитию у студентов экономического ...
17879. Провалы государства 565 KB
  Теория провалов государства создана применительно к современным демократическим странам с развитой рыночной экономикой, тем не менее многое в ней (например, теория бюрократии) позволяет глубже понять природу и целевые функции огосударствленной экономики
17880. Фирма и рынок 229 KB
  Лекция 24. Фирма и рынок РАЗДЕЛ 1. Зачем экономике нужна фирма Фирма одно из главных действующих лиц экономической жизни. Мир фирм удивительно многолик. Есть среди них крупные и мелкие; многопрофильные и узкоспециализированные; замыкающиеся на какойлибо одной стад...