2013-10-27 17 views
0

大家好=)我想爲我的網站登錄,而實際上登錄是完美的。然而,我決定添加一個「第一次用戶」buttom然後要求用戶臨時ID。 (考慮到我們在一家公司,並且每個人都只有這個用途纔會收到ID)PHP沒有迴應給定的值

如果ID是正確的(它在數據庫中),則用戶在「首次創建配置文件」網站前面,但是...我的解釋存在重大問題。無論我嘗試什麼組合,mysql都會拋出我,彷彿我沒有給出的東西是正確的。

這裏是我的簡單的HTML輸入+按鈕

<html> 
<body> 
<form action="first_id_check.php" method="POST" > 
<p> Please input your given id into the box below </p> 
<input type="text" name="id"> 
<input type="submit"> 
</form> 

,這裏是PHP腳本應該做的工作

<?php 

$contab = mysql_connect('localhost', 'root') or die ("Cannot connect to DB"); 
$condb = mysql_select_db('info', $contab); 

$temp = $_POST['id']; 

$query = "SELECT * FROM tempid WHERE Number='$temp'"; 
$result = mysql_query($query); 

$count = mysql_num_rows($result); 

if ($result == 1) 
{ 
header("location:first_create.php"); 
} 
else 
{ 
echo "Error, please try again"; 
sleep(5); 
header("location:index.php"); 
} 
?> 

「數」 是的名稱存放id的柱子。但是無論我輸入什麼內容,我總是會重新路由到「index.php」,就好像結果總是返回0。 <我該如何解決這個問題?

回答

1

mysql_query返回選擇語句的資源。我想你的意思是檢查返回的行數是否等於1:

if ($count == 1) 
+0

Omg非常感謝你,已經連續8小時編碼,完全錯過了那個成熟的錯誤:D –

1

不要使用mysql_ *函數,它們已被棄用。它們被mysqli_*取代。此外,您應該嘗試輸出一些調試信息,而不是嘗試重定向,僅用於調試。另外,僅僅爲了調試mysql,你應該放或者死(mysql_error());在每次使用mysql函數結束時。像這樣:

mysql_query($query) or die(mysql_error()); 

此外,你有一個主要的安全漏洞,使用用戶的直接輸入,沒有任何消毒是非常危險的。它會讓您的數據庫打開有害的代碼。用這個代碼很容易就可以用一個非常簡單的SQL注入來接管整個數據庫。

你可能想這樣做:

if ($count == 1) 

,而不是這樣的:

if ($result == 1) 

而且,下次你有這樣的問題,嘗試呼應的價值你測試,看它是否是你期望它是什麼,並試圖理解爲什麼它不是如果它不是。正如Peter所說,var_dump對此非常有用。與echo和print_r一樣(後者用於數組)。

+1

是的。人們應該學習如何調試他們的代碼。他應該逐步檢查所有行.'var_dump($ result)'然後'var_dump($ count)'然後...檢查下一行。瞧。 – Peter

+0

謝謝先生,安全是下一個檢查點上的待辦事項:) –

2

您的if語句正在測試$ result。它應該測試$ count嗎?

這段代碼容易受到SQL注入的影響 - 我會在做太多之前修補它!此外,通常值得檢查一下失敗時返回false的php函數的條件 - 那裏的所有MySQL函數都屬於該類別。

+0

Jo謝謝,一直編碼8個小時,我認爲它的時間打到乾草:)是的SQL注入證明是下一個檢查點列表:) –