скрипт входа на php не работает и не перенаправляет обратно на панель мониторинга

#php #session #redirect

#php #сессия #перенаправление

Вопрос:

я не смог получить это, я был на этом в течение нескольких дней, я не знаю, со страницы входа или с панели мониторинга, но мой скрипт входа не перенаправляет на панель мониторинга

я много чего перепробовал и даже добавил echo в каждую строку кода, это показывает, что скрипты попадают в перенаправление и фактически перенаправляют, но все равно возвращаются на страницу входа

 <?php require 'sqlconnect.php' ?>

<?php
    session_start(); 
?>
<?php

    $email= '';
    $password = '';

    $errors = '';
    $success = '';

    if(isset($_REQUEST['login'])){

        $email = $_REQUEST['email'];
        $password = $_REQUEST['password'];

        if(empty($email)){
            $errors .= '<div class="alert alert-danger" role="alert">
                        Email field is empty.
                    </div>';
            }
        if(empty($password)){
            $errors .= '<div class="alert alert-danger" role="alert">
                        Password field is empty.
                    </div>';
        }
        if(!empty($email) and !empty($password)){

            $confirm_info = mysqli_query($connection, "SELECT * FROM users WHERE email = '$email' AND password = '$password'");

            if(mysqli_num_rows($confirm_info) >= 1){
                echo "if statement";

                while($results = mysqli_fetch_assoc($confirm_info)) {
                    $token = $results['token'];
                    $token = $_SESSION['token'];
                    header("Location: dashboard/profile.php");
                }
            }else{
                $errors .= '<div class="alert alert-danger" role="alert">
                            Login credentials doesn'nt exist is our database.
                        </div>';
            }
        }
    }
?>
</head>
<body>


        <form class="login100-form validate-form" method="POST" action="login.php">
            <span class="login100-form-title p-b-37">
                Sign In
                <!-- <i class="fa fa-home uk-align-center uk-text-center"></i> -->
            </span>
            <?php
                echo $errors;
                //echo $success;
            ?>
            <br>

            <div class="wrap-input100 validate-input m-b-20" data-validate="Enter username or email">
                <input class="input100" type="email" name="email" placeholder="email" value="<?php echo $email ?>">
                <span class="focus-input100"></span>
            </div>

            <div class="wrap-input100 validate-input m-b-25" data-validate = "Enter password">
                <input class="input100" type="password" name="password" placeholder="password">
                <span class="focus-input100"></span>
            </div>

            <div class="container-login100-form-btn">
                <button class="login100-form-btn" id="login" name="login">
                    Sign In
                    <i class="fa fa-spinner fa-spin" id="spinner" style="display: none"></i>
                </button>
            </div>
            <div class="text-center p-t-57 p-b-20">
                <span class="txt1">
                <a href="forgetpassword.php" class="txt2 hov1">
                    forget password
                    <i class="fa fa-long-arrow-right m-l-5"></i>
                </a>
                </span>
            </div>

            <div class="text-center p-t-57 p-b-20">
                <span class="txt1">
                    Or Create  an account
                </span>
            </div>


            <!-- <div class="flex-c p-b-112">
                <a href="#" class="login100-social-item">
                    <i class="fa fa-facebook-f"></i>
                </a>

                <a href="#" class="login100-social-item">
                    <img src="login/images/icons/icon-google.png" alt="GOOGLE">
                </a>
            </div> -->
<!-- 
            <div class="text-center">
                <a href="#" class="txt2 hov1">
                    Sign Up
                </a>
            </div> -->
        </form>
        <div class="container-login100-form-btn">
            <a href="signup.php" class="txt2 hov1 text-light">
                <button class="signin100-form-btn">
                   Sign Up
                </button>
            </a>
        </div>

    </div>
</div>

</body>
</html>
  

И это код страницы профиля панели мониторинга

 <?php require '../sqlconnect.php' ?>
<?php 
  session_start();
  $token = $_SESSION['token'];
    if(!isset($_SESSION['token'])){
        header("Location: ../login.php");
        exit();
    }else{

      $all_details = mysqli_query($connection, "SELECT * FROM users WHERE token = '$token'");

      if(mysqli_num_rows($all_details)){

        $results = mysqli_fetch_assoc($all_details);
        $id = $results['id'];
        $token = $results['token'];
        $email = $results['email'];
        $first_name = $results['first_name'];
        $is_admin = $results['is_admin'];
        $last_name = $results['last_name'];
        $usernam = $results['username'];
        $image_name = $results['image_name'];
        $image_dir = $results['image_dir'];

        // echo $username;
        }
    }
?>
  

Комментарии:

1. Ах, так что перенаправление может работать, но страница профиля панели мониторинга отправляет вас обратно к логину, когда $_SESSION['token'] значение не установлено. Поскольку он нигде не установлен, я предполагаю, что это должно быть причиной ваших проблем.

2. Вы не устанавливаете сеанс на своей странице входа. Установите сеанс $_SESSION['token'] = $token перед header("Location: dashboard/profile.php");

