Создать форум бесплатно: ixbb.ru :: Календарь на Апрель 2024 года: calendar2008.ru/2024/aprel/

Страницы: (2) [1] 2  ( Перейти к первому непрочитанному сообщению ) Reply to this topicStart new topicStart Poll

скрипт гостевой на php

, Статья от Дельфиста
DelphiST
  Отправлено: Jul 4 2007, 04:20 AM
Quote Post


  Команда ЭйсВэб
*

Группа: Super moderator
Сообщений: 1093
Пользователь №: 796
Регистрация:
23-May 07



Итак, в этой статье я расскажу вам, как можно буквально за 10 минут создать простенькую файловую гостевую на php. Цель статьи не написать гостевую, а рассказать новичкам, как устроены файловые гостевые/форумы. Данная статья посвящается новичкам в php, бегиннеры не найдут здесь ничего нового. Итак, приступаем.
Каждое сообщение в гостевой должно где-то храниться. На сегодняшний день есть два способа хранения данных: в базах данных или в файлах. Структура каждой гостевой проста: когда пользователь вводит сообщение, php-скрипт обрабатывает его и записывает в файл. Пользователь, добавив сообщение, возвращается на главную страницу и видит своё творение, выведенное php-скриптом из файла. Примерно так работает самая примитивная гостевая. Теперь мы попробуем сами создать такую гостевую.
Сначала мы создаём отдельную папку для гостевой, в ней файлы “index.php”, “addmsg.php” и пустую папку “data”.
В index.php пишете такой код:

<html>
<head><title>ГавноГостевая v.1</title></head>
<body>
<form method="post" action="addmsg.php">
Имя: <input type="text" name="login" id="login" size="20"><br>
E-mail: <input type="text" name="email" id="email" size="20"><br>
Сообщение: <textarea name="msg" id="msg"></textarea><br>
<input type="submit" value="Добавить">
</form>
</body>
</html>
Здесь, я думаю, всё понятно: мы создаём форму ввода сообщения
Дальше мы должны написать скрипт, который добавляет сообщение, а потом, который выводит. Пишем в addmsg.php:

<?php
$msg = htmlspecialchars($_POST['msg']); // Заменяем html-теги на безопасные
$login = htmlspecialchars($_POST['login']);
$email = htmlspecialchars($_POST['email']);

if (strlen($login) < 2) exit ("Логин меньше 2 сиволов!");
/* Если логин меньше 2 символов, то останавливаем скрипт*/

if (!eregi("([[:alnum:]._-]+@[[:alnum:]-]+(\\.[[:alnum:]-]+)*(\\?([[:alnum:]?+&%]*)?)?)", $email) and strlen($email)) exit ("Вы знаете что такое e-mail?");
/* Проверка мыла */

if (strlen($msg) < 5) exit ("Сообщение меньше 5 сиволов!");
/* Если сообщение меньше 5 символов, то останавливаем скрипт */?>

Здесь мы проверяем правильность ввода e-mail, длину логина и сообщения. А как теперь записать всё это вместе: Логин, мыльницу и сообщение? Нужно соединить их вместе в одно сообщение. А как сделать, чтобы потом можно было из этого сообщения извлечь всё это? Никак. Нужно, когда мы связываем данные, поставить перед ними разделитель, например “##” или “::”, а при выведении данных по этому разделителю их разбить. Например, возьмём “::” Но и в этом примере допущена ошибка. Данные то мы разделили, а сообщения нет. Тогда мы возьмём ещё один разделитель: разделитель сообщений, например “;;”.
<?php
$msg = str_replace ("\r\n", "<br>", $msg);
if (!is_file("data/db.php")) fopen("data/db.php", "w"); // Проверяем наличие файла
$file = @file_get_contents("data/db.php"); // Читаем данные
$fd = @fopen("data/db.php", "w");
@flock ($fd, LOCK_EX); // Запираем файл
$separator = "::"; // Разделитель данных в сообщении
$separator2 = ";;"; // Разделитель сообщений в файле
$to = $login.$separator.$email.$separator.$msg.$separator2; // Связываем данные
@fwrite ($fd, $to); // Записываем данные
@fwrite ($fd, $file); // Записываем ранние сообщения.
@flock ($fd, LOCK_UN); // Отпираем файл
@fclose ($fd); // Закрываем файл
header ("location: index.php"); // Уходим на главную
?>
В первой строчке мы заменяем символ перевода строки на html-эквалитент <br>.
Во второй мы проверяем наличие базы данных, если её нету, то создаём её.
В третьей строчке мы получаем данные из базы данных, т.е. ранние сообщения
Четвёртая строчка открывает базу данных, т.е. файл, предварительно затерев его.
Функцией flock($fd, LOCK_UN) мы запираем файл, чтобы никто не мог в него ничего записать, например если два пользователя вместе добавят сообщение, то в результате уничтожатся все данные нашей “базы”.
Далее мы обьявляем разделители ($separator и $separator2).
В переменную $to мы помещаем склеенное сообщение, а в следующей строчке мы записываем её в базу. Далее мы записываем ранние сообщения, т.е. сообщения, которые добавили ранее. Потом мы отпираем файл, закрываем его и уходим на главную страницу. Вас не смущали “собаки” перед функциями? Они обозначают, что если будет сбой, не выдать ошибку. У меня нет возможностей здесь предотвратить все ошибки, экспериментируйте сами. Все! Сообщение добавлено в базу.
Теперь его надо вывести. Единственная проблема: если сообщений много, то страница грузится долго. Тогда нужно разбить сообщения на части во время их вывода. И создать страничную навигацию.
Приступаем. В файл “index.php” после тега “</form>” добавьте следующий код: (разберём его позже)
<?php
if ($_GET['start'] < 0 || !$_GET['start']) $_GET['start'] = 0;
$start = $_GET['start'];
if (!is_file("data/db.php")) fopen("data/db.php", "w"); // Проверяем наличие файла
$file = @file_get_contents("data/db.php");
$separator = "::"; // Разделитель данных в сообщении
$separator2 = ";;"; // Разделитель сообщений в файле
$messages = explode ($separator2, $file); // Разбиваем на сообщения
$pnumber = 10; // Сообщений на страницу

