|
|
|
| добрый день!
Нашел скрипт коментариев. Нужно добавить возможность модерации сообщений и поставить проверку от спама.
<h1>Оставить свой комментарий:</h1>
<div id='cerror'></div>
<div align="center"><form action="#" method="POST" enctype="multipart/form-data" name="addcom" id="addcom" onSubmit="return false">
Ваше имя:<br>
<input name="author" type="text" size="30" class="pole" id="author"><br><br>
Текст комментария:<br>
<textarea name="text" rows="5" cols="50" class="text"></textarea><br>
<br>
<input name="id" type="hidden" value="<?php echo $id; ?>">
<input class="adscom" name="button" type="button" value='Добавить комментарий' onclick="doLoad(document.getElementById('addcom'))">
</form>
</div>
|
<?
// Запрет на кэширование
header("Expires: Mon, 23 May 1995 02:00:00 GTM");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GTM");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
//****
$log =="";
$error="no"; //флаг наличия ошибки
require_once 'JsHttpRequest.php';
$JsHttpRequest =& new JsHttpRequest("windows-1251");
//Короткие имена переменных и обрезка пробелов img_title
$text = trim($_POST['text']);
$author = trim($_POST['author']);
$id = trim($_POST['id']);
//Проверка email адреса
if($author == ''){
$log .= "Пожалуйста, введите Ваше имя<br>";
$error = "yes";
}
//Проверка наличия введенного текста комментария
if (empty($text)){
$log .= "Необходимо указать текст сообщения!<br>";
$error = "yes";
}
else{
//Должнен быть хоть один символ на русском языке
$spam=1;
for($i=0;$i<strlen($text);$i++){
if((ord($text[$i])>=192) && (ord($text[$i])<=255)){$spam=0;break;}
}
if ($spam == 1) {
$log .= "Ваше сообщение не содержит ни одной русской буквы.<br>";
$error = "yes";
}
}
//Проверка длины текста комментария
if(strlen($text)>1000){
$log .= "Слишком длинный текст, в вашем распоряжении 1000 символов!<br>";
$error = "yes";
}
//Проверка на наличие длинных слов
$mas = preg_split("/[\s]+/",$text);
foreach($mas as $index => $val){
if (strlen($val)>40) {
$log .= "Слишком длинные слова (более 40 символов) в тексте записи!<br>";
$error = "yes";
break;
}
}
//Экранирование и преобразование опасных символов
if (!get_magic_quotes_gpc()){
$text = addslashes($text);
$author = addslashes($author);
$cod = addslashes($cod);
}
$text = htmlspecialchars($text);
$author = htmlspecialchars($author);
$cod = htmlspecialchars($cod);
//Если нет ошибок добавляем в базу
if($error=="no"){
$date = date("d-m-Y в H:i");
$result2 = mysql_query("INSERT INTO com (post,author,text,date) VALUES ('" . mysql_real_escape_string($id) . "','" . mysql_real_escape_string($author) . "','" . mysql_real_escape_string($text) . "','$date')");
//****
$id_pu = $_REQUEST['id'];
$address = "my@mail.ru";
$subject = "Новый комментарий на сайте";
$post_title = $myrow3["title"];
$message = "Появился комментарий к заметке - ".$post_title."<br>Комментарий добавил(а): ".$author."<br>Текст комментария:
".$text."<br>Ссылка на заметку:<a href='www.site.ru/view.php?id=".$_REQUEST['id']."'>this is link</a>";
$headers = 'Content-Type: text/html;charset=windows-1251';
mail($address,$subject,$message,$headers);
$ok="<div><strong>".$author."</strong><br>Добавлено: ".$date."<br>".$text."</div>";
//Помещаем результат в массив
$GLOBALS['_RESULT'] = array(
'error' => 'no',
'ok' => $ok
);
}
else {//если ошибки есть
$log = "<div><strong><font color='red'> Ошибка! </font></strong><br>".$log."</div>";
//Отправляем результат в массив
$GLOBALS['_RESULT'] = array(
'error' => 'yes',
'er_mess' => $log);
}
?>
|
| |
|
|
|
|
|
|
|
для: usa
(13.12.2011 в 19:31)
| | под модерированием что понимается? редактирование добавленных коментов или ответ на них? | |
|
|
|
|
|
|
|
для: сотка
(13.12.2011 в 19:53)
| | редактирование, просмотр и их публикация | |
|
|
|
|
|
|
|
для: usa
(13.12.2011 в 20:00)
| | INSERT INTO заменить на оператор UPDATE ,который обновляет записи в таблице БД | |
|
|
|
|
|
|
|
для: usa
(13.12.2011 в 19:31)
| | по идеи они ведь должны выводиться на сайте? В этом скрипте идет только запись комментов в базу, а модерирование делается до обработчика, когда все комменты выводятся в цикле. И проверка от спама в коде просто так не ставится :) Нужно в бд создать еще одну табличку с 2 полями, id и pr. В pr помещается число, например, 324678987. А в форме с комментами создай еще одно поле input и в него человек должен ввести число с картинки(число 324678987). После отправки данных, в твоем скрипте должен быть еще один запрос на выборку из таблицы, где леэит это число(оно нужно для сравнения)
<h1>Оставить свой комментарий:</h1>
<div id='cerror'></div>
<div align="center"><form action="#" method="POST" enctype="multipart/form-data" name="addcom" id="addcom" onSubmit="return false">
Ваше имя:<br>
<input name="author" type="text" size="30" class="pole" id="author"><br><br>
Текст комментария:<br>
<textarea name="text" rows="5" cols="50" class="text"></textarea><br>
<br>
<input name="id" type="hidden" value="<?php echo $id; ?>">
<img scr="путь к картинке с числом(ее можно сделать в графическом редакторе)"><input name="input" type="text">
<input class="adscom" name="button" type="button" value='Добавить комментарий' onclick="doLoad(document.getElementById('addcom'))">
</form>
</div>
|
<?
$rel = mysql_query("SELECT pr FROM spam");
$mir = mysql_fetch_array($rel);
if($mir['pr'] != $_POST['input']) {exit("Неверное число с картинки");}
/* далее твой скрипт идет */
?>
|
| |
|
|
|