我创建了一个HTML表单,用户可以在其中提交姓名,电子邮件和语言技能。由于用户可能会说多种语言,因此用户可以通过单击“添加”按钮生成其他行。
然后提交表格并输入MySQL数据库。我使用两个表来保存接收的数据,而第一个表中的user-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 | mark@me.com |
| 2 | Sue | sue@me.net |
|1 | English | perfect |
|1 | Spanish | awesome |
|2 | English | great |
|2 | French | ok |
|2 | Korean | fluent |
然而,我的代码表1看起来很好,但表2看起来像这样
| 1 | | |
| 2 | | |
有人可以帮忙吗?谢谢!
答案 0 :(得分:2)
我应该指出的一点是,你没有使用mysql_real_escape_string
准备好的陈述。
另一件事是$user-id
不是有效的变量名。你不能使用连字符。
修改强>
打开错误报告并在任何失败时输出mysqli
/ mysqli_stmt::$error
是一件好事。大多数问题都可以用这些解决。
答案 1 :(得分:1)
你的php mysqli代码看起来很不错。您确定要正确检索POST值吗?在执行查询之前,在foreach循环中打印$ language和$熟练