好的,首先我知道我还没有检查用户输入,但代码有点乱,但它目前正在测试中,所以它不是一个实时系统。
我在一个页面上有一个表,我正在使用jQuery遍历每一行并将值作为数组发送到php页面,该页面遍历每一行并更新mysql db中的相关行。只要您只想编辑您所拥有的内容,这就太棒了。如果用户向表中添加了另一行,它仍会发送所有行,但如果找不到要更新的相关行,我需要插入php,这有意义吗?
这是我更新的php更新代码:
if (isset($_POST['data']) && is_array($_POST['data'])) {
foreach ($_POST['data'] as $row => $data) {
$sql = "UPDATE `orders` SET supp_short_code='".$data['supp_short_code']."', project_ref='".$data['project_ref']."', om_part_no='".$data['om_part_no']."', description='".$data['description']."', quantity=".$data['quantity_input'].", cost_of_items='".$data['cost_of_items']."', cost_total='".$data['cost_total_td']."' where order_id = ".$data['order_id']." and row_id = ".$data['index']."";
$result = mysql_query($sql);
}
}
“index”是第一页上表格的行索引,如果这有帮助吗?
答案 0 :(得分:4)
首先,该查询难以置信不安全。您应该使用mysql_real_escape_string
。
其次,您可以测试索引属性是否存在,但这会使您面临不良用户数据的风险(始终假设用户数据可能混乱)。如果rowid
和orderid
在表格中形成一个唯一键,那么您最好做的就是使用ON DUPLICATE KEY UPDATE
:
$sql = 'INSERT INTO `orders` VALUES (' . mysql_real_escape_string( $data['supp_short_code'] ) /* ... */ ' ON DUPLICATE KEY UPDATE ' // your original sql
答案 1 :(得分:3)
只需创建一个IF语句来检查$ data ['index']是否存在。如果没有,则创建一个insert语句而不是更新。
if (isset($_POST['data']) && is_array($_POST['data'])) {
foreach ($_POST['data'] as $row => $data) {
if($data['index']){
$sql = "UPDATE `orders` SET supp_short_code='".$data['supp_short_code']."', project_ref='".$data['project_ref']."', om_part_no='".$data['om_part_no']."', description='".$data['description']."', quantity=".$data['quantity_input'].", cost_of_items='".$data['cost_of_items']."', cost_total='".$data['cost_total_td']."' where order_id = ".$data['order_id']." and row_id = ".$data['index']."";
} else {
$sql = /*Create INSERT statement*/;
}
$result = mysql_query($sql);
}
}
答案 2 :(得分:1)
由于我们正在处理mysql,因此REPLACE可能在这里使用。 http://dev.mysql.com/doc/refman/5.0/en/replace.html