2012-03-30 147 views
-3

我已經創建了一個HTML表單,用戶可以在其中提交姓名,電子郵件和語言技能。由於用戶可以說多種語言,用戶可以通過點擊「添加」按鈕來生成額外的行。使用MySQLi Prepared Statement將多行數據輸入數據庫?

然後表單將被提交併輸入到MySQL數據庫中。我用兩個表來保存接收到的數據,而用戶ID在第一個表將被auto_incremented:

| (user-id) | name | email| 
| user-id | language | proficiency| 

現在我想要寫PHP代碼,它看起來是這樣的:

$name = $_POST['name']; 
$email = $_POST['email']; 

$add_table1 = $mysqli->prepare("INSERT INTO table1 (name, email) VALUES (?, ?)"); 
$add_table2 = $mysqli->prepare("INSERT INTO table2 (user_id, language, proficiency) VALUES (?, ?, ?)"); 

$add_table1->bind_param("ss", $name, $email); 
$add_table1->execute(); 
$user-id = $mysqli->insert_id; 

foreach($_POST['language'] as $index => $language) { 
    $index = intval($index); 
    $language = mysql_real_escape_string($language); 
    $proficiency = mysql_real_escape_string($_POST['proficiency'][$index]); 
    $add_table2->bind_param("iss", $user-id, $language, $proficiency); 
    $add_table2->execute(); 
} 
$add_table1->close(); 
$add_table2->close(); 
$mysqli->close(); 

表應該是這樣的

| 1 | Mark | [email protected] | 
| 2 | Sue | [email protected] | 

|1 | English | perfect | 
|1 | Spanish | awesome | 
|2 | English | great | 
|2 | French | ok | 
|2 | Korean | fluent | 

然而,我的碼錶1看起來不錯,但表2是這樣的

| 1 | | | 
| 2 | | | 

有人可以幫忙嗎?謝謝!

+1

爲什麼在這裏使用mysql_real_escape_string? – 2012-03-30 09:39:48

+1

投票結束不是一個真正的問題。要求人們尋求幫助,因爲語法錯誤導致的代碼無法工作,這絕對沒有意義。 – 2012-03-30 09:43:34

回答

2

我需要指出的一件事是,您不要將mysql_real_escape_string與準備好的語句一起使用。

另一件事是$user-id不是一個有效的變量名稱。你不能使用連字符。

編輯:

它打開錯誤報告和輸出時出現任何故障,mysqli/mysqli_stmt::$error一件好事。大多數問題都可以通過這些解決。

+0

-1究竟是什麼? – MichaelRushton 2012-03-30 09:44:55

+0

你認爲問題在於mysql_real_escape_string嗎?我會拿出來看看它是否有效。是的,$ user-id實際上只是$ userid;我在那裏放了一個破折號(這很愚蠢:() – nubicurio 2012-03-30 09:45:16

+1

@nubicurio所以downvote是因爲你發佈了一個無效名稱的變量,你「澄清」而不會這麼說,因爲你被建議不要使用mysql_real_escape_string MySQLi與準備好的語句結合在一起嗎?您實際上對此答案有了一個很好的建議,我建議您聽一下。 – 2012-03-30 09:48:28

1

您的php mysqli代碼看起來不錯。你確定你正在檢索POST值嗎? int foreach循環在執行查詢前打印$ language和$ proficiency

+0

我會看看我能想出什麼... – nubicurio 2012-03-30 09:53:58

相關問題