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

时间:2015-02-12 12:14:01

标签: php mysql sql forms

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

每个条目都有ID,许多其他字段和类别。我正在尝试使用一种形式为数据库中的每个ID添加这些类别。

我想出了下面的解决方案,但(当然)这只会在表单中插入LAST条目,因为变量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);
?> 

我根据Tom的回答更改了我的代码,现在我有以下内容: 这确实打印了它们应该的值,但它仍然只保存数据库中的最后一个条目。我确定我必须在这里遗漏一些东西......

$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>";

}

2 个答案:

答案 0 :(得分:0)

问题是您使用名称元素而不管行数是多少。 所以name =&#34; ID&#34; &安培;命名=&#34;猫&#34;需要在每一行上更改或具有数组类型

你可以使用name =&#34; ID []&#34;因为这会将数组附加/创建到$ _POST [&#39; ID&#39;] ...但您仍然希望更改SQL查询以处理其中的每一个。

修改

如果我理解,你希望能够从表中识别一行,以便在数据库中使用它?一种方法是创建表时..给TR一个id / name属性,它是数据库中的行id。

然后可以通过检查您是否使用第4行中的选择菜单来检查当前行的id / name属性,并且您拥有数据库ID。

<tr id='my_row_1'>
  <td class='colName'>John</td>
  <td class='colPhone'>1111</td>
  <td class='colOther'>....</td>
</tr>
<tr id='my_row_2'>
  <td class='colName'>Bill</td>
  <td class='colPhone'>2222</td>
  <td class='colOther'>....</td>
</tr>
<tr id='my_row_3'>
  <td class='colName'>Roger</td>
  <td class='colPhone'>3333</td>
  <td class='colOther'>....</td>
</tr>

有了类似上面的内容,说我在列上有一个按钮......当我点击那个按钮时...我所有todo都找到了父TR并获得了它的id值....然后爆炸它由&#34; _&#34;并得到最后一块有id ..

所以你的PHP会很容易生成id ...而且,使用表单不会是最好的情况..在表中使用多个表单是...浪费... ... ...

我建议更多,有一个简单的按钮调用js函数,然后发布/ ajax / jquery你需要从那一行。

---试着准确理解你需要什么?

答案 1 :(得分:0)

首先,使用PDO::Mysql,您正在使用的SQL函数有点弃用,并且不太关注安全性。目前,您的代码容易受到SQL注入攻击,并且您的输出对XSS攻击敏感(始终清理输出)。

我错了,MySQL已被弃用但MySQL i 不是!我更喜欢使用PDO::Mysql,因为它支持的数据库范围(MySQL i 仅支持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];
}