2013-10-25 67 views
0

任何人都可以看到我在做什麼錯了嗎? 我想用下面的代碼從一個陣列添加多個值到一個SQL表:如何從表單中將數組值添加到數據庫中

foreach($_POST['serialNumber'] as $i => $serialNumber) 
     { 
     // Get values from form. 
      $request_id = mysql_real_escape_string($req_id); 
      $serialNumber = mysql_real_escape_string($_POST['serialNumber'][$i]); 
      $machineType = mysql_real_escape_string($_POST['machineType'][$i]); 
      $machineModel = mysql_real_escape_string($_POST['machineModel'][$i]); 

     // Add to database 
     $sql = "INSERT INTO serialnumbers(
       request_id, serial_type, serial_model, serial_number 
       ) VALUES (
       '".$request_id."','".$machineType."','".$machineModel."','".$serialNumber."' 
       )"; 
     } 

無論出於何種原因,只有最後一個值被存儲在表中。我在這裏錯過了什麼?

+4

這是因爲你沒有在循環的每次迭代中執行插入查詢。這意味着它構建所有查詢,但只有最後一個被執行。另一方面,你可能想使用[PDO準備語句](http://stackoverflow.com/questions/1457131/php-pdo-prepared-statements)。他們會讓你的代碼看起來更乾淨。 – NullUserException

+0

在每次迭代中,您都要創建一個插入語句。在循環結束時,您將擁有一個插入語句,並在其中插入最後一個值。然後你執行插入語句,你只會得到插入的最後一個值。 – melc

+0

請顯示您的html –

回答

0

正如在評論中所示,這是不可抗拒的建議你測試一下,對於PDO的預處理語句,你循環:

// 
// PDO 
// 
try { 
    $pdo = new PDO("mysql:host=localhost;dbname=MyDatabase", $user, $pass); 
} catch (PDOException $e) { 
    echo $e->getMessage(); 
    exit; 
} 
// 
$sql = "INSERT INTO serialnumbers (
    request_id, serial_type, serial_model, serial_number 
) VALUES (
    :request_id, :serial_type, :serial_model, :serial_number 
)"; 
// 
$stmt = $pdo->prepare($sql); 

$n = count($_POST['serialNumber']); 

for($i = 0; $i < $n; $i++) 
{ 
    // Get values from form. 
    $stmt->execute(array(
    ":request_id" => $req_id, 
    ":serial_type" => $_POST['machineType'][$i], 
    ":serial_model" => $_POST['machineModel'][$i], 
    ":serial_number" => $_POST['serialNumber'][$i] 
)); 
} 
0

有了這個方法(mysql_),這樣的事情應該工作的折舊通常的注意事項(我可能會搞砸了語法一點點)

$values = array; 

foreach($_POST['serialNumber'] as $i => $serialNumber) 
    { 
    // Get values from form. 
     $request_id = mysql_real_escape_string($req_id); 
     $serialNumber = mysql_real_escape_string($_POST['serialNumber'][$i]); 
     $machineType = mysql_real_escape_string($_POST['machineType'][$i]); 
     $machineModel = mysql_real_escape_string($_POST['machineModel'][$i]); 

    // Add to database 
    $values[] = "(
      '".$request_id."','".$machineType."','".$machineModel."','".$serialNumber."' 
      )"; 
    } 

$sql = "INSERT INTO serialnumbers(
      request_id, serial_type, serial_model, serial_number 
      ) VALUES ".implode($values,',').";"; 
相關問題