$38.87


$529.72


$21.52


Форум без базы данных за 15 минут

<?
/*
Полноценный форум без базы данных.

Версия 1.0
Автор: StagnantIce aka Loser

Этой статьей я хочу показать, что можно обойтись без баз данных,
написав неплохой форум. Это статья является как бы продолжением двух предыдущих.

И так, поехали:

forum.htm

Этот файл вставляется в файл index.php, который будет описан позже.

Можно вставить уже готовый дизайн в этот файл при помощи include. Как это делается, читайте в статье “Свой движок за 15 минут” часть 1.

Сначала описываем форму для ввода нового сообщения,
при нажатии кнопки методом GET будет передано в скрипт addtext.php

значения наших переменных
*/
?>
<form method=«GET» action=«addtext.php»>
<?

/*
Если global constans в PHP равен false, то берем переменную
list из массива, это переменная поможет нам показывать страницы форума
*/

$list=$_GET[«list»];

//Если сессии этого пользователя нет, то выводим поле для ввода логина
if (empty($_SESSION[«username»]))
echo «Имя: <input type=text name=«nik»><br>»;

else $log=« от ».$_SESSION[«username»];
?>
<br><br>Сообщение<?echo $log;?>:
<br><table cellpadding=5 width=100%><tr>
<td width=20% style=«border:1px #CCCCCC solid» align=center>&nbsp;</td>

<td style=«border:1px #CCCCCC solid» width=80% class=«text» valign=top>

<textarea cols=60 rows=6 name=«text»></textarea><br><br>

<input type=«submit» value=«Добавить» align=right></td></tr></table>
</form>
<?
/*
Выше мы объявили нашу таблицу для ввода сообщения,

style=«border:1px #CCCCCC solid» — текст CSS, чтобы рамочка была серой,
шириной 1, и была solid, то есть сплошной линией, можно установить
dashed — пунктиром, смотрите в любом мануале по CSS

в первом столбце ничего не буден написано, на самом деле, в сообщения мы будем туда заносить аватор и другую информацию.

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

Дело в том, что пользователей мы как бы регистрировали в базе данных,
и мы можем доставать их URL к аваторам и другую информацию о них. Там будут находиться и их статусы. Если не хотите писать с базами данных, то
не создавайте файл config.php. Ничего страшного не произойдет.

/*

config.php

<?
/*
Статусы пользователей
*/
$stat[0]=«Гость»;
$stat[1]=«Пользователь»;
$stat[2]=«Модератор»;
$stat[3]=«Администратор»;
/*
Параметры подключения к базе данных
Если флаг $hh=0, то мы находимся на localhost, если
на $hh=1 то на сервере. Когда вы загрузите форум на сайт,
$hh должно быть =1
/*
$hh=0;
if ($hh==1)
{
$dbase=«****»; // Имя базы данных
$host=«database»; // Хост базы, database для holm
$login=«****»; // Логин
$passw=«****»; //Пароль
}
else
{
$dbase=«base»; //Имя базы данных на вашем компьютере
$host=«localhost»;
$login=«root»;
$passw=«»;
}
?>

*/

if (file_exists(«forum.txt»)) $f=file(«forum.txt»);
else {$r=fopen(«forum.txt»,«w»);fclose($r);}
if (file_exists(«config.php»)) require_once(«config.php»);

//Если не знаем страницу, считаем, что открываем первую
if (empty($list)) $list=1;

