难以用php查询mysql中的两个表

时间:2013-05-14 15:45:54

标签: php mysql

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

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

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

我正在编写一个输出表单的PHP程序,该表更新了polit_party_result表,其中id从1运行到X ..我面临的问题是 on 表单,id与上述political_party表中的party_abbreviation列有关。

那是1(在political_party_result表中)应该带出AP(来自polit_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不熟悉。

1 个答案:

答案 0 :(得分:0)

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

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

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

你永远不应该将后期数据直接放入SQL中,因为andrew提到这是非常不安全的,恶意用户可以通过SQL注入轻松地删除整个数据库。

说过我不确定你实际上是在传递你的帖子变量(自从我触及PHP以来已经过了一段时间),因为整个语句都是双引号。这意味着那些'$ _POST [var]'部分实际上只是作为字符串文字的一部分被读入。 (这意味着您总是传递值$ _POST [var]而不是表单中的值。您需要支持或完全停止变量'{$ _POST [var]}'或'。$ _ POST [var]。'(但是再来一次这很糟糕!)。

您应该做的就是在您验证数据后使用准备好的声明。你可以在这里看到一个很好的例子How can I prevent SQL injection in PHP?