我正在尝试创建一个表单,该表单从数据库检索数据,然后允许我将数据添加到一列以进行多个条目。
每个条目都有一个 ID、许多其他字段和一个类别。我正在尝试使用一种表单为数据库中的每个 ID 添加这些类别。
我想出了下面的解决方案,但是(当然)这只会插入表单中的最后一个条目,因为变量 ID 会随着每个新行而更改。 我现在拥有的表单显示了我想要看到的内容,但它没有按照我需要的方式保存它。
问题是,(如何)我可以制作一个包含数据库中所有条目且旁边有下拉菜单的表单, 让我从下拉列表中选择正确的类别并将其保存到数据库中?
形式:
$result = mysqli_query($con,"SELECT * FROM aw");
while($row = mysqli_fetch_array($result))
{
echo '<tr><td><input type="hidden" name="ID" value="'.$row[ID].'."> '.$row[ID].'</td><td>';
echo '
<select name="cat" onchange="this.form.submit()">
<option value="C1">category1</option>
<option value="C2"">category2</option>
</select></td></tr>
';
}
?>
<tr><td><input type="submit" title="SAVE" ></td></tr>
</form>
insert.php
$sql="REPLACE INTO aw (ID,cat)
VALUES
('$_POST[ID]','$_POST[cat]')";
if (!mysqli_query($con,$sql))
{
die('Error: ' . mysqli_error($con));
}
mysqli_close($con);
?>
我根据汤姆的回答更改了代码,现在有以下内容: 这确实打印了应有的值,但它仍然只将最后一个条目保存到数据库中。我确信我一定在这里遗漏了一些东西..
$name = $_POST['ID'];
$category = $_POST['cat'];
foreach( $name as $key => $n ) {
$sql="REPLACE INTO aw (ID,cat)
VALUES
('$n','$category[$key]')";
print "The id is ".$n.", category is ".$category[$key]."<br>";
}
最佳答案
首先,使用PDO::Mysql ,您使用的 SQL 函数有点不推荐使用,并且不太关注安全性。目前,您的代码容易受到 SQL 注入(inject)攻击,并且您的输出对 XSS 攻击很敏感(始终清理输出)。
我错了,MySQL 已被弃用,但 MySQLi 没有!我更喜欢使用 PDO::Mysql由于它支持的数据库范围广泛(MySQLi 仅支持 MySQL 数据库,PDO::Mysql 支持更多)
现在回答你原来的问题,你可以创建一种数组。通过将 name="ID"
更改为 name="ID[]"
并将 name="cat"
更改为 name="cat []”
。
现在你可以做
$name = $_POST['ID'];
$category = $_POST['cat'];
foreach( $name as $key => $n ) {
print "The id is ".$n.", category is ".$category[$key];
}
关于php - 在 MySQL/PHP 中检索和插入多个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28477213/