我想在一个表中插入多个字段时遇到问题.
这是我的表格:
<h1>Add user</h1>
<form method="post" action="index.php">
<table>
<thead>
<th>Name</th>
<th>Age</th>
</thead>
<tr>
<td><input name="name[]" type="text" /></td>
<td><input name="age[]" type="text" /></td>
</tr>
<tr>
<td><input name="name[]" type="text" /></td>
<td><input name="age[]" type="text" /></td>
</tr>
<tr>
<td><input name="name[]" type="text" /></td>
<td><input name="age[]" type="text" /></td>
</tr>
</table>
<input type="submit" name="submit" value="Submit" />
</form>
Run Code Online (Sandbox Code Playgroud)
这是提交代码:
if (isset($_POST['submit'])) {
foreach ($_POST as $val) {
$name = $val['name'];
$age = $val['age'];
mysql_query("INSERT INTO users (name, age) VALUES ('$name', '$age')");
}
}
Run Code Online (Sandbox Code Playgroud)
查询将插入数据库,但不会插入我输入的值.
有人可以帮帮我吗?
Mik*_*ant 15
你正在做一个foreach $_POST而不是名字/年龄数组.你应该在名字或年龄数组上做foreach,如下所示:
if (
!empty($_POST['name']) && !empty($_POST['age']) &&
is_array($_POST['name']) && is_array($_POST['age']) &&
count($_POST['name']) === count($_POST['age'])
) {
$name_array = $_POST['name'];
$age_array = $_POST['age'];
for ($i = 0; $i < count($name_array); $i++) {
$name = mysql_real_escape_string($name_array[$i]);
$age = mysql_real_escape_string($age_array[$i]);
mysql_query("INSERT INTO users (name, age) VALUES ('$name', '$age')");
}
}
Run Code Online (Sandbox Code Playgroud)
我还会注意到你目前很容易受到SQL注入的影响所以我添加了为名字/年龄转义字符串的步骤.
我还强烈建议简单地在DB中单个批量插入而不是单独插入每个记录(我将把它留给您实现).从性能角度来看,这种方法几乎总是优选的.
最后,你真的不应该使用mysql_*它们被弃用的函数.考虑更改为mysqli或PDO.
if (isset($_POST['submit'])) {
$i = 0;
foreach ($_POST as $val) {
$name = $_POST['name'][$i];
$age = $_POST['age'][$i];
mysql_query("INSERT INTO users (name, age) VALUES ('$name', '$age')");
$i++;
}
}
Run Code Online (Sandbox Code Playgroud)
这将解决您的问题!