PHP函数复制数据

时间:2016-10-16 23:32:48

标签: php mysql

我正在尝试使用MySQL和PHP制作评论部分。但是,出于某种原因,每当我刷新页面时,数据都会重复。每次刷新页面时都会发生这种情况。

实施例

img1

img2

它不应该这样做,但确实如此。我认为它与setComment()函数有关,但我不确定。

的index.php

<?php
    include 'dbh_comments.inc.php';
    include 'comments.inc.php';
?>

<!DOCTYPE html>
<html>
<head>
    <title>Comments</title>
    <link rel="stylesheet" type="text/css" href="comment_styles.css">
</head>
<body>
<?php
    echo"<form method='POST' action='".setComment($conn)."'>
            <input type='hidden' name='uid' value='Anonymous'>
            <textarea name='message'></textarea><br/>
            <button type='submit' name='comment_submit'>Comment</button>
        </form>";
?>
</body>
</html>

comments.inc.php

<?php

function setComment($conn) {
    if(isset($_POST['comment_submit']) && isset($_POST['message']) !== '') {
        $uid = $_POST['uid'];
        $message = $_POST['message'];

        $sql = "INSERT INTO comments (uid, message) VALUES ('$uid', '$message')";
        $result = mysqli_query($conn, $sql);
    }
}

function getComments($conn) {
    $sql = "SELECT * FROM comments";
    $result = $conn->query($sql);
    while ($row = $result->fetch_assoc()) {
        echo $row['message'];
    }
}

getComments($conn);

4 个答案:

答案 0 :(得分:1)

是的,你是对的,问题在于:

<?php
    echo"<form method='POST' action='".setComment($conn)."'>
            <input type='hidden' name='uid' value='Anonymous'>
            <textarea name='message'></textarea><br/>
            <button type='submit' name='comment_submit'>Comment</button>
        </form>";
?>
每次访问页面时都会调用

函数setComment并将新行保存到DB

答案 1 :(得分:0)

这是因为网络如何工作,如果你发布到页面然后刷新页面,POST数据就是......好了,再次发布。每次刷新时,您的浏览器都可能会警告您,对吧?

因此,您要做的是在处理POST时将用户重定向回原始表单,所以..

if($_POST['message']) {
   ... save message in sql...
   header("Location: /back_to_Somewhere.php");
   exit();
}

在POST后,始终将用户重定向到其他位置是非常好的做法。

答案 2 :(得分:-1)

您将comments.php文件包含在文件顶部。 在comments.php文件中,您正在调用一个函数(getComments($conn)),该函数回显出数据。

这会打印在包含文件的最顶部的页面上。

答案 3 :(得分:-1)

请检查数据库中插入的记录数。 I hope your application unset the $_POST array after inserts.并且您没有刷新页面点击刷新按钮。如果是,当警报到来时,你不能按确认。如果是,则插入重复数据。

好吧,用简单的话说我也这么说,你的应用程序正在插入重复的数据。如果您发布数据而不是unset($_POST)数组,则每次加载页面时都会插入数据,因为您的插入查询位于if(isset($_POST['comment_submit']) && isset($_POST['message']) !== '')内。插入完成后最好取消设置。