Сделаем гостевую книгу своими руками. Для этого нам понадобятся PHP, MySQL
и немного свободного времени. Сообщения будем хранить в базе данных, а
не во внешнем файле. Это позволит упростить задачу и повысить
быстродействие.
Для начала нам необходимо создать базу данных. Назовём её mydb. В ней мы создадим таблицу gost, в которой будут храниться сообщения.
SQL-код для создания базы данных для гостевой книги выглядит так:
create database mydb; use mydb; create table gost (
textid int unsigned not null auto_increment primary key, dt int not null, name char(16) not null, txt text not null
);
Для гостевой книги будем использовать следующую структуру из 3 файлов:
- gst.php – основная программа;
- db.php – сценарий, содержащий функцию для подключения к базе данных;
- units.php – функции, необходимые для работы гостевой книги.
В файле db.php находится одна лишь функция db_connect(), которая устанавливает соединение с MySQL и выбирает базу данных mydb.
В файле units.php размещены функции:
- readgost() – считывает сообщения из базы данных;
- printmessages($n,$r) – выводит оставленные сообщения;
- savegost($UserName,$n,$txt) – сохраняет сообщение в гостевой книге;
- showgostform() – выводит форму отправки сообщения.
Сначала создадим основной файл, который будет вызывать необходимые функции.
Error_Reporting(E_ALL & ~E_NOTICE);
//Подключение модулей
require(‘db.php’); require(‘units.php’);
//Подключение к базе данных
db_connect();
//Считывание сообщений и определение их количества.
$r=readgost(); $n=mysql_num_rows($r);
//Создание коротких имён переменных
$UserName = $HTTP_POST_VARS['username']; $gost = $HTTP_POST_VARS['gost']; $txt = $HTTP_POST_VARS['txt'];
// Если была нажата кнопка отправки сообщения, //сохраняем сообщение в базе данных //и снова считываем сообщения и определяем их количество.
if ($gost==true) { savegost($UserName,$n,$txt); $r=readgost(); $n=mysql_num_rows($r); }
//Выводим количество оставленных сообщений.
echo 'Оставлено '. $n.'сообщение(ий)';
//Выводим оставленные сообщения
printmessage($n,$r);
//Показываем форму отправки сообщений. showgostform(); ?>
В PHP может быть установлен высокий уровень контроля ошибок.
Из-за этого могут возникать предупреждения. Такой режим вывода ошибок
является рекомендуемым. Он будет полезен при отладке скриптов. Однако
для большинства скриптов нет необходимости его устанавливать, и следует
пользоваться более слабым уровнем контроль ошибок. Мы это сделали так:
Error_Reporting(E_ALL & ~E_NOTICE);
Однако рекомендуется использовать следующий способ. В директории со скриптом надо создать файл .htaccess содержащий строчку:
php_value error_reporting 7
Рассмотрим файл db.php
Function db_connect() { //Подключение к MySQL
@ $db = mysql_pconnect('имя_узла','пользователь','пароль'); if (!db) { //соединение не установлено
Echo 'Не удалось установить соединение с базой данных. Пожалуйста, повторите попытку позже.'; return 0; } else { //Выбираем базу данных mydb
$b = Mysql_select_db("mydb"); if (!$b) { //Баз данных не выбрана
Echo 'Не удалось выбрать базу данных. Пожалуйста, повторите попытку позже.'; return 0; } return 1; } } ?>
Теперь пора создавать функции в файле units.db, которые будут выполнять все необходимые действия.
function readgost() { $query = "select * from gost"; $result = mysql_query($query); return $result; }
В переменную $query помещаем SQL-запрос для извлечения всех данных из таблицы gost. Функция mysql_query() выполняет переданные ей команды и возвращает результат.
Теперь рассмотрим, как происходит вывод сообщений. За это, как было ранее сказано, отвечает функция printmessages($n,$r).
function printmessages($n,$r) {
$outprint = array(); for ($i=0; $i <$n; $i++) { $outprint[$n-$i-1] = mysql_fetch_array($r); }
//сортируем как надо
for ($i=0; $i <$n-1; $i++) { for ($j=$i+1; $j <$n; $j++) { $row1=$outprint[$i]; $arr1 = $row1['textid']; $row2=$outprint[$j]; $arr2 = $row2['textid']; if ($arr1<$arr2) { $arr3=$outprint[$i]; $outprint[$i]=$outprint[$j]; $outprint[$j]=$arr3; } } } ?><?php
// Выводим сообщения for ($i=0; $i <$n; $i++) { $row=$outprint[$i]; echo '<br><b>'.($i+1).'. </b>'. date(" d/m/Y H:i:s",stripslashes($row['dt'])). '<b>Отправитель:</b><i>'. htmlspecialchars(stripslashes($row['name'])).'</i>'; echo '<br><b>Текст сообщения:</b><br>'. htmlspecialchars(stripslashes($row['txt'])).'<br>'; }
}
Функция htmlspecialchars() нужна для удаления HTML тегов. Также используется функция stripslashes(). Она восстанавливает специальные символы, которые были отменены функцией addslashes() при сохранении сообщений в базу данных.
function savegost($UserName,$n,$txt) {
//Определяем время
$t = mktime();
//проверяем, были ли заполнены поля формы. //Если да, то сохраняем сообщение.
if (!$UserName) { Echo('Вы не ввели своё имя.'); } elseif (!$txt) { echo 'Вы не ввели текст сообщения.'; } else { //Отменяем специальные символы.
$UserName = addslashes($UserName); $txt = addslashes($txt);
$n++;
//заносим в переменную $query SQL-запрос, //необходимый для сохранения сообщения.
$query = "insert into gost values ('".$n."','".$t."','".$UserName."','".$txt."')"; $result = mysql_query($query); if (!$result) { echo '<p>Извините,'. 'ваше сообщение сохранить не удалось.</p>'; } } }
Теперь перейдём к созданию формы отправки сообщения. За это отвечает функция showgostform().
function showgostform() { ?> <form ACTION="gost.php" METHOD=POST > <FIELDSET STYLE="padding: 10px; width: 300px;"> <LEGEND> Форма отправки сообщения: </LEGEND> Ваше имя : <input type="text" width="400" name="username" ><br> Поле для ввода: <TEXTAREA name = "txt">
<INPUT TYPE="submit" value = "Отправить" name='sub'> <INPUT TYPE="reset" value="Очистить" >
<input type="hidden" value="true" name="gost"> </FIELDSET> </form> <?php }
Источник: http://webstat.ws |