0

我在 MYSQL 中有一个数据库,它包含 2 个表:

Table: political_party
+----------+--------------------+-------+
| party_id | party_abbreviation | party |
+----------+--------------------+-------+

Table: polling_party_result
+----+------+-----------------+
| id | p_id | number_of_votes |
+----+------+-----------------+

我正在编写一个输出表单的 PHP 程序,该程序更新了 id 从 1 到 X 运行的政治派对结果表。我面临的问题是,表单上,​​id 与上述政治派对表中的 party_abbreviation 列有关.

也就是说 1(在political_party_result 表中)应该带出AP(从political_party 表中)2 = ADC
3 = PDP 等。

这是我的 HTML 代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>HTML INEC</title>
</head>

<body>
<form action="inechp.php" method="post" name="form1">
ID: <input name="id" type="text" /> <br /> <br />
Polling Unit: <input name="pid" type="text" /> <br /> <br />
Number of Votes: <input name="votes" type="text" /> <br /> <br />
<input type="submit" /> <br />
</form>

<form action="inechp.php" method="post" name="form2">
Polling Unit: <input name="unit" type="text" /> <br />
Number of Votes: <input name="nov" type="text" /> <br />
<input type="submit" />
</form>
</body>
</html>

这是我的PHP代码:

<?php
$con = mysqli_connect("localhost", "root", "", "inec_results");

mysqli_query($con, "UPDATE inec_results.polling_party_result SET p_id ='$_POST[pid]' , number_of_votes = '$_POST[votes]' WHERE id = '$_POST[id]'");
?>

如果我的解释不令人满意,请原谅我,因为我对 PHP 有点陌生。

4

1 回答 1

0
mysqli_query($con, "UPDATE inec_results.polling_party_result SET p_id ='$_POST[pid]' , number_of_votes = '$_POST[votes]' WHERE id = '$_POST[id]'");

由于多种原因,这很糟糕。

首先,您没有验证您收到的表单数据是否有效。例如,我为您的 ID 字段输入一个电子邮件地址,您只需将其直接传递到您的数据库。这也引出了第二个大问题。

您永远不应该将发布数据直接放入 SQL,因为 Andrew 提到这是非常不安全的,并且恶意用户可以很容易地通过 SQL 注入删除您的整个数据库。

话虽如此,我不确定你是否真的传递了你的 post 变量(自从我接触 PHP 以来已经有一段时间了),因为整个语句都用双引号引起来。这意味着那些 '$_POST[var]' 部分实际上只是作为字符串文字的一部分被读入。(这意味着您始终传递值 $_POST[var] 而不是表单中的值。您需要大括号或完全停止变量 '{$_POST[var]}' 或 '.$_POST[var].'(但是这又是坏事!)。

如前所述,您应该做的是在验证数据后使用准备好的语句。你可以在这里看到一个很好的例子How can I prevent SQL injection in PHP?

于 2013-05-14T16:01:08.067 回答