Не могу сделать редирект. Какая ошибка в коде?

Ссылка скопирована
1 ответ

Пытаюсь написать сайт. Стартовая страница просит ввести логин и пароль. После авторизации пользователь проходит на сайт. Одна из страниц сайта требует авторизации пользователя, если он её не прошел (редирект на страницу с логином и паролем), но этого не происходит и выдаёт ошибку: ERR_TOO_MANY_REDIRECTS. Код страницы с редиректом:

<?php session_start(); if ($_SESSION['login'] = false); {     header('Location:index.php');     if ($_SESSION['login'] = true);     {         header('Location:books');         exit;     } } ?>

<?php session_start(); if ($_SESSION['login'] = false); { header('Location:index.php'); if ($_SESSION['login'] = true); { header('Location:books'); exit; } } ?>

Дополнительно:

if ($_SESSION['login'] = false);
Внимательнее будьте
= - оператор присваивания
== - оператор не строгого сравнения
=== - оператор строгого сравнения

  • Дмитрий, благодарю за ответ. Исправил на это:
    <?php
    session_start();
    if ($_SESSION['login'] === false);
    {
    header('Location:index.php');
    if ($_SESSION['login'] === true);
    {
    header('Location:books');
    }
    }
    ?>

    Но ошибка всё равно возникает. Маленькое уточнение: второе условие происходит на странице books. Когда убираешь второе условие, то естественно всегда перекидывает на страницу логина и пароля.

  • eridanlivia, оформляйте код, как КОД.
    И что у вас хранится в сессии, распечатку можно?
  • maksam07, извините, Я совсем новый в этом деле...

    <?php
    session_start();
    if ($_SESSION['user'])
    {
    header('Location: url: сайт');
    }

    ?>

    Если Я правильно понял Ваш вопрос...

  • eridanlivia,

    print_r($_SESSION)

  • maksam07, спасибо за потреченное время. Правильно ли Я понял, что эту команду нужно вставить в
    <?php
    session_start();
    if ($_SESSION['user'])
    {
    header('Location: url: сайт');
    }

    ?>

    Т.е. должно выглядить так:
    <?php
    session_start();
    if ($_SESSION['user'])
    {
    header('Location: url: сайт');
    }
    print_r($_SESSION)

    ?>

    Выдало: Array()

  • eridanlivia, получается, на данном этапе у вас сессия пустая и редиректить некуда
  • maksam07, Сессия берётся из sql? Как её заполнить? Извините за тупые вопросы.
  • eridanlivia, если вы не знаете, как ее заполнить, для чего пытаетесь для нее писать условия?

    Документация по сессиям: https://www.php.net/manual/ru/book.session.php

  • maksam07, благодарю Вас! Как всё сделаю, что нужно, вернусь к своему вопросу.
  • Ответы:

    &lt;?php session_start(); if ($_SESSION['login'] = false);  //точки с запятой быть не должно {     header('Location:index.php');     if ($_SESSION['login'] = true);         // не один =, а два == и скорее нужно так: if (!empty($_SESSION['login'] ))     {         header('Location:books');         exit;     } } ?&gt;

    &lt;?php session_start(); if ($_SESSION['login'] = false); //точки с запятой быть не должно { header('Location:index.php'); if ($_SESSION['login'] = true); // не один =, а два == и скорее нужно так: if (!empty($_SESSION['login'] )) { header('Location:books'); exit; } } ?&gt;

    У вас вообще проверка if ($_SESSION['login'] = true) вложена в другой обратный IF и никогда не выполнится, надо вынести и писать ELSE IF
    P.S вообще все не правильно, это код учившегося два часа, надо усердней читать вначале.

    • Спасибо большое! Оказывается код такой должен быть:
      <?php
      session_start();

      if(!$_SESSION['myrow']){
      header("Location: /");
      exit;
      }
      ?>

      Я решил php по ходу пьессы изучать... Что-то получается, что-то нет... Спасибо всем за помощь!

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Антон С. Ответ

    Для выполнения редиректа на другую страницу с помощью PHP, нужно использовать функцию header(). Однако, для того чтобы редирект корректно работал, необходимо убедиться, что перед вызовом функции header() не было отправлено никаких данных на страницу, включая пробелы или символы новой строки.

    Пример кода для выполнения редиректа на другую страницу:

    header("Location: http://www.example.com");
    exit();

    header("Location: http://www.example.com"); exit();

    Обратите внимание, что после вызова функции header() следует использовать exit() или die(), чтобы прекратить выполнение скрипта и убедиться, что редирект произойдет немедленно. Если этого не сделать, PHP может продолжить выполнение скрипта, что может вызвать проблемы с редиректом.

    Также убедитесь, что перед вызовом функции header() не было вывода данных на страницу, даже случайно. Любой вывод на страницу, включая пробелы или символы новой строки, предотвратит корректное выполнение редиректа.

    Если после исправления указанных моментов редирект все равно не работает, возможно проблема в настройках сервера. Убедитесь, что сервер правильно настроен для обработки редиректов и не блокирует использование функции header().

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно