Все материалы предоставлены только с ознакомительной целью
Главная — Статьи — Кодинг — Пишем guestbook
Пишем guestbook
© Cobalt 17.05.2006 статья не оптимизирована
© Cobalt 17.05.2006 статья не оптимизирована
Написать гостевуху просто как два пальца об асфальт. Как ты наверно уже догадался
писать будем на великом и могучем (т.е. на PHP). Наша маленькая тулуза будет
сохранять сообщения от пользователей в базу данных (для этого мы заюзаем MySQL),
и позволять пользователю с ником Admin удалять непонравившиеся посты. Как
видешь сложного ни чего не будет.
Для начала необходимо определиться какие будут храниться данные в базе. После
не долгого размышления не сложно догадатьсмя что понадобиться нам три поля. А
именно: дата, имя юзера и собственно сам текст. Все это мы успешно поместим
в одной таблице, которую назовем book. Кроме этих трех полей нам понядобиться
служебное поле ID с идентификатором поста. Это поле будет иметь свойство
AUTO_INCREMENT. Т.е. оно автоматически будет каждый раз увеличивать свое значение
на единицу.
И так, создадим пустую таблицу в БД. Сделать это необходимо следующей командой:
CREATE TABLE book (ID INT(22) AUTO_INCREMENT,
PDate DATE,
Nick VARCHAR(22),
Post TEXT);
Созданая таким образом таблица будет оправдывать себя лишь только в том случае
если у нас очень маленькая гостевуха и в ней мало постов. А все по тому что
мы не указали тут ключей. Система ключей и индексов позволяет многократно
оптимизировать структуру БД. Выборка из таблицы с индексами осуществляется не
в пример быстрее. Во вторых, я думаю, тебе не хочется чтобы юзеры начали флудить
в твоем творении. Необходимо как-то их ограничить. Например запретить
повторяющиеся посты и ограничить их длинну. Поэтому давайте немного изменим наш
запрос:
CREATE TABLE book (ID INT(22) AUTO_INCREMENT PRIMARY KEY,
PDate DATE,
Nick VARCHAR(22),
Post VARCHAR(255) UNIQUE);
Теперь представь себе как должен выглядеть пользовательский интерфейс твоей
guestbook, и напиши его на HTML. Получиться у тебя (если упростить все и убрать
дизайн) что-то вроде этого:
<form action="" method="POST">
<table align="center">
<tr>
<td> 12.01.2006 Вася Пупкин: </td>
</tr>
<tr>
<td> Клевый сегодня день! </td>
</tr>
<tr>
<td> Ник: <input type="text" name="nick" value=""></td>
</tr>
<tr>
<td><textarea name="post"></textarea></td>
</tr>
<tr>
<td align="center"><input type="submit" name="b_post" value="Отправить"></td>
</tr>
</table>
</form>
Дальше надо заменить повторяющиеся участки кода на PHP. Для этого сначала выберем
все записи из базы данных.
$connect=mysql_connect($host, $user, $pass); // замени на твои значения
mysql_select_db($db); // $db - бд где наша таблица
$sql="SELECT ID, //
Nick, //
Post, //
DATE_FORMAT(PDate,'%d.%m.%Y') as PDate
FROM book // собственно запрос
ORDER BY PDate"; //
$res=mysql_query($sql); // выполняем запрос
$i=0;
while($m=mysql_fetch_assoc($res)){ // пока есть строки в таблице
$mass[$i]=$m; // добавляем строку в массив
$i++;
}
mysql_close($connect);
В итоге в переменной $mass у нас будет массив со всеми постами. Как ты наверное
заметил, этот код упрощен донельзя. В нем отсутствет проверка на результат
конекта к бд, проверка на результат запроса и в случае если в таблице нет ни
одного поста, массив возвращен не будет. Втавлять проверки я предоставлю тебе
самому. Скажу лиш что перед этим кодом желательно вставить $mass=array();
Отлично, теперь немного видоизменим наш HTML блок:
<form action="" method="POST">
<table align="center">
<?php
rsort($mass);
foreach($mass as $m){
print('<tr>
<td> '.$m['PDate'].' '.htmlspecialchars($m['Nick']).':</td>
</tr>
<tr>
<td> '.htmlspecialchars($m['Post']).' </td>
</tr>');
}
?>
<tr>
<td> Ник: <input type="text" name="nick" value=""></td>
</tr>
<tr>
<td><textarea name="post"></textarea></td>
</tr>
<tr>
<td align="center"><input type="submit" name="b_post" value="Отправить"></td>
</tr>
</table>
</form>
Массив с постами отсортирован в порядке возрастания, нам же необходимо чтобы
самые последние посты были вверху. По этому делаем rsort($mass). Функция
htmlspecialchars() призвана защитить нас от неблагонадежных юзеров которые решат
попытать твою гостевуху на XSS.
Теперь сделаем добавление постов. Для этого в самое начало страницы поместим
следующий код:
<?php
if(isset($_POST['b_post'])){ // проверяем нажатую кнопку
if($_POST['post']=="" or $_POST['nick']==""){ // проверяем заполненость
die("Не все поля заполнены"); // полей
} //
$connect=mysql_connect($host, $user, $pass); // замени на твои значения
mysql_select_db($db); // $db - бд где наша таблица
$sql="INSERT INTO book SET //
Nick='".$_POST['nick']."', //
Post='".$_POST['post']."', //
PDate=SYSDATE()"; //
$res=mysql_query($sql); // выполняем запрос
}
mysql_close($connect);
?>
Нам осталось сделать совсем не много. А именно систему удаления "кривых" постов.
Для этого можно создать страницу подобную этой, но с авторизацией. В цикле
вывода постов добавить print('<a href="?del='.$m['ID'].'">Удалить</a>');
и функцию добавления поста заменить на:
<?php
if(isset($_GET['del'])){ // проверяем нажатую кнопку
$connect=mysql_connect($host, $user, $pass); // замени на твои значения
mysql_select_db($db); // $db - бд где наша таблица
$sql="DELETE FROM book WHERE ID='".$_GET['del']."'";
$res=mysql_query($sql); // выполняем запрос
}
mysql_close($connect);
?>
Ну вот собственно и все. Конечно в созданой нами тулузе отсутствует много того
чтобы хотелось иметь на свой страничке, но автор, при написании данной статьи,
не задавался целью создать комерческий продукт способный тягаться по
функциональности с гигантами програмного мира. Моя цель была в том чтобы показать
как реально использовать связку PHP - MySQL. Как известно все начинается с малого,
и смотришь, уже через пару лет ты станешь специалистом по разработке СУБД )
Успехоф тебе в твоем начинании!
© Cobalt 17.05.2006 статья не оптимизирована

linux не говно,при правильном обращении все будет гладко. 1) Для нее не...
Linux vs Windows