2010-11-17 62 views
1

好的,首先我知道我沒有檢查過用戶輸入,代碼有點亂,但是它現在在測試中,所以它不是一個實時系統。如果行不存在,插入

我在一頁上有一個表,我使用jQuery來通過每一行,並將值作爲數組發送到一個php頁面,該頁面遍歷每一行並更新mysql數據庫中的相關行。只要你只想編輯你所擁有的東西,那就太棒了。如果用戶向表中添加另一行,它仍然會發送所有行,但如果它沒有找到相關的行進行更新,我需要插入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); 
       } 
      } 

的「指數」是從表中的第一頁上的行索引是否有幫助?

+0

將整個數組提交給PHP表單處理程序效率不高。爲什麼不提交受影響的行? – stillstanding 2010-11-17 12:29:03

+0

但如果他們更改現有的行並添加一個新的行,我需要發送所有它可以更新並插入... – benhowdle89 2010-11-17 13:12:45

回答

3

只需創建一個IF語句來檢查$ data ['index']是否存在。如果不是,則創建一個插入語句而不是更新。

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); 
      } 
     } 
4

首先,查詢是難以置信不安全。你應該使用mysql_real_escape_string。其次,您可以測試索引屬性是否存在,但這會讓您面臨不良用戶數據的風險(始終假設用戶數據可能會混亂)。如果rowidorderid形成對錶的唯一關鍵,那麼你大概什麼更好做的是使用ON DUPLICATE KEY UPDATE

$sql = 'INSERT INTO `orders` VALUES (' . mysql_real_escape_string($data['supp_short_code']) /* ... */ ' ON DUPLICATE KEY UPDATE ' // your original sql