我正在尝试使用MySQL和PHP制作评论部分。但是,出于某种原因,每当我刷新页面时,数据都会重复。每次刷新页面时都会发生这种情况。
实施例
它不应该这样做,但确实如此。我认为它与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);
答案 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']) !== '')
内。插入完成后最好取消设置。