2017-06-05 124 views
0

好吧,在此之前,我是一名PHP初學者。 所以原諒我這個愚蠢的問題。將動態輸入名稱的數據保存到數據庫?

假設id_user'1'有2個項目,所以它會爲每個項目創建2個輸入表單。

這些是輸入形式:

<input value="0" type="text" name="store_<?php echo $id= "I got this value from id.item in database, in this case '5'" ?>" required="required"> 

<input value="0" type="text" name="take_<?php echo $id= "I got this value from id.item in database, in this case '5'" ?>" required="required"> 

<input value="0" type="text" name="store_<?php echo $id= "I got this value from id.item in database, in this case '6'" ?>" required="required"> 

<input value="0" type="text" name="take_<?php echo $id= "I got this value from id.item in database, in this case '6'" ?>" required="required"> 

注意:值take_ {ID}和{store_ ID}是從數據庫表 '項目' coloumn 'id_item' 檢索。

用戶輸入這些值:

*value 'store' for id_item 5 is 3 
*value 'take' for id_item 5 is 2 
*value 'store' for id_item 6 is 1 
*value 'take' for id_item 6 is 1 

如何保存價值「存儲」,並從用戶輸入「拿」數據庫及其相關的ID? 考慮1個用戶可以有多個項目。

這是表格項目。

->id_user (referencing id_user from user's table) 
    ->id_item # this primary key 
    ->Take 
    ->Store 

所以最終的結果會是這樣的:

id_user : 1 
id_item : 5 
Store : 3 
Take : 2 

而且這樣

id_user : 1 
id_item : 6 
Store : 1 
Take : 1 

我一直在用Google搜索了一整天,我想用正則表達式模式「store_ '和'take_'應該這樣做?或者有另一種方法來完成這個?
三江源:)

+1

這豈不是更容易使用的陣列,例如:'<輸入值=「0」類型=「文本」名稱=「店[]。 .. />' - 那麼你可以'foreach($ _ POST ['store']爲$ id => $ value){...}' – CD001

+0

你想舉個例子嗎? @ CD001 – Dika

回答

0
Set You input like this 
<input value="0" type="text" name="store[]" required="required"> 

<input value="0" type="text" name="take[]" required="required"> 

<input value="0" type="text" name="store[]" required="required"> 

<input value="0" type="text" name="take[]" required="required"> 

    and get this value on backside like this 
    $postdata=$_POST; 
    $count= $postdata['store']; 
    for($i=0;$i<$count;$i++){ 
     echo $postdata['store'][$i]; 
     echo $postdata['take'][$i]; 
    } 
die();  
see your store and take value 
+0

好吧,它 – Dika

+0

你需要在db上存儲多少個輸入和存儲輸入? –

+0

取決於用戶。有多少用戶有物品。如果用戶有1個物品,則它會創建2個輸入,一個用於存儲新值的項目,另一個拿它。 – Dika

0

說你生成的HTML從PHP循環<input ... />領域,是這樣的:

foreach($dbResult as $item) { 
    echo "<input type=\"text\" name=\"store[{$item->getId()}]\" />\n" 
     . "<input type=\"text\" name=\"take[{$item->getId()}]\" />\n"; 
} 


這應該給你一個$_POST數組像這樣(使用用戶輸入值在你的例子):

Array 
(
    [store] => Array 
     (
      [5] => 3 
      [6] => 1 
     ) 

    [take] => Array 
     (
      [5] => 2 
      [6] => 1 
     ) 

) 

storetake數組鍵是項目ID

然後,您可以使用鍵從任意陣列產生的循環和數據插入到你的數據庫(使用PDO爲例 - 錯誤就需要在實際環境中處理):

if(!empty($_POST['store'])) { 

    // we can use the keys from just the `store` array 
    // as they'll be the same as those in the `take` array 
    foreach(array_keys($_POST['store']) as $itemId) { 

     $userId = $_SESSION['user_id']; // from the session for example... 
     $storeValue = $_POST['store'][$itemId]; 
     $takeValue = $_POST['take'][$itemId]; 

     $qry = "INSERT INTO item(item.id_user, item.id_item, item.store, item.take) " 
      . "VALUES(:user_id, :item_id, :store_value, :take_value)"; 

     $stmt = $db->prepare($qry); 
     $stmt->bindParam(':user_id', $userId, PDO::PARAM_INT); 
     $stmt->bindParam(':item_id', $itemId, PDO::PARAM_INT); 
     $stmt->bindParam(':store_value', $storeValue, PDO::PARAM_INT); 
     $stmt->bindParam(':take_value', $takeValue, PDO::PARAM_INT); 
     $stmt->execute(); 
    } 
} 
0

後幾小時搜索最後我找到了答案
我決定改變一點輸入表單。

<input type="text" name="<?php this is id_item?>[0]"> // this array [0] will be assign for 'store' section 

<input type="text" name="<?php this is id_item?>[1]"> // this array [1] will be assign for 'take' section 

我還加1種輸入類型=隱藏檢索id_item

<input type="hidden" name="<?php this is id_item ?>[2]" value="<?php this is id_item ?>"> //this array [2] will be assign for send 'id_item' value. 

環的內容接收塔數據

for($i=0;$i<How much row i have;$i++){ 
     $store=intval($my_array[$i][0]); 
     $take=intval($my_array[$i][1]); 
     $amount=$store-$take; 
     $id_item=$my_array[$i][2]; 
     ///////////////////////////////////// 
     And do insert command to database right here 

它不漂亮,我知道,但它將完成這項工作。

三江源回答和評論對我的問題:)

相關問題