Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Содержание сайт... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Модуль Forms 62798
Создание отчето... 62779
ТЕХНОЛОГИИ ДОСТ... 59322
Пример работы с... 58045
Имитационное мо... 54708
Реклама
Сейчас на сайте
Гостей: 14
На сайте нет зарегистрированных пользователей

Пользователей: 13,071
новичок: virtualight
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Создание последовательности окон и передвижение окон по экрану на Turbo ...
Моделирование интернет кафе на GPSS + Отчет
Изменения контуров и сортировка в двумерном массиве чисел на Turbo Pasca...

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании
Гостевая книга шаг за шагом
Автор: Предводителев Сергей
25 июля 2003 г.

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

Итак, для начала давайте определимся, что мы будем писать. В итоге мы должны получить гостевую книгу со следующими свойствами:
Посетитель обязательно должен ввести своё имя и сообщение, и по желанию свой e-mail и адрес домашней странички.
Разбиение на страницы.
Наша гостевая книга должна работать с register_globals = Off.
Все записи хранятся в обычном текстовом файле (т.е. нам не потребуется база данных).
Гостевая книга состоит из одного файла.

Примечание. Всё нижеследующее было протестировано на PHP 4.3.0.

С задачами вроде определились, теперь давайте разберёмся как у нас всё будет выгдядеть. Форма и записи будут выводится на одной странице. Наш файл будет называться gb.php. Напишем код формы. У меня получилось вот что:

<form action="gb.php" method="post">
<table width="500" cellpadding="2"
cellspacing="0" style="border: 1px solid rgb(0, 75, 151);" bgcolor="#d7ecff">
<tbody><tr>
<td align="right">
* Имя:
</td>
<td align="left">
<input type="text" name="msg_from" maxlength="40" size="30">
</td>
</tr>
<tr>
<td align="right">
E-Mail:
</td>
<td align="left">
<input type="text" name="msg_mail" maxlength="40" size="30">
</td>
</tr>
<tr>
<td align="right">
** URL:
</td>
<td align="left">
<input type="text" name="msg_url" maxlength="40" size="30">
</td>
</tr>
<tr>
<td align="right">
* Сообщение:
</td>
<td align="left">
<textarea cols="45" rows="7" name="msg_message"></textarea>
</td>
</tr>
<tr>
<td align="center" colspan="2">
<input type="submit" name="msg_submit" value="Добавить">
<input type="reset">
</td>
</tr>
<tr>
<td align="center" colspan="2">
* Поля обязательные для заполнения<br>
** url вводить без http://
</td>
</tr>
</tbody></table>
</form>


Теперь разберёмся с основными настройками нашей гостевой книги:
//---------- Настройки GB ----------//
$file_gb = "c:/HTTP/CoderPRO/site/gb.dat"; // файл где хранятся записи GB
$max_rec = 128; // максимальное количество записей в файле
$rec_page = 6; // количество записей выводимых на одной странице
//----------------------------------//

Напишем код заголовка нашей страницы:

<html><head>
<title>..:: Гостевая книга ::..</title>
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<body>
<div align="center"><h1>Гостевая книга</h1></div>

Строчки с META нужны для того, чтобы наша страница не кэшировалась. Первая строчка говорит браузеру, что страницу кэшировать не надо, а вторая - если браузер не понимает первый параметр Pragma, что время хранения нашей страницы в кэше - 0 сек.

Теперь приступим собственно к программированию. Для начала напишем функцию проверки введённых данных:
// Проверка введённых данных //
function test() {
global $HTTP_POST_VARS;

if (!isset($HTTP_POST_VARS['msg_from'], $HTTP_POST_VARS['msg_mail'],
$HTTP_POST_VARS['msg_url'], $HTTP_POST_VARS['msg_message'])) {
echo "<p align=\"center\">Ошибка при передачи параметров к скрипту!
Обратитесь к администратору сайта.</p>\n";
return(false);
}
if (trim($HTTP_POST_VARS['msg_from'])=="") {
echo "<p align=\"center\">Вы не ввели своё имя. Повторите ввод.</p>\n";
return(false);
}
if (trim($HTTP_POST_VARS['msg_message'])=="") {
echo "<p align=\"center\">Вы не ввели сообщение. Повторите ввод.</p>\n";
return(false);
}
return(true);
} // test()
$HTTP_POST_VARS - это массив содержащий все ключи и значения переданные методом POST (работает при register_globals = Off). Сначала в функции проверяется всё ли было передано, а затем были ли заполнены обязательные поля Имя и Сообщение. Конечно, можно ещё сделать проверку на корректность введённого e-mail и url и много чего ещё, но это уже если вам хочется, то делайте сами, а мы не будем на этом заморачиваться и пойдём дальше.

