1

伙计们,我正在尝试制作一个简单的评论系统,当我单击提交时,字段将自动保存在数据库中,然后使用 ajax 获取它。但是我重复获取所有数据而不是获取数据库中最近添加的数据,这里是代码:

 <div id="wrap-body">    
  <form action="" method="post">
  <input type="text" name="username" id="username">
  <input type="text" name="msg" id="msg">
  <input type="button" id="submit" value="Send">
 </form>
 <div id="info">
 </div>
 </div> 
<script>
 $(document).ready(function (){
$('#submit').click(function (){
 var username = $('#username').val();
  var msg = $('#msg').val();
  if(username != "" && msg != ""){
       $.ajax({
                  type: 'POST',
                  url: 'get.php',
                  dataType: 'json',
                  data:{ 'username' : username , 'msg' : msg},
                  success: function (data){
                    var ilan=data[0].counter;
                    var i = 0;
                      for(i=0;i<=ilan;i++){
                       $('#info').append("<p> you are:"+data[i].username+"</p> <p> your message  is:"+data[i].mesg);
                     }
                  }
              });
     }
     else{
      alert("some fields are required");
     }
 });
});
</script>

PHP:

   <?php
   $host='localhost';
   $username='root';
   $password='12345';
   $db = 'feeds';

    $connect = mysql_connect($host,$username,$password) or die("cant connect");
    mysql_select_db($db) or die("cant select the".$db);

    $username = $_POST['username'];
    $msg = $_POST['msg'];

    $insert = "INSERT INTO info(user_name,message) VALUES('$username','$msg')";
    if(@!mysql_query($insert)){
      die('error insertion'.mysql_error());
  }
    $get = "SELECT * FROM info ";
    $result=mysql_query($get)or die(mysql_error()); 
    $inside_counter =   mysql_num_rows($result);
    $data=array();
    while ($row = mysql_fetch_array($result))
   {
  $data[] = array(
    'username'=>$row['user_name'],
    'mesg'=>$row['message'],
    'counter'=>$inside_counter
   );
   }
    echo json_encode($data);
    ?>
4

2 回答 2

2
SELECT * 
FROM "table_name" 
ORDER BY "id" desc 
LIMIT 1

这是从表中获取最后一条记录的 SQL 查询。它返回最后插入的根据idid应该是一个自动增量字段。我认为这对你会有帮助。

于 2012-09-25T06:55:50.533 回答
0

这是因为您通过再次将表中的所有行返回给 ajax 调用

$get = "SELECT * FROM info ";

如果您确实再次返回所有这些,则必须在使用 jQuery 附加它们之前测试它们是否已经存在,也许只返回新插入的行。

或者

jQuery已经知道它发送给服务器的数据,只需返回成功true或false,然后将它附加到jQuery中,无需再次将数据返回给客户端

编辑

我不会为您编写代码,但也许这些建议可能会有所帮助

mysql_query($insert)

此处链接以供参考 - http://php.net/manual/en/function.mysql-query.php

将根据插入语句是否成功返回 true 或 false

您还可以通过调用来检查它是否确实插入了一行

mysql_affected_rows()

此处链接以供参考 - http://php.net/manual/en/function.mysql-affected-rows.php

然后假设插入成功(即来自 mysql_query($insert) 或 mysql_affected_rows() > 0 的为真)简单地返回成功(即类似于

 echo json_encode(true);

然后在客户端,您可以执行以下操作:

(仅限 jQuery Ajax 成功函数:)

  success: function (data){
        if (data) {
            $('#info').append("<p> you are:"+username +"</p> <p> your message  is:"+msg);
        }
        else
        {
             alert('There has been an error saving your message');
        }
    }

使用您刚刚用于发送请求的变量

(请注意此处提供的代码示例仅作为示例,不打算逐字使用)

不过有几点。您是否打算仅通过 ajax 发布数据?(即没有页面刷新)好像是这种情况,您需要从表单提交事件处理程序返回 false 以停止页面完整发布。此外,您似乎没有任何逻辑,或者不担心输入完整的重复项(即相同的用户名,相同的消息) - 不确定您是否要担心这一点。

我也可能会考虑通过 id 跟踪所有消息(尽管我不知道您的数据库结构),也许使用

mysql_insert_id()

链接在这里仅供参考 - http://php.net/manual/en/function.mysql-insert-id.php

这样每条消息都可以有一个唯一的 id,即使用户名和消息相同,也可能更容易建立重复

有很多方法可以解决这个问题。

无论如何希望有帮助

PS - 这些天通常不鼓励使用 mysql_ - 命令组,而是使用 mysqli_ 函数范围

于 2012-09-25T04:13:25.880 回答