2010-11-05 62 views
0

好的我已完成98%的代碼,但最後一點掙扎。我創建一個訂貨系統,我從一個頁面取值,將它們發送到一個PHP頁面,並將其插入到MySQL數據庫是這樣的:訂購系統 - 每個訂單(不是行)在MySQL中的編號

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die("Cannot connect to mysql server"); 
      mysql_select_db($dbname) or die("Cannot select database"); 

      if (isset($_POST['data']) && is_array($_POST['data'])) { 
       foreach ($_POST['data'] as $row => $data) { 
        $result = mysql_query("INSERT INTO orders (id,project_ref,supp_short_code,om_part_no,description,quantity,cost_of_items,cost_total) VALUES('', '".$data['project_ref']."', '".$data['supp_short_code']."', '".$data['om_part_no']."', '".$data['description']."', '".$data['quantity_input']."', '".$data['cost_of_items']."', '".$data['cost_total_td']."') ") or die(mysql_error()); 
       } 
      } 

這是偉大的(並且我知道我沒有防止SQL注入等),但可能有多行被插入到數據庫使用上面的代碼,但我需要的是用戶以後能夠撤回訂單基於一個身份證號碼。那麼,我如何插入一個ID號到這個插入查詢,因此它匹配所有行,絕對是唯一的數據庫和理想的自動遞增(我知道這將是棘手考慮theres多行!)

回答

1

我想在這樣的情況下,做的是有兩個表,ordersorder_detail

orders表將有你的grand totalsorder datecustomer id

order_detail表將有一個條目爲每個單個項目.. part_no,quantity,cost,extended_cost,但會鏈接回orders表由order_id

你最終選擇,如:

SELECT * FROM orders JOIN order_detail ON orders.order_id = order_detail.order_id WHERE orders.order_id = '1'

2

orders表中添加一列,名稱爲BatchID。然後,在PHP中生成一個GUID,並相應地修改您的INSERT聲明。

See here有關生成GUID的詳細信息。

function GUID() 
{ 
    if (function_exists('com_create_guid') === true) 
    { 
     return trim(com_create_guid(), '{}'); 
    } 

    return sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535)); 
} 
+0

看起來不錯!我可以限制它的長度嗎? – benhowdle89 2010-11-05 12:26:24

1

假設你的「ID」字段是爲了保持每個訂單的自動增量ID,你會希望添加之前,當前的INSERT語句新的插入,將剛剛添加一條記錄到表與自動遞增主鍵。然後取這個新的主鍵,並將它與當前的表格相關聯,而不是當前的'id'或除了當前的'id'字段。

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die("Cannot connect to mysql server"); 
     mysql_select_db($dbname) or die("Cannot select database"); 

     if (isset($_POST['data']) && is_array($_POST['data'])) { 
      result = mysql_query("INSERT INTO orders_to_order SET order_primary = NULL"); 
      $orderId = mysql_insert_id(); 
      foreach ($_POST['data'] as $row => $data) { 
       $result = mysql_query("INSERT INTO orders (id,project_ref,supp_short_code,om_part_no,description,quantity,cost_of_items,cost_total) VALUES(".$orderId.", '".$data['project_ref']."', '".$data['supp_short_code']."', '".$data['om_part_no']."', '".$data['description']."', '".$data['quantity_input']."', '".$data['cost_of_items']."', '".$data['cost_total_td']."') ") or die(mysql_error()); 
      } 
     }