嗨,我在这里遇到了问题。 我需要在这里登录一个帐户 但在我输入所有详细信息并单击“登录”后,页面会将我重定向回登录页面。但实际上该帐户已登录,因为它无法在登录后重定向回主页。 这是什么问题?我正在使用Session。 我把我的session_start放在connect.php(用于连接数据库) 以下是The Code
<?php error_reporting(0) ?>
<?php
include_once 'connect.php';
//Code Refer to http://www.w3schools.com/php/func_http_setcookie.asp
if(isset($_SESSION['user'])!="")
{
header("Location: Home.php");
}
if(isset($_POST['btn-login']))
{
$username = mysql_real_escape_string($_POST['username']);
$upass = mysql_real_escape_string($_POST['password']);
$res=mysql_query("SELECT * FROM user WHERE u_username='$username'");
$row=mysql_fetch_array($res);
if($row['u_password']==md5($upass))
{
$_SESSION['user'] = $row['u_ID'];
header("Location: Home.php");
}
else
{
?>
<script>alert('wrong details');</script>
<?php
}
?>
<?php
$year = time() + 31536000;
setcookie('rememberme', $_POST['username'], $year);
if ($_POST['rememberme'])
{
setcookie ('rememberme',$_POST['username'], $year);
}
else
{
setcookie(rememberme, $past);
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Login</title>
<link rel="stylesheet" href="Style.css" type="text/css" />
</head>
<body>
<div id="header">
<div id="left">
<label>AngelService</label><br/>
<p>Royal Borough of Greenwich</p>
</div>
</div>
<center> <a href="Home.php">Home Page</a> | <a href="Viewpost.php">View Post</a> | <a href="PostService">Post A Service</a></center>
<center>
<div id="login-form">
<form method="post">
<table align="center" width="30%" border="0">
<tr>
<td><input type="text" name="username" placeholder="Your Username" required value="<?php
echo $_COOKIE['rememberme']; ?>"/>
</td>
</tr>
<tr>
<td><input type="password" name="password" placeholder="Your Password" required />
</td>
</tr>
<tr>
<td><button type="submit" name="btn-login">Sign In</button></td>
</tr>
<tr>
<td>
<input type="checkbox" name="rememberme" value="rememberme" style="font- size:6px;"> Remember Me<br>
</td>
</tr>
<tr>
<td>
<a href="Register.php">Sign Up Here</a></td>
</tr>
</table>
</form>
</div>
</center>
<div id="footer">
<div id="center" align="center">
<br/>
<p>Angel Services | Royal Borough of Greenwich | Created By UOG Student: Kuai Boon Ting</p>
</div>
</div>
</body>
</html>
答案 0 :(得分:1)
您缺少操作=&#34;您的重定向页面&#34;在表格标签中,即
<form method="post" action="forexample-Home.php">
.....
</form>
答案 1 :(得分:1)
您可以采取一些措施来改进代码。对于初学者,您不需要像对方那样直接关闭和打开PHP标记
<?php error_reporting(0) ?>
<?php
include_once 'connect.php';
可能只是
<?php error_reporting(0);
include_once 'connect.php';
声明if(isset($_SESSION['user'])!="")
并不完全符合您的想法。 isset($_SESSION['user'])
返回一个布尔值(true / false),因此检查布尔值是否为空将无法正常工作。您可以if (!empty($_SESSION['user'])) {...
检查它是否已设置以及是否为空。查看documentation for isset()
和documentation for empty()
。
对于您的实际问题:请注意,在向浏览器输出任何空格(HTML或PHP header();
)后,无法调用echo
函数。这将显示为 PHP警告,如果您放置error_reporting(-1);
而不是忽略所有错误(如您当前正在将error_reporting设置为0),则会报告。
另一个答案建议使用表单的HTML action
- 属性,但如果登录无效,最好将其发送到同一页面,并且只有重定向才能登录有效。这被称为&#34;验证和重定向&#34;。
以下这些指针只是为了改进您的代码,而不一定是您的问题的原因。
如果你想设置一个cookie,它必须在之前完成 any并且所有输出都被发送到浏览器(see this post),所以如果{{ 1}}语句失败,并且它进入else括号,您的cookie将不会被设置。
如果可以,您应该停止使用if($row['u_password']==md5($upass))
功能。它们已被弃用,将来会被删除。切换到mysql_*
或PDO。 (查看this post)。
mysqli_*
哈希的使用并不安全。如果你有PHP 5.5.0或更高版本,你应该考虑使用password_hash
和password_verify
每md5
后,您应始终放置一个header("Location: ....");
,以便代码在重定向后停止执行。 (查看this post)。