2013-07-28 163 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我编辑了答案,检查并使用该代码将为您工作。 –