php - 在 MySQL/PHP 中检索和插入多个条目

标签 php mysql sql forms

我正在尝试创建一个表单,该表单从数据库检索数据,然后允许我将数据添加到一列以进行多个条目。

每个条目都有一个 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/

相关文章:

php - 如何在不重新安装的情况下使用 Composer 自动加载没有 namespace 的类?

当我注销后按后退按钮时,PHP Codeigniter 显示缓存

php - 如何将表从一个数据库复制到不同服务器的另一个数据库

sql - postgresql:对于给定的表名,模式名是什么?

python - SQlite3 - 按rowid删除行

php - 使用 PHP (DOM) 遍历未知的 XML 结构

php - mysql_fetch_row() 期望参数 1 是给定的资源、对象。?

php - 检查 php 中的值,更新查询

mysql - 如何将 2 列 mysql 复合主键值显示为第三列中的默认值?

MYSQL查询从表中获取每月消费数据