2016-02-16 93 views
1

我正在嘗試創建一個簡單的登錄頁面。我有一個註冊頁面,當用戶註冊並嘗試登錄時,它將導航到主頁。但是,當用戶嘗試登錄並且用戶名和密碼不在數據庫中時,我希望腳本將其導航到註冊頁面。當登錄失敗時導航到註冊頁面

我有問題的else語句,任何人都可以幫我解決這個問題嗎?

這是腳本...

function SignIn() 
{ 
session_start(); //starting the session for user profile page 
if(!empty($_POST['userName'])) 
{ 
    $query = mysql_query("SELECT * FROM users where userName = '$_POST[userName]' AND createPassword = '$_POST[createPassword]'") or die(mysql_error()); 
    $row = mysql_fetch_array($query) or die(mysql_error()); 
    if(!empty($row['userName']) AND !empty($row['createPassword'])) 
    { 
    $_SESSION['userName'] = $row['createPassword']; 
    echo "<script>window.location = 'index.php'</script>"; 

    } 
    else 
    { 

    echo "<script>window.location = 'signUp.php'</script>"; 
    } 
} 
} 
if(isset($_POST['submit'])) 
{ 
    SignIn(); 
} 

?> 

編輯:您的反饋你好,謝謝,我已經改變了查詢和編輯的回聲。感謝您的安全提示,但是在這個腳本中安全性並不是問題。如果您已經註冊,我只需要它直接訪問索引,如果您沒有註冊,也可以訪問註冊。 如果登錄和密碼不正確,我仍然無法將頁面重定向到註冊頁面。

如果它正確,它會將您帶到索引中,但如果它錯了,它將顯示此腳本所在的php頁面。

這是我目前的嘗試

function SignIn() 
{ 
session_start(); 
if(!empty($_POST['userName'])) 
{ 
    $query = mysql_query("SELECT * FROM users where userName = '{$_POST['userName']}' AND createPassword = '{$_POST['createPassword']}'") or die(mysql_error()); 
    $row = mysql_fetch_array($query) or die(mysql_error()); 

    if(!empty($row['userName']) AND !empty($row['createPassword'])) 
    { 
    $_SESSION['userName'] = $row['createPassword']; 
    header("Location:http://localhost/waves/index.php"); 
    } 
    else if (!empty($row['userName']) AND !empty($row['createPassword'])) 
    { 
    $_SESSION['userName'] != $row['createPassword']; 
    header("Location:http://localhost/waves/signUp.php"); 

    } 
} 

} 
if(isset($_POST['submit'])) 
{ 
    SignIn(); 
} 

?> 
+2

究竟出了什麼問題?它永遠不會達到else語句,還是它不會重定向? – Max

+0

這非常容易受到SQL注入的影響,您不得以這種方式使用安全性,使用準備好的語句以 – Firewizz

+0

@alan smith開頭。您正在使用兩個相同的「if」條件。你只需要一個'if'條件,其他將是'else'而不是'else if'。 –

回答

3

1)糾正您的疑問:爲什麼你需要JS重定向

"SELECT * FROM users where userName = '{$_POST['userName']}' AND createPassword = '{$_POST['createPassword']}'" 

2)?你可以使用header

header("Location:http://localhost/signUp.php"); 

3)不要使用mysql_*。它被棄用並從PHP 7中刪除。使用mysqli_*PDO

4)您的查詢是不安全的。閱讀How can I prevent SQL injection in PHP?

2

不要嘗試用Javascript輸出重定向。相反,您需要使用PHP標頭()重定向。使用此功能,您必須確保沒有「輸出」已發送到屏幕;這個非常重要。如果在執行前向瀏覽器回覆某些內容,則標題重定向將不起作用。

header('Location: http://www.yoursite.com/signUp.php'); 
exit; 
+0

請參閱工程師對其他問題的評論。 – jjwdesign

2

mysql_query已棄用,儘快拆除。這也不安全。所以請使用PDO。

這就是說,這是你如何在一個字符串中使用數組鍵。

$sql = "SELECT * FROM users where userName = '{$_POST['userName']}' AND createPassword = '{$_POST['createPassword]'}'"; 

這仍然不是安全的,雖然,你應該使用準備好的陳述或者至少是使用mysql_real_escape_string(也過時了)。