2013-07-28 166 views
0

我正在學習如何從書中做出簡單的登錄表單,並遇到一些問題。此登錄腳本

當我運行在瀏覽器中的login.php腳本並輸入正確的用戶名和密碼(或者甚至是錯誤的輸入)..它顯示錯誤

(注:用C _SESSION:未定義的變量:\ Program Files(x86)\ EasyPHP-DevServer-13.1VC9 \ data \ localweb \ rassal \ login.php在第8行)。

如果我輸入正確的組合,用戶登錄..但仍會出現相同的通知,腳本將重定向回login.php頁面。

如何編輯腳本以使其完美工作?就像它應該接受登錄,然後轉到頁面(在會話中)。

這裏是代碼

的login.php

<?php 
$username = (isset($_POST['username'])) ? $_POST['username'] : ''; 
$password = (isset($_POST['password'])) ? $_POST['password'] : ''; 
$redirect = (isset($_REQUEST['redirect'])) ? $_POST['redirect'] : 'secret.php'; 

if(isset($_POST['submit'])) 
{ 
if(!isset($_SESSION['logged']) && $_SESSION['logged']!=1) 
{ 
if(!empty($username) && $username == 'uname' && !empty($password) && $password = 'ppas') 
{ 
$_SESSION['username']=$username; 
$_SESSION['logged']=1; 
header('Refresh: 5; URL = '.$redirect); 
echo "Redirecting"; 
die(); 
} 
else 
{ 
$_SESSION['username']=''; 
$_SESSION['logged']=0; 
echo "You entered a wrong combination of username and password"; 
} 
} 
} 
?> 
<html> 
<head> 
<title>Login </title> 
</head> 
<body> 
<form action="login.php" method="post"> 
<table> 
<tr> 
<td>Username :</td> 
<td><input type="text" name="username" value="<?php echo $username; ?>" /></td> 
</tr> 
<tr> 
<td>Password:</td> 
<td><input type="password" name="password" value="<?php echo $password; ?>" /></td> 
</tr> 
<tr> 
<td><input type="submit" name="submit" value="Log In" /></td> 
</tr> 
</table> 
</form> 
</body> 
</html> 

這裏的auth.inc.php

<?php 
session_start(); 

if(!isset($_SESSION['logged']) && $_SESSION['logged']!=1) 
{ 
header('Refresh: 5; URL=login.php?redirect=' . $_SERVER['PHP_SELF']); 
echo "You'd be now redirected to the login page "; 
} 
die(); 
?> 

和這裏的secret.php(當用戶要顯示的文件成功登錄)

<?php 
require ('auth.inc.php'); 
?> 
<html> 
<head> 
<title>Logged IN </title> 
</head> 
<body> 
<h2>You're now logged in </h2> 
</body> 
</html> 
+0

你是不是在寫這個而不是縮寫,還是隻是複製/粘貼已經被竊聽?使用適當的格式和IDE(netbeans是免費的)確實有助於提高可讀性,並且稍後再編輯代碼。關於主題:您應該使用「session_start();」開始所有文件 – JimL

+0

在'$ _SESSION ['logged']''上調用'isset'之前,您應該放置'session_start'。 –

+0

你的'session_start()'在哪裏? – Sean

回答

2

嘗試<?php後寫session_start();中的login.php的頂部以激活會話變量:)

此外,更換所有

if(!isset($_SESSION['logged']) && $_SESSION['logged']!=1) 

if (!isset($_SESSION['logged']) || $_SESSION['logged']!=1) 

,以確保你不會調用未定義的索引。

+0

好吧,做到了..但我現在得到這個錯誤: - 注意:未定義的索引:登錄到C:\ Program Files文件(x86)\ EasyPHP-DevServer-13.1VC9 \ data \ localweb \ rassal \ login.php在線10 – Rahul

+0

..因爲它沒有設置。它應該是'||',而不是'&&': if(!isset($ _ SESSION ['logged'])|| $ _SESSION ['logged']!= 1) –

0

你還沒有啓動會話,這就是爲什麼它是未定義的變量在你login.php文件。

使用此在的login.php文件:

<?php 
session_start(); //use this line in your login.php file at the starting 
$username = (isset($_POST['username'])) ? $_POST['username'] : ''; 

編輯:

<?php 
session_start(); 
if(!isset($_SESSION['logged'])) { 
    $_SESSION['logged'] = ""; 
} 

使用此代碼。

+0

好的,做到了..但我現在得到這個錯誤: - 注意:未定義索引:登錄C:\ Program Files文件(x86)\ EasyPHP-DevServer-13.1VC9 \ data \ localweb \ rassal \ login.php 10行 – Rahul

+0

@Rahul我編輯了答案,檢查並使用該代碼將爲您工作。 –