2013-07-20 78 views
-4

這是我的代碼我不能得到的if語句的工作,如果名稱不存在它讀取「記錄找到」和page3.php說密碼不匹配有人可以請幫助我,謝謝我能做些什麼來得到這個工作

<?php 
session_start(); 
//$_SESSION["authorized"]=0; 
$name = $_POST["name"]; 
$pass = ($_POST["password"]); 

$connect = mysql_connect("localhost","tina","tinapassword") or die("Could not connect"); 

$selected = mysql_select_db("tinadatabase", $connect) or die("Could not connect to database"); 

$query = "SELECT * FROM users WHERE Uname='$name'"; 
$result = mysql_query($query, $connect); 

$row = mysql_fetch_assoc($result); 

if ($result) 
{ 
    //$row ==1; 
    print "Record found"; 

} 
else 
{ 
    //$row == 0; 
    print "Record not found"; 
} 
print "<br>"; 

md5($pass); 
if($name == $result["Uname"] && md5('$pass') == $result["Upassword"]) 
{ 
    $_SESSION["authorized"] = 1;  
} 
else 
{ 
    $_SESSION["authorized"] = 0; 
} 
print "<br>"; 
print"<a href='page3.php'> continue</a>"; 
?> 
+0

歡迎來到程序員。請閱讀[about](http://programmers.stackexchange.com/about)頁面。這個問題屬於StackOverflow。我會標記它被遷移。 –

+0

抱歉不知道如何使用此頁我欣賞幫助 –

+2

您正在使用[an **過時的**數據庫API](http://stackoverflow.com/q/12859942/19068)並且應該使用[modern更換](http://php.net/manual/en/mysqlinfo.api.choosing.php)。你也**易受[SQL注入攻擊](http://bobby-tables.com/)**,現代的API會使[防禦]更容易(http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php)自己從。 – Quentin

回答

0

正如其他人所說,mysql_num_rows()是你的答案在這裏。這裏的一個主要問題是,當你應該使用$row時,你也使用$result作爲關聯數組。我已經重寫你的代碼:

<?php 

session_start(); 

$name = $_POST["name"]; 
$pass = $_POST["password"]; 

$conn = mysql_connect("localhost","tina","tinapassword") or die("Could not connect to MySQL server."); 

if (!$conn) { 
    echo "Unable to connect to DB: " . mysql_error(); 
    exit; 
} 

if (!mysql_select_db("tinadatabase")) { 
    echo "Unable to select <strong>tinadatabase</strong>: " . mysql_error(); 
    exit; 
} 

$sql = "SELECT * FROM users WHERE Uname='$name'"; 

$result = mysql_query($sql); 

if (!$result) { 
    echo "Could not successfully run query (<strong>$sql<strong>) on DB: " . mysql_error(); 
    exit; 
} 

if (mysql_num_rows($result) == 0) { 
    echo "Record not found."; 
    exit; 
} else 
    echo "Record found." 

$row = mysql_fetch_assoc($result); 

print "<br>"; 

md5($pass); 

if($name == $row["Uname"] && md5($pass) == $row["Upassword"]) { 
    $_SESSION["authorized"] = 1; 
    print "<a href='page3.php'>continue</a>"; 
} else { 
    $_SESSION["authorized"] = 0; 
    print "Username or password incorrect."; 
} 

mysql_free_result($result); 

?> 

現在,我還沒有測試過它,但它看起來對我來說很合適。讓我知道它是否有效!

+0

謝謝,做了工作我現在閱讀正確的數據我真的很感謝幫助 –

0

mysql_query返回查詢是否成功。 Findig零記錄是成功的。

您必須檢查$row,或檢查結果集的長度。

注意:檢查註釋,你的代碼有很多問題。

+0

謝謝,但你是什麼意思注意:檢查評論? –

0

$result將會是一個真正的值 - 即使沒有行被返回 - 除非查詢出現錯誤。你需要count the number of rows來查看是否有任何匹配。

(但請參閱我對該問題的評論,首先不應該使用該數據庫API)。

0

我認爲上面的註釋是有用的建議 - 看看使用準備命令和綁定變量。除此之外,您正在引用$ result而不是$ row。

我也會在您檢查$ result後執行提取操作。使用(!($ result === false))也是一個好習慣(即測試它不是特別錯誤的)。我也認爲使用!strcmp()來準確地比較字符串是一種很好的做法。說了這麼多,你可以通過統計用戶名和密碼(散列)來簡化事情。顯然,如果您需要從查詢中的用戶表中選擇其他詳細信息,則這不合適。這種方法可以節省你做對了NUM_ROWS等檢查強調文本

我不mysql的使用盡可能多的如Oracle和Postgres所以原諒我,如果語法稍有錯了,但..假設你UPassowrd使用密碼的MD5()哈希...

$hpass=md5($pass); 
$query = "SELECT count(1) FROM users WHERE Uname='$name' and UPassword='$hpass'"; 
$result = mysql_query($query, $connect); 

$_SESSION["authorized"] = 0; 
if (!($result === false)) 
{ 
    $row = mysql_fetch_row($result); 

    echo "Query Worked<br>"; 
    // count(1) result of anything other than 0 is a match - though any more than 1 might be an issue. 
    $_SESSION['authorized']=((intval($row[0]) == 0)?0:1); 
} else { 
    echo "Query Failed<br>"; 
    exit; 
} 
echo "<br>"; 
echo"<a href='page3.php'> continue</a>"; 

不知道你繼續HREF到第3頁是否是授權值conditonal。

+0

是的,我的page3.php是有條件的授權值,這就是它是什麼<?php session_start(); if($ _ SESSION [「authorized」] == 1) { \t print「You logged in」; } else { \t print「密碼不匹配,
You must log in first
」; } ?>現在它說密碼不匹配,

相關問題