$cnmessages = 0;
for ($i = 0; $i < count ($messages); $i++)
{
$tmp = explode ($separator, $messages[$i]);
if (trim($tmp[2]) != "") $cnmessages++;
}

$pages = ceil ($cnmessages / $pnumber);

for ($i = $start; $i < $start + $pnumber; $i++)
{
list ($login, $email, $msg) = explode ($separator, $messages[$i]);
if ($msg != "") echo "<a href=\"mailto:".trim($email)."\">".trim($login)."</a><br>".$msg."<br><br>";
}
echo "Перейти: ";
for ($i = 0; $i < $pages; $i++)
{
echo "<a href=\"index.php?start=".($i * $pnumber)."\">".($i + 1)."</a>&nbsp;";
}
?>
Всё очень просто: у нас есть переменная $_GET[‘start’], в которой хранится позиция, откуда начинать просмотр сообщений и переменная $pnumber, в которой хранится число, сколько выводить сообщений на страницу. И мы просто в цикле от начала просмотра ($start) до начала просмотра + кол-во сообщений на страницу ($start + $pnumber). А в конце выводятся страницы. Внимательно разберите этот код, в нём очень много полезного для начинающих программимтов.
Вот и написали мы гостевую... Самое главное для вас – понять принцип. Тогда даже форум типа phpBB покажется вам легким. Не останавливайтесь на достигнутом, придумывайте что-то новое.

Написал DelphiST


--------------------
user posted image
PMEmail PosterICQ
Top
DelphiST
Отправлено: Jul 4 2007, 04:22 AM
Quote Post


  Команда ЭйсВэб
*

Группа: Super moderator
Сообщений: 1093
Пользователь №: 796
Регистрация:
23-May 07



http://slil.ru/24589876
Исходник


--------------------
user posted image
PMEmail PosterICQ
Top
Splash
Отправлено: Jul 4 2007, 02:25 PM
Quote Post


  Команда ЭйсВэб
*

Группа: Super moderator
Сообщений: 1167
Пользователь №: 675
Регистрация:
29-April 07



Неплохо!... а главное просто


--------------------
Забавные поздравления в стихах и прозе
PMUsers WebsiteICQ
Top
DelphiST
Отправлено: Jul 4 2007, 02:57 PM
Quote Post


  Команда ЭйсВэб
*

Группа: Super moderator
Сообщений: 1093
Пользователь №: 796
Регистрация:
23-May 07



Тута дело не в красоте, а в том, как устроена система.....
Спасибо!


--------------------
user posted image
PMEmail PosterICQ
Top
Splash
Отправлено: Jul 4 2007, 03:25 PM
Quote Post


  Команда ЭйсВэб
*

Группа: Super moderator
Сообщений: 1167
Пользователь №: 675
Регистрация:
29-April 07



DelphiST дизайн можно всегда свой приделать. Я этим люблю заниматься!


--------------------
Забавные поздравления в стихах и прозе
PMUsers WebsiteICQ
Top
Borsuk
Отправлено: Jul 4 2007, 06:06 PM
Quote Post


  Генерал
*

Группа: Members
Сообщений: 317
Пользователь №: 1017
Регистрация:
30-June 07



Я ток одного не понял, чтоб зайти в ету гостевую надо давать ссылку на index.php ? Или куда ? unsure.gif


--------------------
PMEmail Poster
Top
Borsuk
Отправлено: Jul 4 2007, 06:09 PM
Quote Post


  Генерал
*

Группа: Members
Сообщений: 317
Пользователь №: 1017
Регистрация:
30-June 07



И еще я не понял откуда берется файл /data/db.php unsure.gif
Его надо самому создать или он генерируется сам =\

А и еще, ето написано на php ?


--------------------
PMEmail Poster
Top
DelphiST
Отправлено: Jul 5 2007, 06:09 AM
Quote Post


  Команда ЭйсВэб
*

Группа: Super moderator
Сообщений: 1093
Пользователь №: 796
Регистрация:
23-May 07



Борсук, написано на php, файл db.php создай сам, но содеожимое генерирует гостевая.


--------------------
user posted image
PMEmail PosterICQ
Top
Borsuk
  Отправлено: Jul 5 2007, 11:39 PM
Quote Post


  Генерал
*

Группа: Members
Сообщений: 317
Пользователь №: 1017
Регистрация:
30-June 07



Создать - то мы создали, а как перейти на него?
Я указываю ссылку на своем сайте на index.php а оно предлогает мне скачать файл index.php
Как на сайте указать путь на гостевую что б писать туда сообшения? huh.gif


--------------------
PMEmail Poster
Top
DelphiST
Отправлено: Jul 6 2007, 08:58 AM
Quote Post


  Команда ЭйсВэб
*

Группа: Super moderator
Сообщений: 1093
Пользователь №: 796
Регистрация:
23-May 07



Если ты запускал не с сервера, хренос два он у тебя запустится. На сервере тести... (Денвер подойдёт)


--------------------
user posted image
PMEmail PosterICQ
Top

Topic OptionsСтраницы: (2) [1] 2  Reply to this topicStart new topicStart Poll

 



[ Script Execution time: 0.0276 ]   [ 10 queries used ]   [ GZIP выключен ]