ГлавнаяРегистрацияВход Приветствую Вас Гость | RSS
   
Меню сайта
Разделы новостей
mp3player
Главная » 2007 » Июль » 7 » Скрипт комментариев [TXT]
Скрипт комментариев [TXT]
15:38
Вот захотелось написать свою статейку, про что нибудь связанное с PHP. Думаю, вам будет очень интересно узнать, как сделать самую простую систему комментариев с использованием под базу данных всего лишь одного текстового файла.

И так, начнём с самого простого, а если точнее сказать с самой идеи. Идея очень проста, как и все идеи. База данных будет иметь следующий вид:

id date name e-mail web ip comments


Надеюсь здесь всё понятно, для непонятливых объясняю, что в файле будет шесть колонок, разделяются они клавишей "tab" и каждый новый комментарий будет писаться выше предыдущего. Всегда нужно помнить – чем безопасней скрипт и чем больше в скрипте с умом продуманных "фитчей", тем ценнее скрипт! Например, нам нужно будет сделать так, если у человека нет сайта, то мы выводим на экран пустую строку, а если есть то выводим адрес. Ещё пример, если человек написал в строке сайта www.my_site.com, то нужно дописать в начале http:// что бы ссылка работала. Если её не будет, то ссылка будет плохой, и выскачет ошиПка. Надеюсь, вы это тоже поняли. Теперь приступим к самому главному – написанию скрипта.

Если вы впервой столкнулись с PHP, то вы, скорее всего, не поймёте в чём дело, но тут я постараюсь вам объяснить, что к чему. Перед моими комментариями будут стоять вот такие вот слеши «//». Итак поехали. Первая часть это будет запись, проверка на всякие недоброжелательные знаки, кукисы и т.д., а вот и сам код:

<?
// файл который будем использовать под базу данных
$comfile = "file.txt";
// Запись куки имя и e-mail, хранить до 1.01.2003
if($name != "") {
setcookie("name", "$name", mktime(0,0,0,1,1,2003));
}
if($email != "") {
setcookie("email", "$email", mktime(0,0,0,1,1,2003));
}
if($web != "") {
setcookie("web", "$web", mktime(0,0,0,1,1,2003));
}

