【发布时间】:2014-03-18 18:23:13
【问题描述】:
我正在尝试通过 $_POST Array 和 FORM 更新 MySQL 数据库。这是我编写的代码,经过简化。
在第 1 页中,我得到了一个 5 的数组,它只是最后一个可用于更新的“文本框”,它更新了整个列,全部为 5。我希望能够更新单个单元格。
我曾经问过这个问题,但是把代码变白了,所以这里是:
第 1 页
<form method="POST" action="showpost.php" enctype="multipart/form-data" ><tr><td>
<?php
$host = "***";
$username1 = "***";
$password1 = "***";
$db_name = "***";
$tbl_name = "***";
mysql_connect("$host", "$username1", "$password1") or die("Can’t connect ");
mysql_select_db("$db_name") or die ("No connection to table ");
$foresp1 = mysql_query("SELECT * FROM $tbl_name");
while($data = mysql_fetch_array($foresp1))
{
$example = $data[3];
echo "<input type='text' value='$example' name='examplearray[]' size='10'><br>";
}
?>
</td></tr></table>
<input type="submit" value="Update">
</form>
第 2 页 - (showpost.php)
<?php
$host = "***";
$username1 = "***";
$password1 = "***";
$db_name = "***";
$tbl_name = "***";
mysql_connect("$host", "$username1", "$password1") or die("Can’t connect ");
mysql_select_db("$db_name") or die ("No connection to table ");
{
foreach($_POST['examplearray'] as $value)
{
mysql_query("UPDATE $tbl_name SET example_cell = '$value'");
}
}
?>
我在这里做错了什么?
【问题讨论】:
-
一目了然,您似乎没有将 UPDATE 查询限制在特定行。相反,它会在写入时更新所有行。
-
您的查询中应该有 WHERE 条件 .. 在此处显示数据库表 ..
-
你很容易受到SQL injection attacks 的攻击,而且无论如何肯定没有正确编写更新查询:en.wikipedia.org/wiki/Where_%28SQL%29
-
你在这里没有做任何SQL escaping 并且你有一些严重的SQL injection bugs 如果这是在公共互联网上可能会导致灾难。 PDO is not hard to learn 并提供了一种简单、可靠的向查询添加数据的方法。 PHP The Right Way 之类的指南概述了与数据库交互时推荐的最佳实践。