2013-05-01 134 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