我已经完成了登录表单,它在我的 WAMP 服务器上 100% 正常工作。然而,当我在实时服务器上运行它时,一切都 100% 工作,除了当我登录时,它不会将我的页面重定向到它应该的页面(只显示一个空白的 HTML 页面)。然而它已经登录了,因为如果我输入它应该去的页面的网址,它就会像它应该的那样显示。文件的路径是正确的。我希望我的问题很清楚。这是我的登录表单的代码:
<?php
include_once "includes/scripts.php";
session_start();
include_once ("includes/connect.php");
if(isset($_SESSION['logged_in'])) {
header('location: admin_cms.php');
exit();
} else {
if(isset($_POST['username'], $_POST['password'])) {
$username = $_POST['username'];
$password = md5($_POST['password']);
if(empty($username) or empty($password)) {
$error = '<p>NOTE: Fields are blank</p>';
} else {
$query = $pdo->prepare("SELECT * FROM users WHERE user_name = ? AND user_password =?");
$query->bindValue(1, $username);
$query->bindValue(2, $password);
$query->execute();
$num = $query->rowCount();
if($num == 1) {
$_SESSION['logged_in'] = true;
header('location: admin_cms.php');
exit();
} else {
$error = "<p>NOTE: The username or password is incorrect</p>";
}
}
}
?>
<div id="login_container">
<br><img src="images/camelhorst_logo_full.png" style="margin-top:38px;">
<h1>LOGIN<img src="images/three_column_grid_line.png" alt="line"></h1>
<form acton = "admin.php" method="post" autocompleate="off">
<label>Username:</label>
<input type="text" name="username" placeholder="Your Username" required autocomplete="off">
<label>Password:</label>
<input type="password" name="password" placeholder="Your Password" required autocomplete="off">
<input type="submit" value="Login" name="submit_login">
</form>
<?php
if(isset($error)) {
echo $error;
}
?>
<p id="copyright_admin"> © CAMELHORSE CREATIVE STUDIO 2013 </p>
</div><!--login_container-->
<?php
}
?>
</body>
</html>
最佳答案
首先
session_start()
必须位于页面的最顶部。前面不能有任何内容,也不能有空格。
其次,
if (empty($username) or empty($password)){
需要用这个替换
if (empty($username) || empty($password)){
尝试一下,看看是否有效
另外,这有点偏离主题,我确信这不是导致您问题的原因,但 md5() 已经非常过时了。尝试使用
sha1();
用于加密。 sha1() 也有点老了,但它比 md5() 好。
这也有点偏离主题。但是,似乎值得注意。你有
if(isset($_POST['username'], $_POST['password'])) {
$username = $_POST['username'];
$password = md5($_POST['password']);
if(empty($username) or empty($password)){
$error = '<p>NOTE: Fields are blank</p>';
}
默认情况下,即使加密内容的值为空,md5 也会返回 32 个字符的十六进制数字。那么,条件
empty($password)
有点多余。最好有这样的:
if(isset($_POST['username'], $_POST['password'])) {
$username = $_POST['username'];
$password = $_POST['password'];
$pass_enc = md5($_POST['password']);
if(empty($username) || empty($password)){
$error = '<p>NOTE: Fields are blank</p>';
}
关于php - 成功登录后不重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19071157/