2013-05-14 25 views
0

我在MYSQL數據庫,它包含兩個表:難度查詢兩個表中的MySQL和PHP

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

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

我寫輸出形式,更新political_party_result表中的PHP程序其中ID運行從1到X ..我面臨的問題是的形式,該ID涉及上述political_party表中的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,因此不盡如人意。

+1

不回答你的問題,但你」重新使用mysqli並將$ _POST變量直接連接到SQL字符串中 - 這是不安全的。你應該看看使用準備語句和綁定變量。 – andrewsi 2013-05-14 15:50:32

+0

'polling_party_result'或'political_party_result'? – Colas 2013-05-14 15:51:16

+0

對不起,* polling_party_result。 – Dude 2013-05-14 15:53:04

回答

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,安德魯提到這是非常不安全的,惡意用戶可以很容易地通過SQL注入放下你的整個數據庫。

說了這麼多我不知道你實際上是通過你的帖子變量(其以來我感動PHP一小會兒),因爲整個語句是在雙引號。這意味着這些'$ _POST [var]'部分實際上只是作爲字符串文字的一部分被讀入。 (意思是你總是傳遞值$ _POST [var]而不是來自表單的值,你需要支持或者完全支持'{$ _POST [var]}'或'。$ _ POST [var]。'(BUT再次,這是壞的!)。

你應該做的是提到使用準備好的語句您確認您的數據後,你可以在這裏看到一個很好的例子How can I prevent SQL injection in PHP?