4371

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

Лекция

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

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

Русский

2012-11-18

80.5 KB

219 чел.

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>

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


 

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

79915. Виховна година «Хто вам сказав, що я слабка...» 161 KB
  Викладач Ні я жива Я буду вічно жити Я в серці маю те що не вмирає Так писала відома українська поетеса Леся Петрівна Косач. На шлях я вийшла ранньою весною І тихий спів несмілий заспівала Леся Українка пройшла великий шлях перемоги духу над стражданням тіла і проявами буденності життя.
79916. Счастливый случай 1.84 MB
  Все вопросы заданы скорее в шутку. Однако даже самые трудные из этих вопросов все равно предназначены для забавы. Участники быстро отвечают на вопросы. Вы слушайте вопросы Ни пуха ни пера Любой предмет в физике.
79917. Рідна школа, рідна сім’я – тут зростає доля моя… 473 KB
  Посібник містить тести для батьків, які допомагають діагностувати проблеми сімей, виявити характер стосунків, взаєморозуміння між членами родини, дає практичні рекомендації щодо підготовки дитини до школи, кращої її адаптації.
79918. Сценарій виховного заходу «Школа – країна дивовижних мрій» 67 KB
  У школі сьогодні свято Зібралось гостей багато. Розмова дітей А моя мама вчилася в нашій школі. І моя мама працює у нашій школі вчителем. А мій тато шахтар а мій водій а мій програміст Вчитель: Діти тихо тихо Так і є багато ваших батьків вчилися в нашій школі а тепер вони стали дорослі стали батьками...
79919. Страна превратится в пустыню, если семья не станет святыней 45 KB
  Показать учащимся необходимость ценить и уважать свою семью, чтобы обеспечить благополучие и процветание своей страны. Познакомить детей с понятиями «семья», «генеалогия», «генеалогическое древо». Научить учащихся составлять родословную своей семьи. Показать основы для дальнейшего изучения истории поколений.
79920. КЛАССНЫЙ ЧАС ДЛЯ СТАРШЕКЛАССНИКОВ: «СЕМЬЯ — КЛЮЧ К СЧАСТЬЮ» 36.5 KB
  А что же должно быть между двумя молодыми людьми чтобы они захотели создать семью Правильно любовь А что же такое любовь Лично для меня любовь это любовь к моим родителям их я люблю дочерней любовью. Это любовь к моим детям их я люблю материнской любовью. Это любовь к моему мужу его я люблю женской любовью.
79921. Вивчення проблеми сенсу буття та призначення людини на Землі за творами Річарда Баха «Чайка Джонатан Лівінгстон» та Пауло Коельо «Алхімік» 185.5 KB
  Ніколи людині не було байдужим питання про сутність її призначення, місію на Землі. Пошук істини виправдовував зміст життя, приводив до відкриттів, які окриляли, запевняли: не дарма, не дарма... Складався досвід, життєстверджуючий, ґрунтовний. Здавалось би, повтори, доповни своїм.
79922. Гра «Щасливий випадок» 46 KB
  Мета: Показати учням красу та багатство української мови, викликати навички бажання вивчати її, збагачувати її, збагачувати свій словниковий запас; розвивати навички виразного читання, усне мовлення учнів, кмітливість. Виховувати любов і повагу до своєї Батьківщини, свого народу, рідної мови
79923. Початкова школо, прощавай! 60 KB
  Свято відбувається у шкільній залі. Учні четвертих класів вишикувались біля актової зали. Звучить запис фанфар. На середину зали вибігають глашатаї: 1-й глашатай: Слухайте! Слухайте! 2-й глашатай: І не кажіть, що ви не чули! 1-й глашатай: І не кажіть, що ви не бачили!