Перейти к содержимому



При обновлении страницы дублируются (удваиваются) комментарии

#1 werd_34

werd_34
  • Пользователь
  • 34 сообщений
  • Репутация: 0
0

Отправлено 25 Май 2013 - 11:52

Здравствуйте, уважаемые форумчане!
Делаю древовидные комментарии. Коментарии то получились (пока без проверок). Но при обновлении страницы комментарии удваиваются и заносятся в базу даннных. Подскажите, как можно исправить. И как прикрутить простенькую капчу?

if(!empty($_POST['uname']) && !empty($_POST['message']) && $_POST['op'] == 'add-comment') {

  $comment = mysql_real_escape_string(strip_tags($_POST['message'], "<p><b><i><font><img>")); // удалим левые теги
  $ip = $_SERVER['REMOTE_ADDR'];
  $client = $_SERVER['HTTP_USER_AGENT'];
  $content_id = intval($_POST['content']);
  $parent_id = intval($_POST['parent']);
  mysql_query("INSERT INTO les_comments (`id`, `name`, `ip`, `client`, `comment`, `content_id`, `parent_id`, `time`) VALUES (NULL, '$uname', '$ip', '$client', '$comment', '$content_id', '$parent_id', '$time')");
}
$content_id = 0;  // это ключевой идентификатор от конкретной статьи
// выводим комменты
$msg = array();
$result = mysql_query("SELECT * FROM les_comments WHERE content_id='$id'");
while($row = mysql_fetch_assoc($result)){
  $msg[] = $row;
}
$count = count($msg);
$parent = 0;
$form = "<div class='editor'>
<form id='comment-form' autocomplete='off' method='post'>
<input type='hidden' name='op' value='add-comment'>
<input type='hidden' name='content' value='{$id}'>
<input type='hidden' name='parent' value='{$parent}'>
<table border='0'><tr><td><input id='uname' name='uname' type='text' value='{$uname}' maxlength='20' size='25' /></td><td>Ваше имя*</td></tr></table>
<textarea name='message' rows='5' cols='65'></textarea><br><input id='submit' name='signup' type='submit' value='Добавить' /></div>
</form>";
$i = 0;
if($count){
  $comments = "<div class='comments-all'><span style='float:left'>Всего вопросов: {$count}</span><span class='add-comment'>Задать вопрос </span></div>".$form;
 
  $msg = crazysort($msg);
  while($i<$count){
    $margin = $msg[$i]['level'] * 20;
    $date = date("d.m.Y в H:i",$msg[$i]['time']);
    $comments .= "<div id='msg{$msg[$i]['id']}' style='margin-left: {$margin}px'><div class='comment-title'><span style='float:left'><b>{$msg[$i]['name']}</b> <small>({$date})</small></span><span class='comment-ans' id={$msg[$i]['id']}>ответить</span></div><div class='comment-message'>{$msg[$i]['comment']}</div></div>";
    $i++;
  } 
}else{
  $comments = "<div class='comments-all'><span style='float:left'>Вопрос ещё не задавали</span><span class='add-comment'>Задать вопрос</span></div>".$form;
}
Пикреплю всю страницу

Прикрепленные файлы

  • Прикрепленный файл  index.php   5,47К   Количество загрузок: 53

 

 

  • 0

#2 admin

admin
  • Пользователь PRO
  • 5 272 сообщений
  • Репутация: 54

Отправлено 25 Май 2013 - 13:49

При обновлении данные из POST снова заносятся в базу, потому что они всё ещё есть там. Нужно очищать POST после добавления в базу или редиректить на эту же страницу
  • 0

Сколько лет прошло, а ссылки всё ещё лучше покупать тут



#3 fedornabilkin

fedornabilkin
  • Пользователь
  • 696 сообщений
  • Репутация: 91

Отправлено 28 Май 2013 - 13:40

Как вариант, можно сделать редирект header("Location: $url");
После этого массив очистится
  • 1
Как часто в горестной разлуке,В моей блуждающей судьбе, ФО, я думал о тебе.



Оформление форума – IPBSkins.ru