2012-02-22 88 views
0
<?php 
$ip = htmlspecialchars($_GET["ip"]); 
$serverIp = "a"; 
$a = "a"; 
include("mysql.php"); 
$votes = "serverVotes"; 
$results = mysql_query("SELECT * FROM toplist WHERE serverIp = $_POST[serverIp] ORDER BY $votes DESC"); 

    if($row['serverIp'] = $_POST[serverIp]) { 
     echo 'Yes1.'; //debugging 
} 
    if($row['serverIp'] != $_POST[serverIp]) { 
     echo 'No1.'; //debugging 
} 

    while($row = mysql_fetch_array($results)){ 

    if($row['serverIp'] = $_POST[serverIp]) { 
     echo 'Yes2.'; //debugging 
} 
    if($row['serverIp'] != $_POST[serverIp]) { 
     echo 'No2.'; //debugging 
} 

    } 
?> 

我試圖做到這一點,這樣如果數據庫中存在「serverIp」,它會回顯某些信息,如果它不存在,它什麼都不會做。我不認爲這是從形式上實際獲得IP的 ,但我可能是錯的,這可能是一些其他問題。PHP/MySQL:獲取表單信息,不按計劃工作

+1

不知道你的$ _GET ['ip']是什麼,但你知道你可以使用$ _SERVER ['REMOTE_ADDR']作爲客戶端IP嗎? – Sietse 2012-02-22 13:37:50

+0

請發佈var_dump($ _ POST ['serverip'])的結果 – jribeiro 2012-02-22 13:38:02

+0

您絕對不應該使用htmlspecialchars來逃避mysql查詢,至少嘗試mysql_real_escape_string。您還應該在單引號的mysql查詢中附上$ _POST [serverIp]。 – gintas 2012-02-22 13:38:50

回答

1

你試過嗎?

$ip = htmlspecialchars($_GET["ip"]); 
$serverIp = "a"; 
$a = "a"; 
include("mysql.php"); 
$votes = "serverVotes"; 
$results = mysql_query("SELECT * FROM toplist WHERE serverIp = '".$_POST['serverIp']."' ORDER BY $votes DESC"); 
$row = mysql_fetch_array($results); 

    if($row['serverIp'] === $_POST['serverIp']) { 
     echo 'Yes1.'; //debugging 
} 
    if($row['serverIp'] != $_POST['serverIp']) { 
     echo 'No1.'; //debugging 
} 

    while($row = mysql_fetch_array($results)){ 

    if($row['serverIp'] === $_POST['serverIp']) { 
     echo 'Yes2.'; //debugging 
} 
    if($row['serverIp'] != $_POST['serverIp']) { 
     echo 'No2.'; //debugging 
} 

    } 
+0

你特別改變了什麼?這不是非常有用,除非你指出你做了什麼來幫助... – 2012-02-22 13:39:30

+0

這錯過了mysql_fetch_array – jribeiro 2012-02-22 13:40:00

+0

@ScottM。你不知道代碼之間有什麼區別嗎?我在$ _POST ['serverIp']中添加了單引號,並將「=」更改爲「===」,並在mysql查詢中更改了「serverIp = $ _POST [serverIp]」...請在發佈此類評論前閱讀這兩個代碼...謝謝你:) – SolidSnake 2012-02-22 13:44:00

2

你需要使用,如果從$_POST逃跑的IP,並放在引號..不是htmlspecialchars(),用mysql_real_escape_string()逃脫輸入到SQL查詢:

$results = mysql_query("SELECT * FROM toplist WHERE serverIp = '" . mysql_real_escape_string($_POST['serverIp'] . "' ORDER BY $votes DESC"); 

在此之後,你需要實際在$row之前取一行將有任何價值。在幾個地方,您不慎還使用了賦值運算符=當你打算使用等於運算符==

$row = mysql_fetch_array($results); 
// Now do stuff with $row: 
// All of these should use == for equality, not = for assignment 
// Also, enclose array keys in quotes inside $_POST['serverIp]. Though it may work 
// without the quotes, it is bad practice to omit them, and will fill your error logs 
// with warnings. 
if($row['serverIp'] == $_POST['serverIp']) { 
     echo 'Yes1.'; //debugging 
} 
    if($row['serverIp'] != $_POST['serverIp']) { 
     echo 'No1.'; //debugging 
} 

    while($row = mysql_fetch_array($results)){ 

    if($row['serverIp'] == $_POST['serverIp']) { 
     echo 'Yes2.'; //debugging 
} 
    if($row['serverIp'] != $_POST['serverIp']) { 
     echo 'No2.'; //debugging 
} 
1

當你遇到第if語句,你還沒有分配任何東西$row。在訪問$row之前,請嘗試刪除第一個if語句並進入while循環。

1

我真的不明白你的問題是什麼,但不管怎麼說,這是錯誤的:

if($row['serverIp'] = $_POST[serverIp]) { 

它設置$行[「SERVERIP」]到$ _ POST [服務器],比檢查它是否真正。您可能需要

if($row['serverIp'] == $_POST[serverIp]) { 

改爲。

此外,$_POST[serverIp]是錯誤的,這將查找常量'serverIp'(whick可能不存在)。它會工作,因爲PHP使它成爲一個字符串,但你會從它得到PHP的通知。

此外,您的MySQL查詢不安全。有人可以通過使用MySQL注入來做一些令人討厭的事情。

而且,

if($row['serverIp'] = $_POST[serverIp]) { 
     echo 'Yes2.'; //debugging 
    } 

你並不需要一個if語句,因爲你已經把WHERE在你的MySQL查詢。所以它永遠是真的。

+0

如何讓此代碼更安全?感謝您的答覆! – Hunt3r 2012-02-22 21:34:29

+0

@ Hunt3r谷歌的'MySQL注入',你會發現有關它的信息以及如何防止它:) – Sietse 2012-02-23 11:25:42