Ошибка: Failed to parse the Currency Converter XML document.
$20 041.45


Ошибка: Failed to parse the Currency Converter XML document.
$2 084.15


Ошибка: Failed to parse the Currency Converter XML document.
$772.64


Форум без базы данных за 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.« не найден»;
?>

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

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

 

Интересное

Типизированные файлы
Типизированный файл — это файл в котором записанны идентичные структуры. Например любой файл можно считать файлом байтов — т.е. можно его читать байт за байтом, можно перейти сразу к любому...
Подробнее...
Сделать первый небольшой...
С чего начать?Я думаю, сейчас самое время перейти от слов к делу — сделать первый небольшой скрипт.Возьмем для примера следующую задачу. Нужно сделать базу с книгами, которые появились или скоро...
Подробнее...
SSI - что, когда, как?
Основным, простейшим, но в то же время чрезвычайно мощным инструментом поддержки больших наборов документов является SSI (Server-Side Includes — включения на стороне сервера). Если кто-то из...
Подробнее...
Firefox: Настройка RSS
Много слышал об RSS и даже несколько раз пытался пользоваться специальными программами для чтения. Но устанавливать дополнительное ПО не хочется, тем более что в Firefox есть встроенный клиент...
Подробнее...
Протоколы интернет
Прародителем сети интернет была сеть ARPANET. Первоначально её разработка финансировалась Управлением перспективного планирования (Advanced Research Projects Agency, или ARPA). Проект стартовал...
Подробнее...
Linux Format
Linux Format Номер 1 Январь 2007 Автор: Linux Format Формат: PDF
Подробнее...
Выпадающие меню с помощью CSS
Каждый, кому хоть раз приходилось создавать выпадающие меню, знаком с тем, какое количество скриптов требуется для этого. Между тем, используя грамотно структурированный HTML-код и несложные...
Подробнее...
База данных методами...
В статье рассматривается работа с бинарными файлами из Delphi, а так же использование Object Pascal для управления записью, чтением и изменением собственных типов файлов.Постановка задачи:...
Подробнее...
Средства восстановления...
Чтобы ни говорили про повышенную надежность Windows 2000/ХР, иногда она все же подводит. Правда, по сравнению со своими предшественницами Windows 9x/Me это случается гораздо реже. А поскольку...
Подробнее...
CSS дизайн: с учетом контекста
Веб-стандарты обещают нам улучшенную поддержку мультимедиа: возможность оптимизировать контент под возможности компьютерных экранов, портативных устройств, принтеров, проекторов, и подобных...
Подробнее...