2013-05-01 55 views
-2

你好我在php中創建了一個示例登錄系統。但它似乎並不奏效。下面的代碼有什麼問題。示例登錄Php未重定向

login_success.php

<?php 
session_start(); 
if(!$_SESSION['myusername']) 
{ 
header("location:main_login.php"); 
} 
?> 

<html> 
<body> 
Login Successful 
</body> 
</html> 

它說,它「檢查,如果會議沒有註冊,重定向回主頁面。」但每當我把無效的用戶名和密碼它不會去main_login.php,而是去check_login.php

**更新: 無效的用戶名和密碼彈出check_login.php我認爲它應該是在main_login.php上。我會發布我的整個代碼,以便您能不能幫我

check_login.php

<?php 

ob_start(); 
$host="localhost"; // Host name 
$username="root"; // Mysql username 
$password="root"; // Mysql password 
$db_name="test"; // Database name 
$tbl_name="members"; // Table name 

// Connect to server and select databse. 
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 

// Define $myusername and $mypassword 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword']; 

// To protect MySQL injection (more detail about MySQL injection) 
$myusername = stripslashes($myusername); 
$mypassword = stripslashes($mypassword); 
$myusername = mysql_real_escape_string($myusername); 
$mypassword = mysql_real_escape_string($mypassword); 
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'"; 
$result=mysql_query($sql); 

// Mysql_num_row is counting table row 
$count=mysql_num_rows($result); 

// If result matched $myusername and $mypassword, table row must be 1 row 
if($count==1){ 

// Register $myusername, $mypassword and redirect to file "login_success.php" 
session_register("myusername"); 
session_register("mypassword"); 
header("Location:login_success.php"); 
} 
else { 
echo "Wrong Username or Password"; 
} 
ob_end_flush(); 
?> 

main_login.php

<table width="300" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC"> 
<tr> 
<form name="form1" method="post" action="check_login.php"> 
<td> 
<table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF"> 
<tr> 
<td colspan="3"><strong>Member Login </strong></td> 
</tr> 
<tr> 
<td width="78">Username</td> 
<td width="6">:</td> 
<td width="294"><input name="myusername" type="text" id="myusername"></td> 
</tr> 
<tr> 
<td>Password</td> 
<td>:</td> 
<td><input name="mypassword" type="text" id="mypassword"></td> 
</tr> 
<tr> 
<td>&nbsp;</td> 
<td>&nbsp;</td> 
<td><input type="submit" name="Submit" value="Login"></td> 
</tr> 
</table> 
</td> 
</form> 
</tr> 
</table> 
+0

'var_dump($ _ SESSION);' – zerkms 2013-05-01 00:42:37

+0

嘗試'header(「Location:main_login.php」);' – Daniel 2013-05-01 00:47:43

+0

sir我會在那裏放置? – 2013-05-01 00:47:48

回答

0

使用「isset」,以檢查是否有會話內容變種。類似於

if(!(isset($_SESSION['myusername']))) { 
     ... 
} 
+0

它仍然無效。:( – 2013-05-01 00:46:43

+0

將「位置」更改爲「位置:main_login.php」 – 2013-05-01 00:50:36

+0

以及該會話的內容?var_dump或print_r – 2013-05-01 00:54:57

0

那麼上面的代碼中沒有PHP。這聽起來像你需要把一些PHP來檢查你的會話變量爲你登錄令牌例如你可以有這樣的事情。

<?php 

    session_start(); 

    if(!isset($_SESSION['myusername']){ 
     header("HTTP/1.1 403 Forbidden"); 
     header("Location: http://localhost:8080/main_login.php"); 
    } 

?> 

<html> 
    <body> 
     Login Successful 
    </body> 
</html> 

編輯:我看到現在的問題從main_login.php頁面後的數據看起來並不像使用它。你可以嘗試一下本作login_success.php

<?php 
    $userName = $_POST['myusername']; 
    $password = $_POST['mypassword']; 

    /*Validate username and password - I am using a simple comparison because 
    I do not know if you are validating against a DB, text file, etx...*/ 

    if($userName == 'user' && $password == 'password'){ 
     session_start(); 
     $_SESSION['myusername'] = $userName; //This is storing the validated username in session 
    }else{ 
     header("HTTP/1.1 403 Forbidden"); 
     header("Location: http://localhost:8080/main_login.php"); 
    } 
?> 

<html> 
    <body> 
     Login Successful 
    </body> 
</html> 

而且session_register was deprecated in PHP 5.3 and was removed from PHP 5.4

+0

您是否知道這個人正在關注一個教程?..我認爲這些建議在這一點上是沒有幫助的 – Daniel 2013-05-01 00:56:51

+0

是的,我是一個初學者。:( – 2013-05-01 00:59:35

+0

@Daniel我道歉我不知何故錯過了問題的頂部...我想我會責怪我可憐的互聯網連接:-) – Calvin 2013-05-01 01:01:47

1

可能是會話已經設置,當你嘗試用正確的憑據登錄。您可能不得不在註銷期間取消設置會話變量。

unset($_SESSION['myusername']); 
0

嗯錯就錯在你試圖讓你從來沒有設置,看看在HTML表單會話值,它說:「method = post的」,因此,你需要捕捉以這種方式

if(isset($_POST['myusername'])){ 
... 
} 

在另一方面的價值,如果你想設置會話的價值,你只需要編寫類似

$_SESSION['sessionName'] = value; 

而且,如果你想獲得的價值的會議,只是「呼籲」它

echo $_SESSION['sessionName']; //echo is for output, not for calling 

記住,你不設置會話的價值,要發送到的輸入的服務器值,你會得到這些值與$ _ POST [「nameOfInput」]或$ _GET ['nameOfInput ']

1

main_login.php //你的頁面看起來很好。表單操作將帶您到check_login。

<form name="form1" method="post" action="check_login.php"> 

check_login。PHP:在PHP標籤

session_start(); 

$_SESSION['myusername'] = 'myname'; 

if (isset($_POST['myusername'])) { 
    $user = $_POST['myusername']; 
    if (!isset($_SESSION["myusername"]) || $user != $_SESSION['myusername']) { 
     header("Location: main_login.php"); 
    } 
} 
else { 
    echo "login successful"; 
} 

我已經測試這對數據庫和我正能正常工作//整個頁面://改變了session_register()這樣的:

// Register $myusername, $mypassword and redirect to file "login_success.php" 

$_SESSION["myusername"] = $myusername; 
$_SESSION["mypassword"] = $mypassword; 

login_success。 你似乎渴望學習,但你學習老式的PHP。查看phpacademy以瞭解更新的內容。特別是對於數據庫來說,你會明智地學習PDO。花時間在YouTube和其他資源上。

+0

先生它仍然沒有工作:( – 2013-05-01 01:45:18

+0

我糾正了我在全局變量的關鍵名稱中的錯誤我開始使用「用戶名」,而不是「myusername 「我很抱歉,我制定了這個代碼片段,它應該按預期工作。」 – Daniel 2013-05-01 02:10:08

+0

我在哪裏可以將該代碼片段先生?在我的main_login.html? – 2013-05-01 02:54:27