#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. это также было одной из моих проблем, большое спасибо, я думаю, после того, как я применил предыдущий ответ, это просто дополняет его, большое спасибо