if(id != "") {
// Проверка на "отправить" и выведение ошибок, если таковые есть
if($submit == ?отправить?) {
if($name == "") {
$error1 = "Пожалуйста впишите имя. ";
}
if($comments == "") {
$error2 = "Пожалуйста впишите коментарии. ";
}
}

// проверка указанны ли комментарии и имя
if ($name != "" and $comments != "" and $id != "") {

// Замена недоброжелательных знаков в имени, емайле, комментариях и номере комментариев

$name = ereg_replace(" ", "", $name);
$name = ereg_replace(" ", "", $name);
$name = ereg_replace("<", "<", $name);
$name = ereg_replace(">", ">", $name);
$email = ereg_replace(" ", "", $email);
$email = ereg_replace(" ", "", $email);
$email = ereg_replace("<", "<", $email);
$email = ereg_replace(">", ">", $email);
$id = ereg_replace(" ", "", $id);
$id = ereg_replace(" ", "", $id);
$id = ereg_replace("<", "<", $id);
$id = ereg_replace(">", ">", $id);
$web = ereg_replace("<", "<", $web);
$web = ereg_replace(">", ">", $web);
$web = ereg_replace(" ", " ", $web);
$web = ereg_replace(" ", "", $web);
$comments = ereg_replace("<", "<", $comments);
$comments = ereg_replace(">", ">", $comments);
$comments = ereg_replace(" ", "
", $comments);
$comments = ereg_replace(" ", " ", $comments);

// Чтение из файла старых записей, если нету файла, то создаём и считываем пустую строку
if(file_exists($comfile)) {
$read_old = fopen($comfile, "r");
$old = fread($read_old, filesize($comfile));
fclose($read_old);
} else {
$read_old = fopen($comfile, "w");
$old = "";
fclose($read_old);
}

// Настройка даты
$date = date("j.m.Y");

// Вычисление есть ли ип проходимый через cache, если нет, то просто ip
if($HTTP_X_FORWARDED_FOR=="") {
$ip = $REMOTE_ADDR;
} else {
$ip = $HTTP_X_FORWARDED_FOR;
}

// Устанавливаем вид записи в базу данных
$text = "$id $name $date $email $web $ip $comments ";
$text .= "$old";

// Проверка максимального колличества слов
// напротив $no_of_words вставте максимальное колличество слов
$no_of_words = 100;
$words_array = split(" ", $comments, $no_of_words++);
if(count($words_array) <= $no_of_words) {
$fp = fopen($comfile, "w");
fputs($fp, $text);
fclose($fp);
} else {
$error3 = ">> Напишите меньше, слишком много слов. ";
}

} // отправить
} else {
$error4 = "Комментарии для пустого значения id нельзя слать.";
} // Если id это пустое значение.
?>


Затем делаем форму, откуда будут отправляться данные:

<table border='0' cellspacing='4' cellpadding='0' width='100%'>
<tr><form method='post' action='demo.php?id=<' echo $id; ?>'><td>
имя : >input type='text' name='name' value='<' echo $HTTP_COOKIE_VARS["name"]; '>' style="width=70">
: мыло : <input type='text' name='email' value='<' echo $HTTP_COOKIE_VARS["email"]; '>' style="width=100">
: сайт : <input type='text' name='web' value='<' echo $HTTP_COOKIE_VARS["web"]; '>' style="width=169"><br>
<textarea name="comments" style="height=60; width=480"></textarea><br>
<input style="cursor:hand" type="submit" name="submit" value="отправить">
<hr size=1 color=#1d2f49>


А теперь делаем вывод комментариев:

<?
// Вывод ошибок
echo "$error1$error2$error3$error4</td></tr>";

//открываем файл и считываем его
$file = @file($comfile);

for ($i=0; $i<count($file); $i++) {

// Разделяем строку на столбцы
$row = explode(" ",$file[$i]);
list($ida, $namea, $datea, $emaila, $weba, $ipa, $commentsa) = $row;
// Определям, принадлежит ли эта комментса к этой серии комментариев
if($ida == $id) {

// Если в строке email нету @, то не выводим емайл
if(eregi(";@", $emaila)) {
$emaila = "<a href=?mailto:$emaila?>$namea</a>";
} else {
$emaila = $namea;
}

// Всякие примочки с коментариями
$commentsa = eregi_replace("([ ]|^)www.", " http://www.", $commentsa);
$commentsa = eregi_replace("([ ]|^)ftp.", " ftp://ftp.", $commentsa);
$commentsa = eregi_replace("(http://[^ )
"?>]+)", "<a href="1" target="_blank">1</a>", $commentsa);
$commentsa = eregi_replace("(ftp://[^ )
"?>]+)", "<a href="1" target="_blank">1</a>", $commentsa);
$commentsa = eregi_replace("([-a-z0-9_]+(.[_a-z0-9-]+)*@([a-z0-9-]+(.[a-z0-9-]+)+))", "<a href="mailto:1">1</a>", $commentsa);
$commentsa = str_replace(""", """, $commentsa);
// Разделяем большие слова пробелом, макс длинна слова 20 симолов
$commentsa = wordwrap($commentsa, 20, " ", 1);
// Работаем с "сайтом"
if(substr(trim(strtolower($weba)), 0, 7) != "http://" and $weba != "") {
$weba = " - <small><i>(<a href=?http://$weba?>http://$weba</a>)</i></small>";
}
else if(substr(trim(strtolower($weba)), 0, 7) == "http://") {
$weba = " - <small><i>(<a
href=?$weba?>$weba</a>)</i></small>";
}

echo "<tr><td bgcolor=?#ffe7ce?><small>[$datea]</small> $emaila $weba</td></tr><tr><td>$commentsa</td></tr>";
}
}
?>


Ну вот собственно и всё о чём я вам хотел рассказать. Будут вопросы/дополнения/комментарии, мыльте мне на e-mail: solid@email.ee. Ах да, чуть не забыл, закройте всё это тэгом </table>. Скрипт скачать можете по этому адресу: http://coding.dyn.ee/solid/projects/comments/.

Автор: solid
Источник: web-student

Категория: PHP | Просмотров: 1000 | Добавил: VVS | Рейтинг: 0.0/0 |
Всего комментариев: 0
Имя *:
Email *:
Код *:
Поиск
Форма входа
Наш опрос
Чего Вам не хватает на сайте?
Всего ответов: 21
Друзья сайта
Статистика
Возраст