Ответ №1:

Символы, которых нет в кавычках PHP <?php ?> , обрабатываются как выходные данные HTML. И если страница PHP отправляет какой-либо вывод HTML в браузер, заголовок будет отправлен одновременно. Вот почему любой header() вызов после закрытия тега ?> был бы бесполезен.

Вам нужно изменить свою страницу входа или любую страницу с header() вызовами, чтобы она не закрывалась ?> перед вызовом. Например:

 <?php

require 'sqlconnect.php';
session_start(); 

    $email= '';
    $password = '';

    $errors = '';
    $success = '';

    if(isset($_REQUEST['login'])){

        $email = $_REQUEST['email'];
        $password = $_REQUEST['password'];

        if(empty($email)){
            $errors .= '<div class="alert alert-danger" role="alert">
                        Email field is empty.
                    </div>';
            }
        if(empty($password)){
            $errors .= '<div class="alert alert-danger" role="alert">
                        Password field is empty.
                    </div>';
        }
        if(!empty($email) and !empty($password)){

            $confirm_info = mysqli_query($connection, "SELECT * FROM users WHERE email = '$email' AND password = '$password'");

            if(mysqli_num_rows($confirm_info) >= 1){
                echo "if statement";

                while($results = mysqli_fetch_assoc($confirm_info)) {
                    $token = $results['token'];
                    $token = $_SESSION['token'];
                    header("Location: dashboard/profile.php");
                }
            }else{
                $errors .= '<div class="alert alert-danger" role="alert">
                            Login credentials doesn'nt exist is our database.
                        </div>';
            }
        }
    }
?>
</head>
<body>


        <form class="login100-form validate-form" method="POST" action="login.php">
            <span class="login100-form-title p-b-37">
                Sign In
                <!-- <i class="fa fa-home uk-align-center uk-text-center"></i> -->
            </span>
            <?php
                echo $errors;
                //echo $success;
            ?>
            <br>

            <div class="wrap-input100 validate-input m-b-20" data-validate="Enter username or email">
                <input class="input100" type="email" name="email" placeholder="email" value="<?php echo $email ?>">
                <span class="focus-input100"></span>
            </div>

            <div class="wrap-input100 validate-input m-b-25" data-validate = "Enter password">
                <input class="input100" type="password" name="password" placeholder="password">
                <span class="focus-input100"></span>
            </div>

            <div class="container-login100-form-btn">
                <button class="login100-form-btn" id="login" name="login">
                    Sign In
                    <i class="fa fa-spinner fa-spin" id="spinner" style="display: none"></i>
                </button>
            </div>
            <div class="text-center p-t-57 p-b-20">
                <span class="txt1">
                <a href="forgetpassword.php" class="txt2 hov1">
                    forget password
                    <i class="fa fa-long-arrow-right m-l-5"></i>
                </a>
                </span>
            </div>

            <div class="text-center p-t-57 p-b-20">
                <span class="txt1">
                    Or Create  an account
                </span>
            </div>


            <!-- <div class="flex-c p-b-112">
                <a href="#" class="login100-social-item">
                    <i class="fa fa-facebook-f"></i>
                </a>

                <a href="#" class="login100-social-item">
                    <img src="login/images/icons/icon-google.png" alt="GOOGLE">
                </a>
            </div> -->
<!-- 
            <div class="text-center">
                <a href="#" class="txt2 hov1">
                    Sign Up
                </a>
            </div> -->
        </form>
        <div class="container-login100-form-btn">
            <a href="signup.php" class="txt2 hov1 text-light">
                <button class="signin100-form-btn">
                   Sign Up
                </button>
            </a>
        </div>

    </div>
</div>

</body>
</html>
  

Вам понадобились бы аналогичные изменения на странице профиля, но вы должны были понять идею из приведенного выше примера.

Комментарии:

1. это работает как шарм, я сделал это, и это сработало, большое спасибо

Ответ №2:

Я думаю, что вы изменили свое назначение переменной здесь:

 while($results = mysqli_fetch_assoc($confirm_info)) {
                    $token = $results['token'];
                    $token = $_SESSION['token'];
                    header("Location: dashboard/profile.php");
                }
  

Это должно быть

 while($results = mysqli_fetch_assoc($confirm_info)) {
                    $_SESSION['token'] = $results['token'];
                    header("Location: dashboard/profile.php");
                }
  

Ответ №3:

На странице входа

 while($results = mysqli_fetch_assoc($confirm_info))
{
    $token = $results['token'];
    $_SESSION['token'] = $token;
    header("Location: dashboard/profile.php");
}
  

Комментарии:

1. это не сработало, оно по-прежнему перенаправляет меня обратно на страницу входа, и я должен сказать, что это хорошо работает на localhost, но не на live

2. это также было одной из моих проблем, большое спасибо, я думаю, после того, как я применил предыдущий ответ, это просто дополняет его, большое спасибо