【问题标题】:Row is inserted into database everytime I refresh the page每次刷新页面时都会将行插入数据库
【发布时间】:2014-06-21 15:06:08
【问题描述】:

每次我尝试刷新页面时,我都会得到一个新行。我尝试阅读许多有关此问题的帖子,但由于我是数据库编程新手,因此我无能为力。

我不知道这个值是从哪里来的,因为同一个值会一遍又一遍地重复。

我的代码。

<?php
require('connect.php');

$sql="CREATE TABLE test(id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
user VARCHAR(25),message LONGTEXT)";

if($sql==true){
$res=mysql_query( $sql);

}
?>

<?php

$user=null;
$message=null;

if(isset($_POST['user'])){
$user=$_POST['user'];
}
if(isset($_POST['message'])){
$message=$_POST['message'];
}


 if(!empty($_POST)){

if($user&&$message){
$insert=mysql_query("INSERT INTO test(user,message)VALUES('$user','$message')");
}
else{
echo "please fill out the fields";
}
}
?>



<html>
<body>
<form action="database.php" method="post">
<p><label for="user">Name:</label><br/>
<input type="text" name="user" id="user"/></p>
<p><label for="message">Message:</label><br/>
<textarea ="message" name="message"> </textarea></p>
<button type="submit" name="submit" value="send">Send Message:</button>
</form>
 <br/><br/><tr><td>The Users Comments:</td><td><br/><br/>
</html>


<?php
$query=mysql_query("SELECT * FROM test ORDER BY id DESC");
while($row=mysql_fetch_ASSOC($query)){

$name=$row["user"];
$message=$row["message"];

echo "username:",$name,'<br/>'," Messages: ",$message,'<br/>','<br/>';
}

?>

【问题讨论】:

  • 而那个“相同的价值”是……?
  • 这是您要寻找的答案吗:stackoverflow.com/questions/4327236/… ?
  • 非常感谢,我会看的。
  • 旁注:您的&lt;textarea ="message" name="message"&gt; &lt;/textarea&gt;&lt;/p&gt; 包含一个空格,应该读作&lt;textarea ="message" name="message"&gt;&lt;/textarea&gt;&lt;/p&gt; - 这将导致在要写入文本区域的文本之前将一个空格插入数据库,并可能导致以后的问题。另外,提交后最好使用header重定向到另一个页面,包括表单和PHP/SQL的单独文件,这可能会解决问题。
  • 好了,解决了一个问题 ;-)(不客气)。

标签: php html mysql row repeat


【解决方案1】:

问题是每次刷新页面时,浏览器都会重新发布相同的数据。要解决此问题,您应该考虑在您的页面中实现 Post, Redirect, Get 模式。

从根本上说,这意味着在 POST 成功后(即插入行),您应该重定向到另一个页面。这有效地阻止了用户重新发布相同数据的能力。

上面的链接很好地概述了如何实现...

【讨论】:

  • 感谢“院长”您的帖子很有帮助。我会读它,希望我能学到更多。
【解决方案2】:

我在您的代码中没有发现问题。可能当您第一次发布数据然后刷新页面时,数据会再次发布。如果浏览器重新发布数据,大多数浏览器(如 firefox)都会得到确认。 编辑: 为避免这种情况,您必须使用重定向到 GET 方法。 see this

【讨论】:

  • 我也是,所以我想在这里问。我会尝试更换浏览器希望它能解决问题。谢谢。
【解决方案3】:

尝试编辑这个

块引用

 if(!isset($_POST)){

     if($user && $message){

     $insert=mysql_query("INSERT INTO test(user,message)VALUES($user,$message)");

}

并确保 ctrl+f5 然后刷新页面

【讨论】:

  • 条件不成立,什么都不能插入数据库,因为条件为假。
  • 我试过没有否定符号的isset,但出现了同样的问题。
【解决方案4】:

在插入之前检查数据库中这些值是否存在于数据库中 喜欢

if(!empty($_POST)) {
    if($user && $message) {
        //check if this user and message in present database or not 
        $query = mysql_query("SELECT * FROM test WHERE user='".$user."' AND message='".$message."'");
        $count = mysql_num_rows($query);

        if ($count > 0 ){ // if $count is greater than 0 means values exists in database then 
            echo "Data exists";
        }
        else {
            // insert 
            $insert=mysql_query("INSERT INTO test(user, message) VALUES ('$user','$message')");
        }
    }
    else {
        echo "please fill out the fields";
    }

这只是一个示例,您可以根据自己的要求对其进行修改:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 2018-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多