for($i=sizeof($f) — 1-($list — 1)*8*3;($i>sizeof($f) — 1-$list*8*3)&&($i>0);$i=$i — 3)
{
//Достаем из файла 8 последних сообщений

$text=substr($f[$i],0,strlen($f[$i]) — 2);
$nik2=substr($f[$i — 1],0,strlen($f[$i — 1]) — 2);
$date=substr($f[$i — 2],0,strlen($f[$i — 2]) — 2);

/*

Ищем пользователей в базе
Если переменной $host нет,
то есть вы не создали config.php то
пользователей мы не будем искать. Они будут все Гости.

*/
if (isset($host))
{

$db = mysql_connect($host, $login, $passw);
mysql_select_db($dbase,$db) or error(3);
$res = mysql_query(«SELECT * FROM users WHERE logi=«$nik2»»,$db);
if (mysql_num_rows($res)>0) {$file=mysql_result($res,0,«avat»);
$st=mysql_result($res,0,«stat»);
}
else {$file=«images/none.jpg»;$st=0;}

}
/*
Создайте картинку для всех пользователей, кто Гость в папке images
с именем none.jpg
*/
if (empty($file)) $file=«images/none.jpg»;

// Ну а теперь выводим список наших сообщений в файле.

?>
<table cellpadding=5 width=100%><tr>
<td width=20% bgcolor=«#dde1f3» style=«border:1px #CCCCCC solid» align=center>
<img width=100 height=100 style=«border:1px #CCCCCC solid» src=«<?echo $file;?>»>
<br>
<?
/* вставили картинку, теперь добавим автора в сообщение.

Сделаем это ссылкой на скрипт. Скрипт дает информацию о пользователе.
*/
?>

<a href=«getinfo.php?nik=<?echo $nik2;?>»><?echo $nik2.«</a>
<br>
<?
/*
Выводим сообщение пользователя и его статус.
*/
?>

Статус: ».$stat[$st].«<br><br>Был(а) здесь<br> ».$date;?></td>
<td style=«border:1px #CCCCCC solid» width=80% valign=top>
<?echo $text;?><br><br>&nbsp;&nbsp;&nbsp;

<?
/*
Выводим ссылку “ответить”, при нажатии которой, появляется форма
для добавления ответа на сообщение. Вызывается скрипт otvet.php
*/

?>

<a onClick=«document.getElementById(«f<? echo $i;?>»).style.display=«block»;»>Ответить</a>
<form style=«display:none» method=«POST» id=«f<? echo $i;?>» action=«otvet.php?id=<? echo $i;?>»>
<textarea name=«t» cols=40 rows=3></textarea>
<br><input type=submit value=«Ответить»></form>
</td></tr></table>
<?
}

/*
Выводим список URL к другим страницам.

*/

echo «Страница »;
$k=1;
for ($i=sizeof($f) — 1;$i>0;$i=$i — 3*8,$k=$k+1)
if ($list!=$k)echo «<a href=«index.php?go=forum&list=».$k.«»>».$k.«</a> »; else echo «<u>».$k.«</u> »;
?>
<br>

Теперь приведу Пример файла index.php. И главных скриптов
addtext.php
otvet.php
для добавления нового сообщения и ответа на сообщение соответственно.

Если у вас возникнут вопросы, рекомендую прочитать статью “Свой движок за 15 минут”.

addtext.php
Скрипт добавляет, ник, сообщение и дату, после каждого поля ставит
Enter

