2014-01-08 3 views
0

У меня есть код для комментариев в PHP страницедублирующие комментарии в PHP странице

, но когда я делаю обновление страницы после отправки комментария то же комментария становится размещены снова и хранится в базе данных также. пожалуйста, помогите мне

<?php 
mysql_connect("localhost","root","password"); 
mysql_select_db("comments"); 

$name=$_POST['name']; 
$comment=$_POST['comment']; 
$submit=$_POST['submit']; 

$dbLink = mysql_connect("localhost", "root", "a12345"); 
mysql_query("SET character_set_client=utf8", $dbLink); 
mysql_query("SET character_set_connection=utf8", $dbLink); 

if($submit) 
{ 
    if($name&&$comment) 
    { 
     $insert=mysql_query("INSERT INTO comment (name,comment) VALUES ('$name','$comment') "); 
    } 
    else 
    { 
     echo "please fill out all fields"; 
    }} 
?> 

<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>Comment box</title> 
</head> 

<body> 
<center> 
    <form action="index.php" method="POST"> 
     <table> 
      <tr><td>Name: <br><input type="text" name="name"/></td></tr> 
      <tr><td colspan="2">Comment: </td></tr> 
      <tr><td colspan="5"><textarea name="comment" rows="10" cols="50"></textarea></td></tr> 
      <tr><td colspan="2"><input type="submit" name="submit" value="Comment"></td></tr> 
     </table> 
    </form> 

    <?php 
    $dbLink = mysql_connect("localhost", "root", "a12345"); 
    mysql_query("SET character_set_results=utf8", $dbLink); 
    mb_language('uni'); 
    mb_internal_encoding('UTF-8'); 

    $getquery=mysql_query("SELECT * FROM comment ORDER BY id DESC"); 

    while($rows=mysql_fetch_assoc($getquery)) 
    { 
     $id=$rows['id']; 
     $name=$rows['name']; 
     $comment=$rows['comment']; 
     echo $name . '<br/>' . '<br/>' . $comment . '<br/>' . '<br/>' . '<hr size="1"/>' 
     ; 
    } 
    ?> 

</body> 
</html> 

Я использую:

$name = isset($_POST['name']) ? 
$_POST['name'] : ''; 
$comment = isset($_POST['comment']) ? 
$_POST['comment'] : ''; 
$submit = isset($_POST['submit']) ? 
$_POST['submit'] : ''; 

, но без пользы.

ответ

2

После отправки комментария, если вы обновите страницу, вы подаете же комментарий снова. Вот почему они дублируются.

Лучший способ справиться с этим, чтобы либо поставить ВСТАВИТЬ запрос в другой файл PHP, а затем перенаправить на страницу комментариев после представления или, если вы хотите сохранить его в том же файле, а затем перенаправить ту же страницу, используя функцию header после добавления комментария в базу данных.

Простой способ исправить:

if($submit) 
{ 
if($name && $comment) 
{ 
    $insert=mysql_query("INSERT INTO comment (name,comment) VALUES ('$name','$comment') "); 
    header('Location: http://the url of your page') ; 
    } 
    else 
    { 
    echo "please fill out all fields"; 
    } 

} 

Пожалуйста, обратите внимание, что ваш код не является безопасным.

+0

Это не решение. Это альтернатива. Если вам нужно сохранить на той же странице, зачем создавать отдельный файл. –

+0

Это решение. Я предложил либо использовать отдельные php-файлы, либо обновить их на одной странице, не передавая информацию POST. Когда вы даете отрицательные моменты, убедитесь, что вы понимаете вопрос и ответ. – Hameed

-1

После выполнения вашей работы с поста вы можете установить POST с unset($_POST). Это будет пустым сообщение, и обновление не принесет значения снова.

+0

Не будет работать. Как только страница обновится, она установит значение «$ _POST» на то, что было отправлено, и вставлено в db. – Hameed

1

Вы можете добавить unset() после $insert запроса

$insert=mysql_query("INSERT INTO comment (name,comment) VALUES ('$name','$comment') "); 
unset($_POST['submit']); 
header("location:yourfile.php"); 
+0

Это не сработает. – Hameed

0

Избегайте этого

$submit = isset($_POST['submit']) ? 
$_POST['submit'] : ''; 

и использовать

if(isset($_POST['submit'])) 
{ 
//here the insertion query.. 
} 
Смежные вопросы