如何在不获取所有数据的情况下获取表中添加的当前值

时间:2012-09-25 04:01:41

标签: php jquery ajax

我试图创建一个简单的评论系统,当我点击提交时,字段将自动保存在数据库中,然后使用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);
    ?>

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

因为您将表中的所有行再次返回到

的ajax调用
$get = "SELECT * FROM info ";

如果你再次返回所有这些,你将不得不测试它们是否已经存在,然后再使用jQuery附加它们 也许只返回新插入的行。

jQuery已经知道它发送给服务器的数据,只返回成功为true或false,然后如果jQuery为true则附加它,不需要再将数据返回给客户端

修改

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

mysql_query($insert)

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

将返回true为false,具体取决于insert语句是否成功

您还可以通过调用

来检查它是否实际插入了一行
mysql_affected_rows()

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

然后假设插入成功(即来自mysql_query($ insert)或mysql_affected_rows()&gt; 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_函数范围代替