2014-03-06 67 views
0

即時通訊工作的項目,但首先我會明白一件事。發送陣列[]從PHP到MySQL

我有2個輸入類型的文本字段的名稱=「名字[]」作爲一個數組(在我沒有jQuery的工作,但它將與它產生dinamically的例子),而不能使它到MySQL。

這裏是我有:的index.php

<html> 
<body> 

<form action="insert.php" method="post"> 
Firstname: <input type="text" name="firstname[]"> <br> 
Firstname 2: <input type="text" name="firstname[]"> 
<input type="submit"> 
</form> 

</body> 
</html> 

insert.php

<?php 
$con=mysqli_connect("localhost","inputmultiplicad","inputmultiplicado","inputmultiplicado"); 
// Check connection 
if (mysqli_connect_errno()) 
    { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 




$sql="INSERT INTO input_field (firstname) 
VALUES 
('$_POST[firstname]')"; 

if (!mysqli_query($con,$sql)) 
    { 
    die('Error: ' . mysqli_error($con)); 
    } 
echo "1 record added"; 

mysqli_close($con); 
?> 

的問題是:我怎麼能發送姓名[]數組到MySQL數據庫?

感謝您的時間

+0

你應該使用'foreach'。 請按照下面的示例:http://stackoverflow.com/questions/779986/insert-multiple-rows-via-a-php-array-into-mysql – AdiCrainic

+0

首先,閱讀有關SQL注入的內容:http:// stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php - 第二,你需要遍歷數組。 – Crontab

回答

0

以下應該會生成您需要的SQL語句。但請記住,在將它放入數據庫之前使用mysql_escape_string!或者甚至更好,使用PDO並綁定值。 :)

$values = array(); 
$sql = "INSERT INTO table (firstname) VALUES "; 
foreach ($_POST['firstname'] as $name) { 
    $values[] = "('".mysql_real_escape_string($name)."')"; 
} 
$sql .= implode(",", $values); 
+0

這不會修剪尾隨逗號並使用錯誤的轉義函數。 – Dan

+0

我收到此錯誤錯誤:您的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在第1行'{firstname} VALUES('Name 1'),('Name 2')'處使用正確的語法,正在使用MAMP 2 – garbanm

+0

感謝您指出錯字Dan。 :)但是,沒有尾隨逗號。 implode函數將處理該問題。 –

0

這應該工作:

//Escape user input 
$names = array_map('mysql_real_escape_string', $_POST[firstname]); 

//Convert array to comma-delimited list 
$names = rtrim(implode(',', $names), ','); 

//Build query 
$sql="INSERT INTO input_field (firstname) VALUES ('$names')"; 

注:一般情況下,最好使用參數化查詢比mysql_real_escape_string(),但後者是更安全比沒有逃脫的。

+0

嗨,感謝您的回覆,但不能正常工作,它會被清空到數據庫 – garbanm