使用PHP / AJAX添加和更新db行

时间:2012-04-21 19:49:06

标签: php mysql ajax

我有一个奇怪的情况,我建立一个网站来跟踪支出,在我的网站上你可以在我的表中插入无限数量的“支出”或“账单”,这是使用AJAX完成的。

插入后,记录会显示在页面上,用户可以选择更新或删除记录。

我的问题是,当插入并回发记录时,我不知道该记录对表的ID是什么,因此更新功能无法正常工作。我已经尝试添加一个隐藏字段“随机密钥”,当用户插入记录时,会插入一个随机数,然后将其发回给我的更新功能,我似乎无法使其正常工作。

有人知道如何最好地执行此操作吗?

谢谢

我的代码......

PHP表格

 <form id='bill-upd'>
     <input type='hidden' value='".$info['rand']."' name='rand2' id='rand2'>
     <input type='hidden' value='".$info['id']."' name='billid' id='billid'>
     Total <input type='text' id='total' name='total' /><br />
     Bill name<input type='text' id='bill-name' name='bill-name' /><br />
     Bill descriptiion <input type='text' id='bill-description' name='bill-description' /><br />
     Bill colour<input type='text' id='bill-colour' name='bill-colour' />
     <input type='button' value='submit' onClick='updateBill();' />
 </form>   

更新PHP页面

   $uid = $_SESSION['oauth_id'];
   $id = mysql_real_escape_string($_POST['billid']);       
   $bill = mysql_real_escape_string($_POST['total']);
   $billname = mysql_real_escape_string($_POST['bill-name']);
   $billdescription = mysql_real_escape_string($_POST['bill-description']);
   $billcolour  = mysql_real_escape_string($_POST['bill-colour']);
   $rand = mysql_real_escape_string($_POST['rand2']);



        #update Record
       $query = mysql_query("UPDATE `outgoings` SET id = '$id', user_id = '$uid', bill = '$bill', bill_name = '$billname', bill_description = '$billdescription', bill_colour = '$billcolour', rand = '$rand' WHERE user_id = '$uid' AND rand = '$rand' ") or die(mysql_error());

2 个答案:

答案 0 :(得分:1)

在插入新记录时,从表中获取 新添加的 ID(假设您有每条记录的唯一ID)并将其作为部分返回结果你在ajax通话后返回。然后,您可以使用该ID更新记录。

您可以使用以下脚本将要更新的详细信息发送到更新页面

$("#bill-upd").submit(function(e){
   e.preventDefault();

     $.post("update.php",{ 
                     billid: $("#billid").val()
                     total: $("#total").val();
                     bill-name : $("#bill-name").val();
                     bill-description :  $("#bill-description").val();
                     bill-color: $("#bill-color").val();
                     },
                     function(result){
                        //Update / Show a message to user about the action. 
                        //alert(result);   
                     });    
     });
  });

在您的update.php页面中,更改您的查询

$query = mysql_query("UPDATE `outgoings` user_id = '$uid', bill = '$bill', bill_name = '$billname', bill_description = '$billdescription', bill_colour = '$billcolour', rand = '$rand' WHERE id = '$uid' AND rand = '$id' ") or die(mysql_error());

假设ID是表中唯一的id / Primary键,我们可以使用它来更新表记录。

答案 1 :(得分:1)

使用INSERT查询时,可以使用mysql_insert_id()获取为插入行创建的AUTO_INCREMENT字段的值。您可以使用JSON发送回来,以便Javascript知道您新插入的行的ID。但是,考虑另一个用户(使用不同的浏览器)是否添加了一行,而另一个用户打开了该页面,Javascript将无法获得新行。例如:

用户1 加载页面并且看不到任何行 用户1 添加第1行。
用户2 加载页面并看到第1行。
用户2 添加第2行,现在看到第1,2行 用户1 添加第3行,但只能看到第1,3行

现在用户2 只会看到第1,2行

每次查询后你应该真的是SELECT * from table,以确保你拥有所有行(包括其他用户可能插入的行)。您还应该考虑使用PDO