php - 成功登录后不重定向

标签 php html sql

我已经完成了登录表单,它在我的 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/

相关文章:

php - 选择他们的(timeStamped)生日晚 X 天的用户

php - 如何将元素定位在DIV内的固定位置

php - 我需要 libphp7.so 模块来在 Centos 上配置 apache

php - 我如何在我的应用程序中使用 json?

html - 顶部栏下拉菜单在 Foundation 6.2.4 中不起作用

javascript - 开关元件的 onchange 函数

php - 具有风景和肖像图像的响应画廊

html - 其容器中的 Accordion "growing out"- 在 IE7/8 中

mysql - SQL : i got an Ambiguous error

mysql - 删除外键约束未完全删除