1

我遇到了一些奇怪的情况,我正在建立一个网站来跟踪支出,在我的网站上,您可以在我的表格中插入无限数量的“支出”或“账单”,这是使用 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());
4

2 回答 2

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 / 主键,我们可以使用它来更新表记录。

于 2012-04-21T19:54:30.787 回答
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

于 2012-04-21T19:58:29.567 回答