我有一个奇怪的情况,我建立一个网站来跟踪支出,在我的网站上你可以在我的表中插入无限数量的“支出”或“账单”,这是使用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());
答案 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。