在php页面重复评论

时间:2014-01-08 05:29:36

标签: php mysql

我在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'] : '';

但没有福利。

4 个答案:

答案 0 :(得分:2)

提交评论后,如果您刷新页面,则表示您正在提交相同的评论。这就是他们重复的原因。

处理此问题的最佳方法是要么将您的INSERT查询放入另一个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";
  }

} 

请注意您的代码不安全。

答案 1 :(得分:1)

您可以在unset()查询

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

答案 2 :(得分:0)

避免这个

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

并使用

if(isset($_POST['submit']))
{
//here the insertion query..
}

答案 3 :(得分:-1)

使用帖子完成工作后,您可以使用POST取消设置unset($_POST)。 这将清空帖子,刷新不会再次带来值。