Слишком много редиректов. XAMPP ; локальный хост; MySQL (PHPMYADMIN)

Я использую XAMPP для подключения БД с PHP myadmin и тестовой веб-страницей, которая работает на локальном веб-сервере через Apache. Я загрузил все файлы в папку htdocs. Когда я теперь запускаю веб-страницу и пытаюсь «зарегистрироваться» для этой фиктивной страницы на локальном хосте, браузер выдает сообщение об ошибке: ERR_TOO_MANY_REDIRECTS. Прежде всего, данные, которые я отправляю с помощью «кнопки регистрации», записываются в БД, которую я могу проверить через консоль PHP myadmin.

Я думаю, что это проблема htacess, и у меня есть вопросы по этому поводу.

Где должен быть файл htacess? В том же каталоге с другими моими файлами? Что должно быть в файле htacess? Я не хочу загружать его в Интернет, поэтому он предназначен только для учебных целей и должен оставаться на локальном хосте.

Надеюсь, я смог описать проблему достаточно хорошо. Первый мой индексный файл:

<?php

session_start();

$error = "";

if(array_key_exists("logout", $_GET)){

    unset($_SESSION);
    setcookie("id", "", time() - 60*60);
    $_COOKIE["id"] = "";

}else if(array_key_exists("id",$_SESSION) OR array_key_exists("id", $_COOKIE)){

    header("Location: loggedinpage.php");

}


if(array_key_exists("submit", $_POST)){

    include("connection.php");


    if(!$_POST['email']){

        $error .= "Die Emailadresse fehlt<br>";

    }

    if(!$_POST['password']){

        $error .= "Passwort wird benötigt<br>";

    }

    if($error != ""){

        $error = "<p>Es gab Fehler in deinem Formular</p>".$error;

    }else {

        if($_POST['signUp'] == '1'){

               $query = "SELECT id FROM users WHERE email = '".mysqli_real_escape_string($link, $_POST['email'])."' LIMIT 1";

                $result = mysqli_query($link, $query);

                if(mysqli_num_rows($result) > 0){

                    $error = "Diese email ist bereits vergriffen.";

                }else{

                    $query = "INSERT INTO users (email, password) VALUES ('".mysqli_real_escape_string($link, $_POST['email'])."',
                    '".mysqli_real_escape_string($link, $_POST['password'])."')";

                    if(!mysqli_query($link, $query)){

                        $error = "<p>Registrieren hat nicht funktioniert, versuche es später noch einmal.</p>";                    

                    }else{

                        $query = "UPDATE users SET password = '".md5(md5(mysqli_insert_id($link)).$_POST['password'])."' WHERE id = ".mysqli_insert_id($link)." LIMIT 1";

                        mysqli_query($link, $query);

                        $_SESSION['id'] = mysqli_insert_id($link);

                        if($_POST['stayLoggedIn'] == '1'){

                            setcookie("id", mysqli_insert_id($link), time() + 60*60*24*365);

                        }

                        header("Location: loggedinpage.php");

                    }
                } 


        }else if($_POST['signUp'] == '0'){

            $query = "SELECT * FROM users WHERE email = '".mysqli_real_escape_string($link, $_POST['email'])."'";

            $result = mysqli_query($link, $query);

            $row = mysqli_fetch_array($result);

            if(isset($row)){

                  $hashedPassword = md5(md5($row['id']).$_POST['password']);

                    if($hashedPassword == $row['password']){

                        $_SESSION['id'] = $row['id'];

                        if($_POST['stayLoggedIn'] == '1'){

                            setcookie("id", mysqli_insert_id($link), time() + 60*60*24*365);

                        }

                        header("Location: loggedinpage.php");

                    }else{

                        $error = "Deine Email Passwort Kombination konnte nicht gefunden werden.";

                    }

            }else{

                 $error = "2 Deine Email Passwort Kombination konnte nicht gefunden werden.";

            }


        }




    }





}

person user9167430    schedule 02.03.2019    source источник
comment
Возможный дубликат Ошибка 310 (net::ERR_TOO_MANY_REDIRECTS):   -  person Anurag Srivastava    schedule 02.03.2019
comment
Как вы думаете, это скорее проблема кода, чем проблема htacess?   -  person user9167430    schedule 02.03.2019
comment
Да, я бы посоветовал разбить код на более мелкие части и посмотреть, в какой момент у вас начинают появляться ошибки.   -  person Anurag Srivastava    schedule 02.03.2019


Ответы (1)


Это оскорбительный код:

if (array_key_exists("logout", $_GET)) {
    unset($_SESSION);
    setcookie("id", "", time() - 60*60);
    $_COOKIE["id"] = ""; // <-- Here is the problem
} elseif (array_key_exists("id", $_SESSION) OR array_key_exists("id", $_COOKIE)) {
    header("Location: loggedinpage.php"); //                     ^-- and here
}

Обратите внимание, как вы устанавливаете $_COOKIE['id'] в пустую строку, но ключ все еще существует?
В этом проблема, это означает, что else-if увидит, что ключ 'id' существует, а затем перенаправит с помощью функции заголовка на этот кодовый блок.

Чтобы исправить это, просто измените строку на следующую:

unset($_COOKIE["id"]);
person JustCarty    schedule 02.03.2019
comment
Большое спасибо, но это не меняет поведения. Если это из-за кода, я думаю, это должна быть какая-то строка, связанная с регистрацией или после нее... У вас есть другая идея? - person user9167430; 02.03.2019
comment
@user9167430 user9167430 Я предполагаю, что это проблема, для которой я опубликовал решение, но она появляется где-то еще. Вместо того, чтобы устанавливать идентификатор в пустую строку, просто отключите его. Делайте это везде, где пишете $_COOKIE['id'] = '';. Другая вещь может быть array_key_exists, вместо этого рассмотрите возможность проверки if (!empty($_SESSION['id'])) вместо этого. - person JustCarty; 02.03.2019