2016-09-27 27 views
0

我想插入一些類似購買細節。我創建了兩張表,購買& purchase_items。所以每個購買記錄可以有多個項目。 我可以將一條記錄插入到購買表中,但我需要的是將行添加到購買時添加到列表中的項目。 代碼如下PHP,發佈未知文本字段值,發佈到PHP文件,並插入數據庫作爲行存在

$stmt = $conn->prepare("INSERT INTO `purchase` (`purchaseRef`, `vendorName`, `date`) VALUES (?, ?, ?)"); 
$stmt->bind_param("sss", $reference, $vendorName, $date); 

$reference = $_POST["txtRef"]; 
$vendorName = $_POST["vendorName"]; 
$date  = date("Y-m-d"); 

if($stmt->execute()) { 
    $lastID = $stmt->insert_id; 

    // i want to add unlimited items, i wrote as follows 

    foreach ($_POST as $key => $value) { 

    $stmt2 = $conn->prepare("INSERT INTO `purchase_items` (`prchseID`, `ctgryNo`, `prdctID`, `quantity`, `price`) VALUES (?, ?, ?, ?, ?)"); 
    $stmt2->bind_param("sssss", $lastID, $ctgryID, $prdID, $qnty, $price); 


    $param_name = "ctgryID"; 
    if(substr($key, 0, strlen($param_name)) == $param_name) { 
     ctgryID=$value; 
    } 
    $param_name2 = "prdID"; 
    if(substr($key, 0, strlen($param_name2)) == $param_name2) { 
     $prdID=$value; 
    } 
    $param_name3 = "qnty"; 
    if(substr($key, 0, strlen($param_name3)) == $param_name3) { 
     $qnty=$value; 
    } 
    $param_name4 = "price"; 
     if(substr($key, 0, strlen($param_name4)) == $param_name4) { 
     $price=$value; 
    } 

    if(!$stmt2->execute()) { 
     echo 'error: '.$stmt2->error; exit(); 
    } 
    } 

} 

請幫

+2

你在這裏有什麼問題? –

+0

您不需要多次執行'prepare()'。節省開銷並將其移到循環之外 – Machavity

+1

這是一個問答網站。如果你實際上沒有提出問題,那麼你很難得到答案。 –

回答

0

你這裏的問題是,你遍歷$_POST,當你不就得了。

$_POST已經有你需要插入的所有值,你可以訪問它們不foreach,只是用[]

$lastID = $stmt->insert_id; 

$stmt2 = $conn->prepare("INSERT INTO `purchase_items` (`prchseID`, `ctgryNo`, `prdctID`, `quantity`, `price`) VALUES (?, ?, ?, ?, ?)"); 
$stmt2->bind_param("sssss", 
    $lastID, 
    $_POST['ctgryID'], 
    $_POST['prdID'], 
    $_POST['qnty'], 
    $_POST['price'] 
); 
if (!$stmt2->execute()) { 
    echo 'error: '.$stmt2->error; exit(); 
} 

更新:更多產品及其價格你形成inputs應該使用[]符號:

First product 
<input type="text" name="ctgryID[]" value="" /> 
<input type="text" name="prdID[]" value="" /> 
<input type="text" name="qnty[]" value="" /> 
<input type="text" name="price[]" value="" /> 
Second product 
<input type="text" name="ctgryID[]" value="" /> 
<input type="text" name="prdID[]" value="" /> 
<input type="text" name="qnty[]" value="" /> 
<input type="text" name="price[]" value="" /> 
Third product 
<input type="text" name="ctgryID[]" value="" /> 
<input type="text" name="prdID[]" value="" /> 
<input type="text" name="qnty[]" value="" /> 
<input type="text" name="price[]" value="" /> 
And more 

在服務器端您使用foreach像硫s:

// print_r your `$_POST` and you'll see subarrays there 

$stmt2 = $conn->prepare("INSERT INTO `purchase_items` (`prchseID`, `ctgryNo`, `prdctID`, `quantity`, `price`) VALUES (?, ?, ?, ?, ?)"); 
$stmt2->bind_param("sssss", 
    $lastID, 
    $ctgryID, 
    $prdID, 
    $qnty, 
    $price 
); 
foreach ($_POST['ctgryID'] as $index => $value) { 
    $ctgryID = $value; 
    // here's the magic - use items from other 
    // $_POST subarrays with the same indexes 
    $prdID = $_POST['prdID'][$index]; 
    $qnty = $_POST['qnty'][$index]; 
    $price = $_POST['price'][$index]; 

    if (!$stmt2->execute()) { 
     echo 'error: '.$stmt2->error; exit(); 
    } 
} 
+0

我想,這就是說,如果你有一個名爲ctgryID的文本字段,但如果你有更多的產品與他們的價格? –

+0

查看更新。 –

+0

哇,這是現在的作品,問題解決了......我感謝你的幫助,非常感謝你@u_mulder –