Компьютерные электронные книги Четверг, 20.11.2008, 15:21
Приветствую Вас Гость | RSS
Меню сайта
Категории каталога
Компьютерные статьи [198]
Вторая молодость Internet Explorer
Сеть [68]
Статьи по локальным сетям, интернет, настройка домена
Графика [17]
Статьи по Photoshop, Corel Draw, Illustrator, 3D Max, Maya
Оперционные Системы [168]
Статьи по Windows, Linux, Unix
Программирование [100]
Статьи по Delphy, C/C++, .NET, PHP, Pascal, Perl, Visual Basic, Ассемблер, Java, Java Script, ASP
Web-Диайн [35]
Статьи про Веб-Дизайн, создание сайтов, раскрутка сайтов, уведичение посещаемости
SOFT Обозрение [7]

Контакты
Мыло email: smtp3@bk.ru

Аська ICQ: 393-364-007

 
Главная » Статьи » Программирование

Форум без базы данных за 15 минут PHP
/*
Полноценный форум без базы данных.

Версия 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 'Имя:
';
else $log=' от '.$_SESSION['username'];
?>
<br><br>Сообщение:
<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="">
<br>
/* вставили картинку, теперь добавим автора в сообщение.
Сделаем это ссылкой на скрипт. Скрипт дает информацию о пользователе.
*/
?>

<a href="getinfo.php?nik=">


/*
Выводим сообщение пользователя и его статус.
*/
?>

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

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

?>

<a onClick="document.getElementById('f').style.display='block';">Ответить</a>
<form style="display:none" method="POST" id="f" action="otvet.php?id=">
<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 ''.$k.' '; else echo ''.$k.' ';
?>
<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('\\\"',""",$text);
$text=ereg_replace("!","!",$text);
$text=ereg_replace("\r","",$text);
$text=ereg_replace("%","%",$text);
$text=ereg_replace("^ +","",$text);
$text=ereg_replace(" +$","",$text);
$text=ereg_replace(" +"," ",$text);
$text=ereg_replace("\n","
",$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.'
'.$nik.' ('.$dd.'): '.$t.''.$br;
$temp = tmpfile(); //Создание временного файла
for ($i=0;$iif ($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;$iif (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('\\\"',""",$text);
$text=ereg_replace("!","!",$text);
$text=ereg_replace("\r","",$text);
$text=ereg_replace("%","%",$text);
$text=ereg_replace("^ +","",$text);
$text=ereg_replace(" +$","",$text);
$text=ereg_replace(" +"," ",$text);
$text=ereg_replace("\n","
",$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 'Форум';
$go=$_GET['go'];
if ($go=="") $go="main";
$file='htm/'.$go.'.htm';
if (file_exists($file))
include($file);
else
echo 'Файл '.$file.' не найден';
?>

Все файлы работают, было проверено.
Вот и все что я хотел поведать, спасибо за внимание.
Категория: Программирование | Добавил: compbook (11.08.2008)
Просмотров: 46 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Имя *:
Email:
WWW:
Код *:
 
 
Форма входа
Логин:
Пароль:

Поиск
 
Реклама
    Internet MapКликните на эту кнопку чтобы увидеть карту ВСЕГО интрнета

    Статистика
    Rambler's Top100
    Онлайн всего: 0
    Гостей: 0
    Пользователей: 0
     

    Реклама

    Рейтинг TOP100
    Copyright CompBook © 2008