2013-07-09 169 views
0

我有一段時間試圖找出如何遍歷我發佈的表單數據並插入到MySQL。我的數據庫表包含兩列 「名」 和 「年齡」PHP從數組插入到mysql

我的形式:

<form action="form.php" method="post"> 

<input type="text" name="data[][name]" value=""/> 
<input type="text" name="data[][age]" value=""/> 
<input type="text" name="data[][name]" value=""/> 
<input type="text" name="data[][age]" value=""/> 
<input type="text" name="data[][name]" value=""/> 
<input type="text" name="data[][age]" value=""/> 
<input type="text" name="data[][name]" value=""/> 
<input type="text" name="data[][age]" value=""/> 
<input type="text" name="data[][name]" value=""/> 
<input type="text" name="data[][age]" value=""/> 
<input type="text" name="data[][name]" value=""/> 
<input type="text" name="data[][age]" value=""/> 

<input type="submit" value="submit" name="submit" /> 
</form> 

PHP:

<?php 
// Create Mysqli object 
$db = new mysqli('localhost', 'root', 'root', 'database'); 

// Create statement object 
$stmt = $db->stmt_init(); 


if (isset($_POST['submit'])) { 

// Create a prepared statement 
if($stmt->prepare("INSERT INTO contact (name, age) VALUES (?, ?)")) { 

    // Bind your variables to replace the ?s 
    $stmt->bind_param('si', $name, $age); 


    $returnedData = $_POST['data']; 

    foreach($returnedData as $data) { 
     $name = $data['name']; 
     $age = $data['age']; 
     $stmt->execute(); 
    } 


    // Close statement object 
    $stmt->close(); 
} 


} 

// Close Connection 
mysqli_close($link); 

?> 
+0

@戴夫:不,你只綁定變量一次。它(幾乎)在內部實質上執行'param s =&$ name',建立對指定變量的引用。更改變量的值,並在下一次執行()準備好的語句時,它會得到該更改的值。 –

+0

也可以做一個'print_r($ returnedData)'或'print_r($ _ POST)'。你的數組結構/數據不是你認爲的那樣。 – Sean

+0

和'var_dump($ stmt-> execute)'。所有的數據庫操作都只是假設成功。 –

回答

2

目前的形式返回此陣 -

$_POST['data'] = array(
         0 => array('name'=> 'string'), 
         1 => array('age'=> #), 
         2 => array('name'=> 'string'), 
         3 => array('age'=> #), 
         4 => array('name'=> 'string'), 
         5 => array('age'=> #), 
         6 => array('name'=> 'string'), 
         7 => array('age'=> #), 
         8 => array('name'=> 'string'), 
         9 => array('age'=> #), 
         10 => array('name'=> 'string'), 
         11 => array('age'=> #); 

所以喲ü要麼需要重做你的形式給予的名字/年齡相同的密鑰 -

<form action="form.php" method="post"> 

<input type="text" name="data[0][name]" value=""/> 
<input type="text" name="data[0][age]" value=""/> 
<input type="text" name="data[1][name]" value=""/> 
<input type="text" name="data[1][age]" value=""/> 
<input type="text" name="data[2][name]" value=""/> 
<input type="text" name="data[2][age]" value=""/> 
<input type="text" name="data[3][name]" value=""/> 
<input type="text" name="data[3][age]" value=""/> 
<input type="text" name="data[4][name]" value=""/> 
<input type="text" name="data[4][age]" value=""/> 
<input type="text" name="data[5][name]" value=""/> 
<input type="text" name="data[5][age]" value=""/> 

<input type="submit" value="submit" name="submit" /> 
</form> 

- 或 -

改變你的foreach循環 -

$returnedData = $_POST['data']; 

for($i=0;$i<count($returnedData);$i+=2){ 
    $name = $returnedData[$i]['name']; 
    $age = $returnedData[$i+1]['age']; 
    $stmt->execute(); 
} 
+1

你打敗了我! –

+0

我收到一個錯誤..有什麼想法? – user1040259

+0

什麼是錯誤? – Sean