2014-04-29 125 views
0

我在抽取數組插入數據庫時​​遇到問題。我的形式接受的輸入多個和動態數,所以我有在一個陣列中的數據與輸入phonenos []和phonetypes []:PHP mysql:從數組插入數據

<form name="add" action="" method="POST"> 
<input name="name" type="text" placeholder="Name"></input><br /> 
    <input name="qty" type="text" placeholder="Qty"></input><br /> --> 
    <input class="form-control required" name="phonenos[]" maxlength="14" type="text" placeholder="number..."><br> 
    <select class="form-control" name="phonetypes[]"> 
     <option value="0">Choose a phone type</option> 
     <option value="Main">Main</option> 
     <option value="Fax">Fax</option> 
     <option value="Mobile/Direct">Mobile/Direct</option> 
    </select> 
    <div id="addmore"> 
     <input type="button" value="Add More" onClick="addRow(this.form)"></input> 
    </div> 
    <input type="submit" value="submit" name="action"></input> 
</form> 

以我PDO查詢:

..... first query insertion... 

$phonenos = $_POST['phonenos']; 

foreach($_POST['phonenos'] as $phoneno) { 
    $phoneno; 
} 

$phonetypes = $_POST['phonetypes']; 

foreach($_POST['phonetypes'] as $phonetype) { 
    $phonetype; 
} 

$sql = 'INSERT INTO phone (p_id, phoneno, phonetype) values (:p_id, :phoneno, :phonetype)'; 
$query = $conn->prepare($sql); 
$query->execute(array(
     ':p_id'=>$lastid, 
     ':phoneno'=>$phoneno, 
     ':phonetype'=>$phonetype 
    )); 

所以,我沒有一個var_dump變量$ phoneno和$ phonetype提交多個電話號碼後,它只打印出最後一個號碼和類型,而我想整個提交的列表。如何獲取所有數據,以便將其插入數據庫中?

+0

您是否已經多次在表單元素中顯示代碼的內部部分 - 或者您有多個表單元素嗎? – CBroe

+0

@CBroe在窗體內多次。 – Noobtastic

回答

0

我通過for循環找出解決方案。

$phones = $_POST['phones']; 
$phonetypes = $_POST['phonetypes']; 

for($i = 0, $j = 0; $i <= $phones, $j <= $phonetypes; $i++, $j++) { 
    $phone = $phones[$i]; 
    $phonetype = $phonetypes[$j]; 

    $sql = "INSERT INTO phone (p_id, phone, phonetype) values (:p_id, :phone, :phonetype)"; 
    $query = $conn->prepare($sql); 
    $query->execute(array(
     ':p_id'=>$lastid, 
     ':phone'=>$phone, 
     ':phonetype'=>$phonetype 
    )); 
}  
+0

無需一遍又一遍地準備相同的查詢。你可以移動'$ sql = ...; $ query = $ conn-> prepare($ sql);'退出循環,他們只需要運行一次。 –

0

如果你想要在同一列插入所有的數字,那麼我能想到的最好的解決方案是在插入db之前序列化它們。

$phonenos = serialize($_POST['phonenos']); 
$phonetypes = serialize($_POST['phonetypes']); 

$sql = 'INSERT INTO phone (p_id, phoneno, phonetype) values (:p_id, :phoneno, :phonetype)'; 
$query = $conn->prepare($sql); 
$query->execute(array(
     ':p_id'=>$lastid, 
     ':phoneno'=>$phonenos, 
     ':phonetype'=>$phonetypes 
    ));