как довести до ума скрипт комментариев к странице

Dmitry HT
На сайте с 31.03.2006
Offline
58
1010

Проблема в том, что в случае обновления страницы сразу же после постинга комментария происходит повторная отправка post запроса и, как следствие, повторная публикация комментария :gm:

скрипт простой, но никогда не уделял достаточно внимания php...

если кто поможет буду крайне благодарен :)

новая версия, чуть подправленная со времен последних постов


<?
$fp = fopen("comments/commments-to-". basename($PHP_SELF), "r");
if(!fp) { echo("0 комментариев"); }
else { $contents = fread($fp,10000); };
fclose($fp);

if (strrpos($contents, $bbbbb) === false)
{
echo("плагиат");
}
else
{
$name = $aaaaa;
$message = $bbbbb;

$name = strip_tags($name);
$message = strip_tags($message);
$name = StripSlashes($name);
$message = StripSlashes($message);
$message = ereg_replace("\r\n\r\n", "\n<P>", $message);
$date = date("F j Y");
$message = "<b>$name</b> (on $date)<br><i>$message</i><br><br>";
$fp = fopen ("comments/commments-to-". basename($PHP_SELF), "a");
fwrite ($fp, $message);
fclose ($fp);
};

@readfile("comments/commments-to-". basename(($PHP_SELF)));
?>


<FORM method="post">
<b>Автор</b><br>
<INPUT name="aaaaa" value="Guest" type="text" size="30"><br>
<b>Комментарий</b><br>
<TEXTAREA name="bbbbb" value=" "></TEXTAREA><br>
<INPUT name="submit" type="submit" value="Submit"><br><br>
</FORM>

Магазин аккаунтов (http://wmaid.com/index.php?s=acc)
Pike
На сайте с 13.07.2004
Offline
79
#1

Так он у Вас два раза пишет - первый раз как есть, второй без html. Вам как надо?

free hosting (http://rahost.com)
Dmitry HT
На сайте с 31.03.2006
Offline
58
#2
Pike:
Так он у Вас два раза пишет - первый раз как есть, второй без html. Вам как надо?

удивительно то, что пишет он всего 1 раз :) и мне так и надо.

Тут ведь проблема в том, что в случае обновления страницы идет повторное добавление (дублеж) комментария.

может кто-нибудь может объяснить смысл след. участка кода:


$secret = "password";
$mode = "a";

if ($password == $secret)
{
if ($bbbbb != "")
{
$mode = "w";
$fp = fopen ("comments/commments-to-". basename($PHP_SELF), $mode);
fwrite ($fp, $bbbbb);
fclose ($fp);
}
}

как-то мне все это кажется не логическим...но, возможно, что это из-за скудных познаний php

Pike
На сайте с 13.07.2004
Offline
79
#3

Изначально (там, откуда скрипт содран) было поле для пароля, и при его правильном введении все коменты удалялись, а в файл записывался новый коммент. Потом переписываляс на тот же коммент, но с выгрызенным html. Дети писали? Этот кусок кода можете и нужете смело удалить.

А от Вашей проблемы лекарство - проверить конец файла и сравнить его с новым комментом, если совпадает - не писать. Скрипт увеличится в два раза примерно :/

Dmitry HT
На сайте с 31.03.2006
Offline
58
#4

вопрос снят

кому-нибудь наверняка пригодится, пользуйтесь☝

Пришлось повозиться, т.к. сложно писать на php без денвера:)

Теперь вот привожу простой скрипт добавления комментариев к публикации/новости.

Комментарии пишутся в директорию comments. Указанную дирректорию необходимо предварительно создать и выставить для нее соответствующие права (777 точно подойдет;) ).

Специфические названия полей aaaaa и bbbbb выбраны специально, как мин. защита от web спама.


<h3><u>КОММЕНТАРИИ ЧИТАТЕЛЕЙ</u></h3>
<?
$filename = "comments/commments-to-" . basename($PHP_SELF);
$fsize = filesize($filename);

$fp = fopen($filename, "r");
if(!fp)
{ }
else
{
$all = fread($fp,$fsize);
};
fclose($fp);

$name = $aaaaa;
$message = $bbbbb;

$name = strip_tags($name);
$message = strip_tags($message);
$name = StripSlashes($name);
$message = StripSlashes($message);
$message = ereg_replace("\r\n\r\n", "\n<P>", $message);
$date = date(" от m.d.y");
$message = "<b>$name</b>&nbsp;&nbsp;$date<br><i>$message</i><br><br>";


if (strpos($all, $message) > 0)
{ }
else
{
if (strlen($bbbbb) >= 1)
{
$fp = fopen ($filename, "a+");
fwrite ($fp, $message);
fclose ($fp);
};
};

echo ("<br>");
@readfile($filename);
?>


<FORM method="post">
<span id="label">Автор</span><br>
<INPUT name="aaaaa" value="Гость" type="text" size="30">
<INPUT name="submit" type="submit" value="Submit"><br>
<span id="label">Комментарий</span><br>
<TEXTAREA name="bbbbb" value=""></TEXTAREA>
</FORM>

Николай В.
На сайте с 07.09.2006
Offline
62
#5

Dmitry HT, у Вас два посетителя не смогут оставить одинаковые комментарии. В свете повальных «+1» это критично. :)

Oniks
На сайте с 22.08.2005
Offline
176
#6

Dmitry HT, вы изначально идете по неправильному пути. Зачем что-то сравнивать, грузить машину??? Можно же просто в случае удачного сохранения комментария делать рефреш страницы через яваскрипт, мета-рефреш или хедером (в этом варианте юзер вообще ничего не заметит)! :)

Профессиональные услуги фотографа в Москве и области (http://www.oniks-photo.ru/) покупаю стать и ссылки с сайтов про охоту

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий