Простейшее решение создания страницы отзывов/комментариев на сайте без базы данных. Все сообщения будут приходить на email. Чтобы отсеять спам, публиковаться будут только те, которые не содержат http://. Если в тексте присутствует http://, но оно не является спамом, то его можно будет вручную прописать в файле comments.txt.
В файле .htaccess закрыть служебную информацию comments.txt:
<Files "comments.txt"> Deny from all </Files>
Создать файл comments.html, в самый верх которого без пробелов и отступов вставить скрипт PHP:
<? // занести в массив значение полей $z = array( 1 => $_POST['name'], 2 => $_POST['email'], 3 => $_POST['content'] ); $dl = ''; if($z[1] && $z[2] && $z[3]){ mail("name@yandex.ru", "заполнена форма site.ru", $z[1] . "\n" . $z[2] . "\n" . $z[3]); // сообщение на ваш email о новом отзыве if(strpos($z[3], 'http://') === false){ // если в тексте отзыва нет http:// $fp = fopen("comments.txt", "a+"); // режим записи $mytext = "<dt><a href='" . $z[2] . "'>" . $z[1] . "</a><dd>" . $z[3] ; $save = fwrite($fp, $mytext); // запись в файл fclose($fp); // закрытие файла Header("Location: ".$_SERVER['PHP_SELF']); // обновить страницу; обновлённая версия содержит опубликованный комментарий exit; } else { // если в тексте есть http:// $dl = '<b style="color: red;">Ваш отзыв будет опубликован после проверки автором сайта</b>'; // показан этот текст } } else { $fp = @fopen("comments.txt", "r"); // режим чтения if ($fp) { while (!feof($fp)) { $dl .= fgetss($fp, 8000, "<dl>,<dt>,<dd>"); // <dl>,<dt>,<dd> - это список тегов, разрешённых для публикации } } fclose($fp); } ?>
В удобном месте в comments.html добавить HTML код формы
<form method="post"> <label>Как к Вам обращаться:</label> <input type='text' name='name' required/> <label>Email (не публикуется):</label> <input type='email' name='email' required/> <label>Oтзыв:</label> <textarea name='content' required rows="5"></textarea> <input type='submit' value='публикация'/> </form> <dl> <? echo $dl; ?> <!-- PHP --> </dl>
При первом сообщении создастся файл comments.txt. В него будут падать все оставленные отзывы. Их можно будет удалять, редактировать либо добавлять свои.
66 комментариев:
а если такого файла вобше нету то делаем файл .htaccess.html и помешаем его на сервер да?
Deny from all
...........
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
AddDefaultCharset utf-8
# END WordPress
Deny from all
а
<Files *.txt>
Deny from all
</Files>
иначе все страницы закроете :( Пока не трогайте этот файл.
RewriteRule . /index.php [L] - у вас же нет этой страницы. У вас почему-то /index.html
Из-за того, что у вас файлы, а не база данных, это тоже не нужно
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Deny from all
я это и имел ввиду просто не все скопировол и не все вставилось а я не заметил
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
AddDefaultCharset utf-8
# END WordPress
пока не чего не куда не пихал пока не разберусь вечером почитаю ваш совет про упрошеннуцю схему может что получится (ну вечер у меня как заметили очень поздно наступает тогда же и в контакте напишу )
Ваш код HTML не может быть принят: Недопустимый тег: не разрешает эта форма код для просмотра вставить .
чего то не хватает отображается на странице нормально корректно
но комментарии написать не получается
http://xn--51-8kcfemaodkveyaqedoqejz1ao.xn--p1ai/comments.html
Комментарии не пускают теги, воспользуйтесь формой http://shpargalkablog.ru/2010/12/napisat-kod-tekstom.html
HTML не может быть динамичным. Искл. тег details и marquee. Последний уже выведен из спецификации.
FileETag MTime Size
<ifmodule mod_expires.c>
<filesmatch ".(jpg|jpeg|gif|png|ico|css|js)$">
ExpiresActive on
ExpiresDefault "access plus 1 month"
</filesmatch>
</ifmodule>
RemoveHandler .html .htm .shtml .shtm
AddType application/x-httpd-php .php .html .htm .shtml .shtm
Сам html файл должен содержать все основные разметки, а предлагаемый код должен помещаться между тегами body и /body и будет всё работать. Но не ожидайте чудес от такого примитивного скрипта. Он может неплохо дополнить страницу раздела сайта "Отзывы и предложения"...
Короче, я ради интереса попробовал - всё работает.
AddHandler fcgid-script .htm .html
Или на ботов поисковых систем это не распространяется?
Мне вот только хотелось бы ещё как-нибудь выводить дату и время постинга - возможно ли такое без баз данных?
Еще один момент: в самом начале, когда еще нет ни одного коммента, у меня выдаёт вот такую ошибку:
Warning: fclose() expects parameter 1 to be resource, boolean given in ... on line 33
Отправишь первый коммент - всё пропадает.
Можно ли как-то это исправить?
Большое спасибо вам.
То есть в коде PHP надо просто "комментарии.txt" поменять на "comments.txt".
<?
$z = array(
1 => $_POST['name'],
2 => $_POST['email'],
3 => $_POST['content'],
4 => date("m.d.Y H:i")
);
$dl = '';
if($z[1] && $z[2] && $z[3]){
mail("name@yandex.ru", "заполнена форма site.ru", $z[1] . "\n" . $z[2] . "\n" . $z[3]);
if(strpos($z[3], 'http://') === false){
$fp = fopen("comments.txt", "a+");
$mytext = "<dt><a href='" . $z[2] . "'>" . $z[1] . "</a><dd><span>" . $z[4] . "</span> " . $z[3] ;
$save = fwrite($fp, $mytext);
fclose($fp);
Header("Location: ".$_SERVER['PHP_SELF']);
exit;
} else {
$dl = '<b style="color: red;">Ваш отзыв будет опубликован после проверки автором сайта</b>';
}
} else {
$fp = @fopen("comments.txt", "r");
if ($fp) {
while (!feof($fp)) {
$dl .= fgetss($fp, 8000, "<dl>,<dt>,<dd>,<span>");
}
}
fclose($fp);
}
?>
Спасибо вам большое, во всём разобрался, вы мне очень помогли!
Я только для себя поменял вывод даты - поставил его перед именем комментатора.
Сейчас хочу ещё сделать определение по IP, чтобы нежелательных комментаторов ограничивать.
Плюс хочу сделать каптчу для отправления сообщения.
Не подскажете, в этих случаях уже точно без базы данных не обойтись?
Большое вам спасибо, Наталья, за блог и помощь.
$z = array(
1 => $_POST['name'],
2 => $_POST['email'],
3 => $_POST['content'],
4 => date("m.d.Y H:i"),
5 => $_SERVER["REMOTE_ADDR"]
);
Чтобы сохранять IP
$mytext = "<dt><a href='" . $z[2] . "' title='" . $z[5] . "'>" . $z[1] . "</a><dd><span>" . $z[4] . "</span>" . $z[3] ;
Чтобы ограничить IP (вроде так, правильность не проверяла)
if($z[1] && $z[2] && $z[3] && ($z[5] != 0.000.000.000)){
Капчу тоже можно сделать, но я не хочу этим заниматься. Добавляете поле, если то, что в поле удовлетворяет условию, то форма отправляется, иначе нет.
IP прописывает отлично, но как ограничивать по IP, пока не разобрался. Но теперь уже знаю, что это должно быть не сложно.
Огромное вам спасибо, за несколько дней много интересного прочитал на вашем блоге!
Стоит вставить скрипт в обычный файл, в то место, где, собственно, и нужны комментарии или отзывы, то видят кириллицу все, скрипт работает, но после отправления комментария пропадает всё, что есть на странице ниже этого скрипта, не происходит автоматическое обновление...
Скажите, можно ли как-то это исправить без привлечения JS или JQery?
А то так был доволен простотой, но в итоге скрипт не вполне подходит, печально...
Надо просто PHP-скрипт вставлять в документ до DOCTYPE.
Тогда всё работает, как и должно работать.
По поводу кириллицы, на HTML странице должен быть мета-тег
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type'/>
Если проблемы в письме email, то нужно прописывать заголовок http://shpargalkablog.ru/2014/01/feedback-form.html
dd {
white-space: pre-line;
margin: 0;
border: solid;
}
dt {
margin-top: 1.5%;
font-weight:bold;
}
dd {
margin: 0;
border-top: 1px solid red;
}
Комментарий 58: см. комментарий 56
0503116062
0673206062
Не срабатывает вот эта часть:
дл
ечо
дл (по другому комментарий не отправляется)
При добавлении ее в конце в html появляется ошибка, что мол неожидаемый символ. Подскажите в чем может быть дело. Куда и как правильнее добавить эту строчку?
<article>
<cite><a href="http://shpargalkablog.ru/">NMitra</a></cite>
<time datetime="2014-09-19">19 сентября 2014 год</time>
<p>Так может быть оформлен комментарий на блоге.</p>
</article>