X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Простая гостевая книга - толчок на идею
alex159
alex159
Topic Starter сообщение 2.2.2013, 0:17; Ответить: alex159
Сообщение #1


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

Для начала разберем порядок работы любой гостевой книги или форума:
  • Генерация формы для отправки сообщения пользователем и вывод уже существующих сообщений из гостевой книги.
  • Ввод пользователем своих данных и текста сообщения. Отправка формы на обработку любому скрипту, который работает на стороне сервера (php, asp, cgi, perl, …)
  • Обработка скриптом введенных данных, проверка этих данных на валидность (правильность).
  • Запись обработанных данных в файл или БД, расположенных на том же сервере, что и скрипт.
  • Вывод сообщения о результатах добавления сообщения.

Теперь разберем каждый этап по отдельности.


Генерация формы
Форма для отправки сообщения пользователя скрипту-обработчику обычно хранится в шаблоне, который в свою очередь расположен в базе данных или в файле. В качестве простого примера можно использовать следующую форму с тремя полями (имя пользователя, e-mail, текст сообщения):
<form name="gbook" target="_self" method="post" action="gbook_add.php">
<table border="1" width="90%" align="center">
    <tr>
        <td width="50%" align="right" valign="top">Ваше имя:&nbsp;</td>
        <td width="50%" align="left"><input type="text" name="username"></td>
    </tr>
    <tr>
        <td width="50%" align="right" valign="top">Ваш e-mail:&nbsp;</td>
        <td width="50%" align="left"><input type="text" name="email"></td>
    </tr>
    <tr>
        <td width="50%" align="right" valign="top">Ваше сообщение:&nbsp;</td>
        <td width="50%" align="left"><textarea name="message" rows="6" cols="37"></textarea></td>
    </tr>
    <tr>
        <td width="50%" colspan="2" align="center"><input type="submit" name="send" value="Добавить сообщение"></td>
    </tr>
</table>
</form>


Вывод уже введенных сообщений
Для вывода сообщения нам понадобиться для начала написать php скрипт, который будет отвечать за вывод сообщений, а так же предопределить будущую структуру файла, в котором будут храниться сообщения пользователей.
Начнем с конца, и напишем структуру файла с сообщениями, назовем его к примеру messages.dat. Каждое сообщение расположено на отдельной строке, а элементы сообщения разбиты с помощью условного разделителя <|-|>:
имя пользователя n<|-|>e-mail пользователя n<|-|>сообщение n<|-|>дата n
...
имя пользователя 2<|-|>e-mail пользователя 2<|-|>сообщение 2<|-|>дата 2
имя пользователя 1<|-|>e-mail пользователя 1<|-|>сообщение 1<|-|>дата 1

Теперь осталось написать простой php скрипт, который будет выводить все записи из файла с сообщениями. В данном php скрипте будет реализован шаблонизированный вывод, т.е. в базовый шаблон сообщения будут подставляться значения переменных:

<?php
$filename = "messages.dat";
$delitmer = "<|-|>";
$shablon = '
<table border="1" width="100%">
    <tr>
        <td width="100%">Имя пользователя: <a href="mailto:%email%">%username%</a></td>
    </tr>
    <tr>
        <td width="100%">%message%</td>
    </tr>
    <tr>
        <td width="100%" align="right">%add_date%</td>
    </tr>
</table>
<br>';


$data = @file($filename);

foreach($data as $val)
{
  list($username, $email, $message, $date) = explode($delitmer, trim($val));
  $tmp_message = str_replace("%username%", $username, $shablon);
  $tmp_message = str_replace("%email%", $email, $tmp_message);
  $tmp_message = str_replace("%message%", $message, $tmp_message);
  $tmp_message = str_replace("%add_date%", $date, $tmp_message);
  echo $tmp_message;
}
?>


Обработка php-скриптом введенных данных и запись их в файл messages.dat
Обработка данных php скриптом заключается в проверке введенных данных (длинны, правильности). Мы будем проверять только длину полученных значений переменных:
  • для имени пользователя – 50 символов
  • для e-mail – 80 символов
  • для сообщения – 500 символов с учетом пробелов

Для повышения безопасности создадим отдельный php-скрипт gbook_add.php, который будет брать все значения из глобальной переменной $_POSTи при этом заменять все опасные HTML и JavaScript теги на их эквиваленты, но безопасные. Вот код этого php скрипта:
<?php
$filename = "messages.dat";
$delitmer = "<|-|>";
$username_limit = 50;
$email_limit = 80;
$message_limit = 500;

if (isset($_POST))
{
    if (isset($_POST['username']) & isset($_POST['email']) & isset($_POST['message']))
    {
         if (((strlen($_POST['username'])>0) & (strlen($_POST['username'])<=$username_limit)) &
            ((strlen($_POST['email'])>0) & (strlen($_POST['email'])<=$email_limit)) &
            ((strlen($_POST['message'])>0) & (strlen($_POST['message'])<=$message_limit)))
            {
                $username = str_replace("rn", "<br>", htmlspecialchars($_POST['username']));
                $email = str_replace("rn", "<br>", htmlspecialchars($_POST['email']));
                $message = str_replace("rn", "<br>", htmlspecialchars($_POST['message']));
                $arr = array($username, $email, $message, date("d.m.Y"));
                $new_message = implode($delitmer, $arr) . "rn";
                $messages_arr = @file($filename);
                $messages_str = $new_message;
                $messages_str .= trim(implode("", $messages_arr));

                $fp = fopen($filename, "w+");
                fwrite($fp, $messages_str);
                fclose($fp);
                echo "<META HTTP-EQUIV="Refresh" CONTENT="2; URL=index.php">";
                echo "Ваше сообщение добавленно!";
            }
            else
            {
                echo "Ошибка!!!<br>Не все данные введенны, либо в одном из полей формы слишком символов.";
            }
    }
}
?>[/size][/font][/color]
[color=#232A4B][font=Verdana, Geneva, Arial, Helvetica, sans-serif][size=3]

Это простейший вариант гостевой книги, написанной на php, который только показывает, по какому именно принципу работает гостевая книга или форум. В данной гостевой книге не реализованы такие важные возможности как защита гостевой от спам-ботов, удаление и редактирование сообщений, разбиение сообщений гостевой книги на страницы...
Готовый Прикрепленный файл  gbook.zip ( 1,91 килобайт ) Кол-во скачиваний: 139

Могу доработать но уже при отдельных условиях.
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
k1on
k1on
сообщение 2.2.2013, 14:47; Ответить: k1on
Сообщение #2


какие файлы, на дворе 2013 год.
имхо, бесполезный набор кода.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alex159
alex159
Topic Starter сообщение 3.2.2013, 10:26; Ответить: alex159
Сообщение #3


Хочу немного не согласиться, начинающие php программисты часто начинаю с написание гостевой книги.
Не все же делать на бесплатной CMS :D


Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыДизайн сайтов, баннеров, разработка логотипов, оформление соц.сетей, простая полиграфия
Старательный новичок предлагает свои услуги
15 Pasica 7234 25.9.2020, 0:18
автор: Pasica
Открытая тема (нет новых ответов) Простая удаленная работа в чате. Лучше не придумаешь
9 Znats 2068 18.2.2020, 11:26
автор: magnet
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыСоздание сайтов любой сложности (фреймворки, CMS), Верстка (адаптивная, простая, лендинг), шаблоны, скрипты, любая задача
21 ZaDrotom 15912 1.7.2019, 0:33
автор: stando82
Горячая тема (нет новых ответов) Верстка (адаптивная, простая, лендинг), шаблоны на любую CMS, скрипты
CMS практически не имеет значения, НЕ дизайнер
73 mmkulikov 95421 18.1.2019, 16:40
автор: mmkulikov
Открытая тема (нет новых ответов) Простая вёрстка недорого, начинающий верстальщик
8 carum_carvi 3161 2.5.2017, 18:35
автор: carum_carvi


 



RSS Текстовая версия Сейчас: 19.4.2024, 2:32
Дизайн