<?
$text=$_GET[«text»];
$nik=$_GET[«nik»];
$br=chr(13).chr(10);
session_start();
if (isset($_SESSION[«username»])) $nik=$_SESSION[«username»];
else $nik=«Гость ».$nik;
$text=stripslashes($text);
$text=ereg_replace(«\«»,«&quot;»,$text);
$text=ereg_replace(«!»,«&#33;»,$text);
$text=ereg_replace(«\r»,«»,$text);
$text=ereg_replace(«%»,«&#37;»,$text);
$text=ereg_replace(«^ +»,«»,$text);
$text=ereg_replace(« +$»,«»,$text);
$text=ereg_replace(« +»,« »,$text);
$text=ereg_replace(«\n»,«<br>»,$text);
$dd=date(«d M в h:i»,time());
$fe=fopen(«forum.txt»,«a»);
fputs($fe,$dd.$br.$nik.$br.$text.$br);
fclose($fe);
Header («Location: index.php?go=forum»);
?>

otvet.php
Этот скрипт прибавляет к существующему уже сообщению еще строчку
с тегами, получается как бы ответ на это сообщение, хотя
по правде это одно и тоже сообщение в строчке.

<?
session_start();
$id=intval($_GET[«id»]);
$t=$_POST[«t»];
$dd=date(«d M в G:i»,time());
$br=chr(13).chr(10);
if (isset($_SESSION[«username»])) $nik=$_SESSION[«username»];
else $nik=«Гость »;
$f=file(«forum.txt»);
$rr=substr($f[$id],0,strlen($f[$id]) — 2);
$l=$rr.«<br><span style=»color: #000000; font-family: Verdana, Arial, Helvetica; font-size: 10px;«><b>».$nik.«</b> (».$dd.«): ».$t.«</span>».$br;
$temp = tmpfile(); //Создание временного файла
for ($i=0;$i<sizeof($f);$i++)
if ($i!=$id) fwrite($temp, $f[$i]); else fwrite($temp, $l);
//Если это наше сообщение пишем ответ, а теперь пишем новый forum.txt
$fe=fopen(«forum.txt»,«w+»);
fseek($temp, 0);
while (!feof($temp))
{
$k=fgets($temp);
fwrite($fe,$k);
}
fclose($fe);
Header («Location: index.php?go=forum»);
?>

Сразу оговорюсь, при вводе сообщений нет проверки на ввод скрипта, а не текста,
нужно проверить, что не вводятся символы <,> например, можно написать
функцию для проверки каждого поля, назовем ее correct().

function correct($f)
{
for ($i=0;$i<strlen($f);$i++)
if (substr($f,$i,1)==«<» || substr($f,$i,1)==«>») die(«ошибка ввода»);
}

addtext.php версия 2

<?

function correct($f)
{
for ($i=0;$i<strlen($f);$i++)
if (substr($f,$i,1)==«<» || substr($f,$i,1)==«>») die(«ошибка ввода»);
}

$text=$_GET[«text»];
$nik=$_GET[«nik»];

correct($text);
correct($nik);

$br=chr(13).chr(10);
session_start();
if (isset($_SESSION[«username»])) $nik=$_SESSION[«username»];
else $nik=«Гость ».$nik;
$text=stripslashes($text);
$text=ereg_replace(«\«»,«&quot;»,$text);
$text=ereg_replace(«!»,«&#33;»,$text);
$text=ereg_replace(«\r»,«»,$text);
$text=ereg_replace(«%»,«&#37;»,$text);
$text=ereg_replace(«^ +»,«»,$text);
$text=ereg_replace(« +$»,«»,$text);
$text=ereg_replace(« +»,« »,$text);
$text=ereg_replace(«\n»,«<br>»,$text);
$dd=date(«d M в h:i»,time());
$fe=fopen(«forum.txt»,«a»);
fputs($fe,$dd.$br.$nik.$br.$text.$br);
fclose($fe);
Header («Location: index.php?go=forum»);
?>

index.php

<?
session_start();
echo «<a href=»index.php?go=forum»>Форум</a>»;
$go=$_GET[«go»];
if ($go==«») $go=«main»;
$file=«htm/».$go.«.htm»;
if (file_exists($file))
include($file);
else
echo «Файл ».$file.« не найден»;
?>

Все файлы работают, было проверено.

Вот и все что я хотел поведать, спасибо за внимание.

 

Интересное

Assembler. Введение
Микропроцессоры корпорации Intel и персональные компьютеры на их базе прошли не очень длинный во времени, но значительный по существу путь развития, на протяжении которого кардинально изменялись и...
Подробнее...
Требования к CMS в эпоху...
По поводу перспектив Веб 2.0 существует множество мнений и часто диаметрально противоположных, однако едва ли кто-либо станет спорить с тем, что эта концепция заметно сказалась на современном...
Подробнее...
Delphi и Flash. Совмещение...
Разве возможно совместить Флэш-ролики и Дельфи-приложения. Раньше я думал что НЕТ. Но теперь я знаю не только, что это возможно, но и знаю как это делается!!! И сейчас я вам расскажу об этом....
Подробнее...
Утилиты Windows XP
Локальные параметры безопасностиПолитика паролей, учетных записей пользователей, назначение прав пользователей, параметры безопасности и другое.Оснастка консоли secpol.mscГрупповая политика...
Подробнее...
Теплица дачная 2дум Теплица дачная дачная 2 Дум.
Windows нужно поучиться у...
С каждым новым выпуском Windows, в систему добавляются новые возможности, новые фрагменты кода и увеличивается её размер. Это следствие, вытекающее из закона Мура, которое использует Гейтс при...
Подробнее...
Продлеваем жизнь Windows XP
<img src=«http://i-faq.ru/uploads/posts/2007-09/1190884587_computer.jpg» align=«left» style=«border: none;» alt=«Продлеваем жизнь Windows XP» />Windows Vista можно назвать яркой и новой, но...
Подробнее...
Стоит ли самому собирать...
Недавно в одном уважаемом компьютерном издании довелось прочитать в статью о том, как самому собрать себе компьютер. В этой статье был ряд полезных советов на тему выбора монитора, материнской...
Подробнее...
DNS в Windows 2003
DNS — не роскошь, а необходимостьПротокол, определявший порядок обмена информацией в Интернете, описывал в том числе и систему адресации компьютеров, объединенных в эту Сеть. Согласно этой...
Подробнее...
Система X Window
Система X Window представляет собой графическую оболочку для операционных систем семейства Unix.Топологически X Window состоит из двух частей: это Х-сервер и Х-клиент.Х-сервер — это программа...
Подробнее...
chmod - изменение режима...
Все чаще обнаруживается, что некоторые начинающие сайтостроители, увлеченные скриптованием (на perl/cgi, php и т.д.) не знают, что такое chmod и как его использовать. В этом кратком руководстве вы...
Подробнее...