Рассмотрим как у нас будут хранится записи в файле. В одной строке файла - одна запись в следующем формате:

Имя|E-Mail|URL|Дата и время добавления|Сообщение

Перед добавлением записи мы должны немного подредактировать данные. Как можно заметить, для разделения частей записи мы используем знак |, значит наши данные не должны содержать этот знак - мы заменим его на аналог в html-коде: &brvbar;. Далее мы должны проверить длину сообщения, и если она больше некоторой величины (например более 1000 символов), то обрезать сообщение до нужной длины. Затем конвертируем все специальные символы в мнемоники HTML (функция htmlspecialchars). И наконец, заменим все переносы строк в сообщении на <br> и отформатируем данные в нужном нам формате для записи в файл. Конечно и здесь можно сделать ещё кучу всяких прибамбасов, но это мы оставим для самостоятельный работы и будем делать нашу гостевуху дальше. Итак строку для записи в файл мы сформировали и теперь её надо добавить в файл, при этом не привысив лимит количества записей в файле (вспомните настройки нашей страницы: $max_rec = 128;). Что-то я много пишу,а кода не видно: Вот вам наша функция добавления записи в файл:
// Функция добавления записи //
function add() {
global $max_rec;
global $file_gb;
global $HTTP_POST_VARS;

$recs = @file($file_gb) or $recs = array();

$from = $HTTP_POST_VARS['msg_from'];
$mail = $HTTP_POST_VARS['msg_mail'];
$url = $HTTP_POST_VARS['msg_url'];
$message = $HTTP_POST_VARS['msg_message'];

$from = str_replace ("|", "&brvbar;", $from);
$mail = str_replace ("|","&brvbar;",$mail);
$url = str_replace ("|","&brvbar;",$url);
if (strlen($message)>1000) $message=substr($message,0,1000);
$message = htmlspecialchars($message, ENT_QUOTES);
$message = str_replace("|","&brvbar;",$message);
$message = trim($message);
$message = ereg_replace ("
", "<br>", $message);

array_unshift ($recs,"$from|$mail|$url|".date("d M Y, H:i")."|$message\n");
if (count($recs)>$max_rec) $recs=array_slice($recs,0,$max_rec);
$count = count($recs);
$f = fopen ($file_gb, "w");
for ($i=0; $i<$count; $i++) {
fwrite($f,$recs[$i]);
}
fclose($f);
} // add()

$recs - это массив с записями. Если файл $file_gb существует, то с помощью функции file() мы присваиваем каждую строчку файла одному элементу массива, в противном же случае $recs - пустой массив. Далее идёт редактирование данных описанных выше. Затем с помощью функции array_unshift() добавляем в начало записей нашу запись. Далее следует проверка на количество записей, и если количество больше нужного, то с помощью функции array_slice() мы выделяем первые элементы в нужном нам количестве. Ну и, наконец, записываем наши записи в файл.

Итак, функции для добавления записей мы сделали, теперь нужно сделать функцию для постраничного вывода данных на экран. В принципе в выводе данных ничего сложного нет, считали запись - вывели в соответствии с дизайном и всё, но ведь мы хотим сделать вывод постраничным - вот в этом как раз и может возникнуть сложность. Итак приступим: Сначала я приведу код функции view(), а потом мы его разберём.
// Функция вывода записей //
function view() {
global $file_gb;
global $HTTP_GET_VARS;
global $rec_page;

if (file_exists($file_gb)) {
$messages = file($file_gb);
$count = count($messages);
if ($count>$rec_page) {
nav_page(ceil($count/$rec_page), (isset($HTTP_GET_VARS['page']) ?
$HTTP_GET_VARS['page']: 1),"gb.php?page=");
echo "<br>";
}
$num_page=1;
if (isset($HTTP_GET_VARS['page'])) {
if (($HTTP_GET_VARS['page']>0) and
($HTTP_GET_VARS['page']<=ceil($count/$rec_page)))
$num_page=$HTTP_GET_VARS['page'];
}
for ( $i=($num_page-1)*$rec_page; $i<=(($num_page*$rec_page<$count) ?
$num_page*$rec_page-1: $count-1); $i++) {
$tmp = explode("|",$messages[$i]);
echo "<table class=\"text_info\" border=\"0\" width=\"100%\">\n";
echo "<tr class=\"sel_p\">\n";
echo "<td>\n";
echo "<b>От:</b><br>";
if ($tmp[2]<>"") echo "<b>URL:</b><br>";
echo "<b>Дата:</b>\n";
echo "</td>\n";
echo "<td class=\"text_info_sel\" width=\"100%\">\n";
echo $tmp[0];
if ($tmp[1]<>"") { echo " | <a href=\"mailto:".$tmp[1]."\">".$tmp[1]."</a>"; }
echo "<br>";
if ($tmp[2]<>"") echo "<a href=\"http://".$tmp[2]."\">".$tmp[2]."</a><br>";
echo $tmp[3]."\n";
echo "</td>\n</tr>\n";
echo "<td colspan=\"2\"><br>\n";
echo $tmp[4];
echo "</td>\n</tr>\n</table>\n";
echo "<br>";
} // for
if ($count>$rec_page) { nav_page(ceil($count/$rec_page),
(isset($HTTP_GET_VARS['page']) ? $HTTP_GET_VARS['page']: 1),"gb.php?page="); }
echo "<br>";
} else {
echo "<center>Записей нет. Вы можете быть первым ;)</center><br>\n";
}
} // view()

Глобальные переменные: $file_gb - файл с записями, $rec_page - количество записей выводимых на одну страницу - эти переменные мы определили в самом начале в настройках нашей гостевой книги. А вот $HTTP_GET_VARS - это массив содержащий все ключи и значения переданные методом GET, т.е. через URL (работает при register_globals = Off) - это нам понадобится, т.к. номер страницы мы будем передавать как раз через URL. Разберёмся, что же делает наша функция. Сначала выполняется проверка - есть ли файл с записями - и если есть, то выполняется работа по выводу записей, а если нет файла, то выводится сообщение, что записей нет. Итак, если всё нормально и у нас есть файл с записями, то с помощью функции file() мы создаём массив строк файла $messages, а переменной $count присваиваем кол-во элементов полученного массива, т.е. количества записей. Далее идёт выполняется вывод навигации страниц и сами записи в соответствии с нужной страницей. В частности мы используем функцию nav_page, я приведу лишь её код.
// Функция вывода навигации по страницам //
function nav_page(
$count, // Общее кол-во страниц
$num_page, // Номер текущей страницы
$url // Какой URL для ссылки на страницу
// (к нему добавляется номер страницы)
) {

$page_nav = 3; // сколько страниц выводить одновременно

$begin_loop=1; // начальное значение в цикле
$end_loop=$count; // конечное значение в цикле
echo "<div align=\"center\">[ Страницы ($count):";
// Проверка на корректность номера текущей страницы
if ($num_page>$count or $num_page<1) $num_page=1;

// Далее в функции идёт сам вывод навигации, получено здесь всё опытным путём
if ($num_page>$page_nav) {
echo " <a href=\"$url".($page_nav*(floor($num_page/$page_nav)-
($num_page%$page_nav==0 ? 1: 0)))."\">(".($page_nav*(floor($num_page/$page_nav)-
1-($num_page%$page_nav==0 ? 1: 0))+1)."-".($page_nav*(floor($num_page/$page_nav)-
($num_page%$page_nav==0 ? 1: 0))).")</a> ...";
$begin_loop=$page_nav*(floor($num_page/$page_nav)-($num_page%$page_nav==0 ? 1: 0))+1;
}
if ($count>$page_nav*(floor($num_page/$page_nav)-($num_page%$page_nav==0 ? 1: 0)+1)) {
$end_loop=$page_nav*ceil($num_page/$page_nav);
}
for ($i = $begin_loop; $i <= $end_loop; $i++) {
if ($i==$num_page) echo "&nbsp; <b>$i</b>";
else echo "&nbsp; <a href=\"$url$i\">$i</a>";
} // for
if ($count>$page_nav*(floor($num_page/$page_nav)-($num_page%$page_nav==0 ? 1: 0)+1)) {
echo "&nbsp;&nbsp;... <a href=\"$url".($page_nav*ceil($num_page/$page_nav) + 1).
"\">(".($page_nav*ceil($num_page/$page_nav) + 1);
if ($page_nav*ceil($num_page/$page_nav)+1<$count) {
echo "-".($count<=$page_nav*(ceil($num_page/$page_nav)+1) ?
$count: $page_nav*(ceil($num_page/$page_nav)+1));
}
echo ")</a>";
}
echo "&nbsp;&nbsp;]</div>\n";
} // nav_page()

Описывать я этот кусок не буду, вы можете прочитать об этом в моей статье постраничный вывод, где всё это подробно описано. Здесь я опишу только то, как мы выводим записи. Мы имеем цикл, в котором начальное и конечное значение $i - изменяется в зависимости от страницы, которую мы хотим отобразить. В цикле мы из элемента массива $messages[$i] создаём массив $tmp с помощью функции explode, которая разбивает строку на строки по границам образованными сепаратором |. Т.е. мы получаем массив в котором 0-й элемент - Имя, 1-й - e-mail, 2-й - url, 3-й - дата и время добавления, 4-й - само сообщение. Ну а дальше мы выводим нашу запись так как хотим.

Вот мы и написали все необходимые функции для гостевой книги, осталось только написать код который будет выполняться в начале, т.е. будет выбирать, какую функцию запустить. Вот он:
if (isset($HTTP_POST_VARS['msg_submit'])) { if (test()) add(); }
view();
Думаю ничего сложного в нём нет и вы сами разберётесь что куда :)
Опубликовал Kest November 06 2008 00:41:40 · 0 Комментариев · 12730 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Просмотр коммент...
FormShape [Исходн...
Расширенный загру...
Функции Visual Basic
DS_Group
ИНТЕРНЕТ ПРОГРАММ...
Web Регистрация
PHP: обучение на ...
DemoEdit [Исходни...
Socoban
WAP версия сайта
GamesBase 3.0
DelTrayIcon [Исхо...
Интерактивный инт...
BSButton
C++ Стандартная б...
Просмотр файлов и...
De Knop
CoolControls v3.0...
Программирование ...

Топ загрузок
Приложение Клие... 100421
Delphi 7 Enterp... 84916
Converter AMR<-... 20061
GPSS World Stud... 11952
Borland C++Buil... 11404
Borland Delphi ... 8368
Turbo Pascal fo... 7007
Visual Studio 2... 4984
Калькулятор [Ис... 4622
FreeSMS v1.3.1 3529
Случайные статьи
Активная реклама с...
Ликбез по meta-тег...
Оповещения SNMP, с...
Связывание текстов...
Типы данных
Программы-генераторы
СОЗДАНИЕ SPLASH-ФО...
Проблема ввода-выв...
Кузовной ремонт в ...
Разработка микропр...
Наследование
Файл записей (назв...
Это разрешение буд...
Объекты, свойства ...
Компьютерная арифм...
Не оценивайте эксп...
HACK F.A.Q
3. Драйвер IPSec п...
компьютеров:: если...
Ввод-вывод объекто...
Как модифицировать...
Недвижимость в Чите
Задание параметров...
OpenGL. Шесть куби...
и оставить только ...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?