2013-05-17 23 views
0

我正在嘗試使用與Pancake一起使用的簡單登錄腳本。 (在線開具發票)無論用戶輸入如何,PHP語句都重定向到「其他」

無論您在窗體中輸入什麼內容,都會重定向到「else」語句。而不是嘗試重定向到成功頁面。

<?php 
$con=mysqli_connect("example.com","example","example","example"); 
// Check connection 
if (mysqli_connect_errno()) 
{ 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 

$result = mysqli_query($con, "SELECT * FROM mypanda_clients 
           WHERE unique_id='$_POST[username]'"); 

while ($row = mysqli_fetch_array($result)) 
{ 
    if ($_POST[password] == $ROW[passphrase]) 
    { 
     header('Location: http://www.green-panda.com/my_panda/Clients/'.$_POST[username]); // concatenate the string 
    } 
    else 
    { 
     echo "The username and or password was incorrect. Please try again."; // missing semi colon 
    } 
} 
?> 
+0

PHP是區分大小寫的。將$ ROW [口令]改爲'$ row [口令]' – Vector

+0

改變$ ROW [口令]到'$ row ['口令]' –

+0

發佈的口令不應該與數據庫的口令匹配,因爲數據庫值應該始終是一個散列。以純文本保存密碼是一個非常糟糕的主意。 – Arjan

回答

1

變量$ ROW未定義。

變化

if ($_POST[password] == $ROW[passphrase]) 

if ($_POST[password] == $row[passphrase]) 

此外,如果您使用引號圍繞您的數組鍵PHP將處理您的發言更快:

if ($_POST['password'] == $row['passphrase']) 

這是貝科使用PHP解釋你的代碼的方式。在它意識到這不是基於整數的索引之前,它必須到達文本「密碼」的末尾。然後它試圖將它作爲關聯數組中的一個鍵。這意味着它有效地試圖在成功之前查找$row['passphrase']兩次。

編輯:

我稍微偏離這裏 - 我加入菲利普的評論澄清到底爲什麼這是錯的:

*「其實這更糟糕的是如果你有E_NOTICE上,它會。提醒你,這是轉換一個未知的常量字符串值。這是不正確的,PHP只是試圖幫助了「*

+1

其實它更糟。如果你有'E_NOTICE',它會警告你它將一個未知常量轉換爲字符串值。這是不正確的,PHP只是試圖幫助。 –

+0

好點。只是想讓它變得簡單易懂。底線:壞主意。 – Kevin

2

變量是$row,不$ROW,你需要在你的索引報價

if ($_POST[password] == $ROW[passphrase]) 

if($_POST[ 'password' ] == $row[ 'passphrase' ]) 

我也建議使用mysqli_fetch_assoc,而不是mysqli_fetch_array