0

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

<?php
    ini_set("display_errors", true);
    echo "<pre>REQUEST_METHOD: " . $_SERVER["REQUEST_METHOD"] . "\nGET: " . var_export($_GET, true) . "\nPOST: " . var_export($_POST, true) . "\nCOOKIE: " . var_export($_COOKIE, true) . "</pre>";
// Код
if (empty($_POST["type"])) {
    echo "Чтобы пост не был слишком большим, я написал этот код в конце, полученный пользователем.";
} else if ($_POST["type"] == "login") {
    // Проверки
} else if ($_POST["type"] == "register") {
    // Проверки
} else {
    echo "То же самое что и выше, но с особым сообщением в div.";
}

Приходит пользователю когда ещё ничего не отправил:

<pre>REQUEST_METHOD: GET
GET: array (
  'page' => 'auth',
)
POST: array (
)
COOKIE: array (
)</pre><html lang="ru">
&lt;head&gt;
    &lt;meta charset=&quot;utf-8&quot;&gt;
    &lt;title&gt;Мессенджер для Неки́тки&lt;/title&gt;
    &lt;style type=&quot;text/css&quot; media=&quot;handheld, print&quot;&gt;
        @media (orientation: landscape) {

        }
        @media (orientation: portrait) {

        }
    &lt;/style&gt;
    &lt;style type=&quot;text/css&quot; media=&quot;screen, tv&quot;&gt;

    &lt;/style&gt;
&lt;/head&gt;
&lt;form method=&quot;post&quot; id=&quot;auth_form&quot;&gt;
    &lt;input type=&quot;hidden&quot; name=&quot;type&quot; value=&quot;login&quot;&gt;
    &lt;input type=&quot;text&quot; name=&quot;login&quot; placeholder=&quot;Ваш логин&quot; required&gt;&lt;br&gt;
    &lt;input type=&quot;password&quot; name=&quot;password&quot; placeholder=&quot;Ваш пароль&quot; required&gt;&lt;br&gt;
    &lt;input type=&quot;submit&quot; value=&quot;Войти&quot;&gt;
&lt;/form&gt;
&lt;br&gt;&lt;/br&gt;
&lt;div id=&quot;set_type_login&quot; onclick=&quot;setFormType('login')&quot; style=&quot;display: none;&quot;&gt;Войти в аккаунт&lt;/div&gt;
&lt;div id=&quot;set_type_register&quot; onclick=&quot;setFormType('register')&quot;&gt;Создать аккаунт&lt;/div&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
    function setFormType(type) {
        if (type == &quot;register&quot;) {
            document.getElementById(&quot;set_type_login&quot;).style.display = &quot;block&quot;;
            document.getElementById(&quot;set_type_register&quot;).style.display = &quot;none&quot;;
            document.getElementById(&quot;auth_form&quot;).innerHTML = &quot;&lt;form method=\&quot;post\&quot; id=\&quot;auth_form\&quot;&gt;\n        &lt;input type=\&quot;hidden\&quot; name=\&quot;type\&quot; value=\&quot;register\&quot;&gt;\n        &lt;input type=\&quot;text\&quot; name=\&quot;name\&quot; placeholder=\&quot;Придумайте имя\&quot; required&gt;&lt;br&gt;\n        &lt;input type=\&quot;text\&quot; name=\&quot;login\&quot; placeholder=\&quot;Придумайте логин (не обязательно)\&quot;&gt;&lt;br&gt;\n        &lt;input type=\&quot;text\&quot; name=\&quot;password\&quot; placeholder=\&quot;Придумайте пароль\&quot; required&gt;&lt;br&gt;\n        &lt;input type=\&quot;submit\&quot; value=\&quot;Создать\&quot;&gt;\n    &lt;/form&gt;&quot;;
        } else if (type == &quot;login&quot;) {
            document.getElementById(&quot;set_type_login&quot;).style.display = &quot;none&quot;;
            document.getElementById(&quot;set_type_register&quot;).style.display = &quot;block&quot;;
            document.getElementById(&quot;auth_form&quot;).innerHTML = &quot;&lt;form method=\&quot;post\&quot; id=\&quot;auth_form\&quot;&gt;\n        &lt;input type=\&quot;hidden\&quot; name=\&quot;type\&quot; value=\&quot;login\&quot;&gt;\n        &lt;input type=\&quot;text\&quot; name=\&quot;login\&quot; placeholder=\&quot;Ваш логин\&quot; required&gt;&lt;br&gt;\n        &lt;input type=\&quot;password\&quot; name=\&quot;password\&quot; placeholder=\&quot;Ваш пароль\&quot; required&gt;&lt;br&gt;\n        &lt;input type=\&quot;submit\&quot; value=\&quot;Войти\&quot;&gt;\n    &lt;/form&gt;&quot;;
        }
    }
&lt;/script&gt;

</html>

Приходит если ввести правильный логин и пароль:

<pre>REQUEST_METHOD: GET
GET: array (
  'page' => 'auth',
)
POST: array (
)
COOKIE: array (
)</pre><html lang="ru">
&lt;head&gt;
    &lt;meta charset=&quot;utf-8&quot;&gt;
    &lt;title&gt;Мессенджер для Неки́тки&lt;/title&gt;
    &lt;style type=&quot;text/css&quot; media=&quot;handheld, print&quot;&gt;
        @media (orientation: landscape) {

        }
        @media (orientation: portrait) {

        }
    &lt;/style&gt;
    &lt;style type=&quot;text/css&quot; media=&quot;screen, tv&quot;&gt;

    &lt;/style&gt;
&lt;/head&gt;
&lt;form method=&quot;post&quot; id=&quot;auth_form&quot;&gt;
    &lt;input type=&quot;hidden&quot; name=&quot;type&quot; value=&quot;login&quot;&gt;
    &lt;input type=&quot;text&quot; name=&quot;login&quot; placeholder=&quot;Ваш логин&quot; required&gt;&lt;br&gt;
    &lt;input type=&quot;password&quot; name=&quot;password&quot; placeholder=&quot;Ваш пароль&quot; required&gt;&lt;br&gt;
    &lt;input type=&quot;submit&quot; value=&quot;Войти&quot;&gt;
&lt;/form&gt;
&lt;br&gt;&lt;/br&gt;
&lt;div id=&quot;set_type_login&quot; onclick=&quot;setFormType('login')&quot; style=&quot;display: none;&quot;&gt;Войти в аккаунт&lt;/div&gt;
&lt;div id=&quot;set_type_register&quot; onclick=&quot;setFormType('register')&quot;&gt;Создать аккаунт&lt;/div&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
    function setFormType(type) {
        if (type == &quot;register&quot;) {
            document.getElementById(&quot;set_type_login&quot;).style.display = &quot;block&quot;;
            document.getElementById(&quot;set_type_register&quot;).style.display = &quot;none&quot;;
            document.getElementById(&quot;auth_form&quot;).innerHTML = &quot;&lt;form method=\&quot;post\&quot; id=\&quot;auth_form\&quot;&gt;\n        &lt;input type=\&quot;hidden\&quot; name=\&quot;type\&quot; value=\&quot;register\&quot;&gt;\n        &lt;input type=\&quot;text\&quot; name=\&quot;name\&quot; placeholder=\&quot;Придумайте имя\&quot; required&gt;&lt;br&gt;\n        &lt;input type=\&quot;text\&quot; name=\&quot;login\&quot; placeholder=\&quot;Придумайте логин (не обязательно)\&quot;&gt;&lt;br&gt;\n        &lt;input type=\&quot;text\&quot; name=\&quot;password\&quot; placeholder=\&quot;Придумайте пароль\&quot; required&gt;&lt;br&gt;\n        &lt;input type=\&quot;submit\&quot; value=\&quot;Создать\&quot;&gt;\n    &lt;/form&gt;&quot;;
        } else if (type == &quot;login&quot;) {
            document.getElementById(&quot;set_type_login&quot;).style.display = &quot;none&quot;;
            document.getElementById(&quot;set_type_register&quot;).style.display = &quot;block&quot;;
            document.getElementById(&quot;auth_form&quot;).innerHTML = &quot;&lt;form method=\&quot;post\&quot; id=\&quot;auth_form\&quot;&gt;\n        &lt;input type=\&quot;hidden\&quot; name=\&quot;type\&quot; value=\&quot;login\&quot;&gt;\n        &lt;input type=\&quot;text\&quot; name=\&quot;login\&quot; placeholder=\&quot;Ваш логин\&quot; required&gt;&lt;br&gt;\n        &lt;input type=\&quot;password\&quot; name=\&quot;password\&quot; placeholder=\&quot;Ваш пароль\&quot; required&gt;&lt;br&gt;\n        &lt;input type=\&quot;submit\&quot; value=\&quot;Войти\&quot;&gt;\n    &lt;/form&gt;&quot;;
        }
    }
&lt;/script&gt;

</html>

Приходит если ввести неправильный логин:

<pre>REQUEST_METHOD: POST
GET: array (
  'page' => 'auth',
)
POST: array (
  'type' => 'login',
  'login' => 't',
  'password' => 'test',
)
COOKIE: array (
)</pre><html lang="ru">
&lt;head&gt;
    &lt;meta charset=&quot;utf-8&quot;&gt;
    &lt;title&gt;Мессенджер для Неки́тки&lt;/title&gt;
    &lt;style type=&quot;text/css&quot; media=&quot;handheld, print&quot;&gt;
        @media (orientation: landscape) {

        }
        @media (orientation: portrait) {

        }
    &lt;/style&gt;
    &lt;style type=&quot;text/css&quot; media=&quot;screen, tv&quot;&gt;

    &lt;/style&gt;
&lt;/head&gt;
&lt;div&gt;Нет аккаунта с таким логином!&lt;/div&gt;
&lt;form method=&quot;post&quot; id=&quot;auth_form&quot;&gt;
    &lt;input type=&quot;hidden&quot; name=&quot;type&quot; value=&quot;login&quot;&gt;
    &lt;input type=&quot;text&quot; name=&quot;login&quot; placeholder=&quot;Ваш логин&quot; required&gt;&lt;br&gt;
    &lt;input type=&quot;password&quot; name=&quot;password&quot; placeholder=&quot;Ваш пароль&quot; required&gt;&lt;br&gt;
    &lt;input type=&quot;submit&quot; value=&quot;Войти&quot;&gt;
&lt;/form&gt;
&lt;br&gt;&lt;/br&gt;
&lt;div id=&quot;set_type_login&quot; onclick=&quot;setFormType('login')&quot; style=&quot;display: none;&quot;&gt;Войти в аккаунт&lt;/div&gt;
&lt;div id=&quot;set_type_register&quot; onclick=&quot;setFormType('register')&quot;&gt;Создать аккаунт&lt;/div&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
    function setFormType(type) {
        if (type == &quot;register&quot;) {
            document.getElementById(&quot;set_type_login&quot;).style.display = &quot;block&quot;;
            document.getElementById(&quot;set_type_register&quot;).style.display = &quot;none&quot;;
            document.getElementById(&quot;auth_form&quot;).innerHTML = &quot;&lt;form method=\&quot;post\&quot; id=\&quot;auth_form\&quot;&gt;\n        &lt;input type=\&quot;hidden\&quot; name=\&quot;type\&quot; value=\&quot;register\&quot;&gt;\n        &lt;input type=\&quot;text\&quot; name=\&quot;name\&quot; placeholder=\&quot;Придумайте имя\&quot; required&gt;&lt;br&gt;\n        &lt;input type=\&quot;text\&quot; name=\&quot;login\&quot; placeholder=\&quot;Придумайте логин (не обязательно)\&quot;&gt;&lt;br&gt;\n        &lt;input type=\&quot;text\&quot; name=\&quot;password\&quot; placeholder=\&quot;Придумайте пароль\&quot; required&gt;&lt;br&gt;\n        &lt;input type=\&quot;submit\&quot; value=\&quot;Создать\&quot;&gt;\n    &lt;/form&gt;&quot;;
        } else if (type == &quot;login&quot;) {
            document.getElementById(&quot;set_type_login&quot;).style.display = &quot;none&quot;;
            document.getElementById(&quot;set_type_register&quot;).style.display = &quot;block&quot;;
            document.getElementById(&quot;auth_form&quot;).innerHTML = &quot;&lt;form method=\&quot;post\&quot; id=\&quot;auth_form\&quot;&gt;\n        &lt;input type=\&quot;hidden\&quot; name=\&quot;type\&quot; value=\&quot;login\&quot;&gt;\n        &lt;input type=\&quot;text\&quot; name=\&quot;login\&quot; placeholder=\&quot;Ваш логин\&quot; required&gt;&lt;br&gt;\n        &lt;input type=\&quot;password\&quot; name=\&quot;password\&quot; placeholder=\&quot;Ваш пароль\&quot; required&gt;&lt;br&gt;\n        &lt;input type=\&quot;submit\&quot; value=\&quot;Войти\&quot;&gt;\n    &lt;/form&gt;&quot;;
        }
    }
&lt;/script&gt;

</html>

Приходит если ввести неправильный пароль:

<pre>REQUEST_METHOD: POST
GET: array (
  'page' => 'auth',
)
POST: array (
  'type' => 'login',
  'login' => 'test',
  'password' => 't',
)
COOKIE: array (
)</pre><html lang="ru">
&lt;head&gt;
    &lt;meta charset=&quot;utf-8&quot;&gt;
    &lt;title&gt;Мессенджер для Неки́тки&lt;/title&gt;
    &lt;style type=&quot;text/css&quot; media=&quot;handheld, print&quot;&gt;
        @media (orientation: landscape) {

        }
        @media (orientation: portrait) {

        }
    &lt;/style&gt;
    &lt;style type=&quot;text/css&quot; media=&quot;screen, tv&quot;&gt;

    &lt;/style&gt;
&lt;/head&gt;
&lt;div&gt;Неправильный пароль!&lt;/div&gt;
&lt;form method=&quot;post&quot; id=&quot;auth_form&quot;&gt;
    &lt;input type=&quot;hidden&quot; name=&quot;type&quot; value=&quot;login&quot;&gt;
    &lt;input type=&quot;text&quot; name=&quot;login&quot; placeholder=&quot;Ваш логин&quot; required&gt;&lt;br&gt;
    &lt;input type=&quot;password&quot; name=&quot;password&quot; placeholder=&quot;Ваш пароль&quot; required&gt;&lt;br&gt;
    &lt;input type=&quot;submit&quot; value=&quot;Войти&quot;&gt;
&lt;/form&gt;
&lt;br&gt;&lt;/br&gt;
&lt;div id=&quot;set_type_login&quot; onclick=&quot;setFormType('login')&quot; style=&quot;display: none;&quot;&gt;Войти в аккаунт&lt;/div&gt;
&lt;div id=&quot;set_type_register&quot; onclick=&quot;setFormType('register')&quot;&gt;Создать аккаунт&lt;/div&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
    function setFormType(type) {
        if (type == &quot;register&quot;) {
            document.getElementById(&quot;set_type_login&quot;).style.display = &quot;block&quot;;
            document.getElementById(&quot;set_type_register&quot;).style.display = &quot;none&quot;;
            document.getElementById(&quot;auth_form&quot;).innerHTML = &quot;&lt;form method=\&quot;post\&quot; id=\&quot;auth_form\&quot;&gt;\n        &lt;input type=\&quot;hidden\&quot; name=\&quot;type\&quot; value=\&quot;register\&quot;&gt;\n        &lt;input type=\&quot;text\&quot; name=\&quot;name\&quot; placeholder=\&quot;Придумайте имя\&quot; required&gt;&lt;br&gt;\n        &lt;input type=\&quot;text\&quot; name=\&quot;login\&quot; placeholder=\&quot;Придумайте логин (не обязательно)\&quot;&gt;&lt;br&gt;\n        &lt;input type=\&quot;text\&quot; name=\&quot;password\&quot; placeholder=\&quot;Придумайте пароль\&quot; required&gt;&lt;br&gt;\n        &lt;input type=\&quot;submit\&quot; value=\&quot;Создать\&quot;&gt;\n    &lt;/form&gt;&quot;;
        } else if (type == &quot;login&quot;) {
            document.getElementById(&quot;set_type_login&quot;).style.display = &quot;none&quot;;
            document.getElementById(&quot;set_type_register&quot;).style.display = &quot;block&quot;;
            document.getElementById(&quot;auth_form&quot;).innerHTML = &quot;&lt;form method=\&quot;post\&quot; id=\&quot;auth_form\&quot;&gt;\n        &lt;input type=\&quot;hidden\&quot; name=\&quot;type\&quot; value=\&quot;login\&quot;&gt;\n        &lt;input type=\&quot;text\&quot; name=\&quot;login\&quot; placeholder=\&quot;Ваш логин\&quot; required&gt;&lt;br&gt;\n        &lt;input type=\&quot;password\&quot; name=\&quot;password\&quot; placeholder=\&quot;Ваш пароль\&quot; required&gt;&lt;br&gt;\n        &lt;input type=\&quot;submit\&quot; value=\&quot;Войти\&quot;&gt;\n    &lt;/form&gt;&quot;;
        }
    }
&lt;/script&gt;

</html>

P.s.Пробовал запускать и на локалке, и на сервере, даже просил протестить друга, но это ничего не дало.
P.s.s.Хочу заранее сказать, код идущий до if ни коим образом не трогает переменную $_POST.
P.s.s.s.Не предлагайте мне средства отладки/отлова ошибок в PHP, посмотрите код и поймите что в нём их нет (а если всё таки есть, то сообщите об этом).
P.s.s.s.s.Спустя несколько часов махинаций, я понял что при отправке именно ПРАВИЛЬНОГО логина и ПРАВИЛЬНОГО пароля, post почему-то превращается в get (но с неправильным логином/паролем и при регистрации всё нормально работает)...

  • @АлексейШиманский нет, не дубликат. У меня нет ошибок ни в консоли, ни в PHP коде, также я специально добавил в начало кода echo var_export, чтобы вы увидели что на сервер просто ничего не приходит (но только при вводе правильных данных). – HardlinePeak Nov 13 '22 at 08:12
  • "У меня нет ошибок ни в консоли" --- в какой ещё такой консоли? У PHP нет консоли............. "У меня нет ошибок в PHP коде," ......"ничего не приходит (но только при вводе правильных данных)" --- ошибки бывают не только синтаксическими, но логиескими. что в данном случае мы и наблюдаем, т.к. происходит не то, что ожидалось.... для этого минимум существует отладка, что и описано в дубликате.....также наверняка ошибки не отображены просто потому, что они и не включены вовсе....что тоже написано в дубликате.......... а если проблема в js - то и вовсе не по теме php и надо дебажить JS – Алексей Шиманский Nov 13 '22 at 08:16
  • https://ru.stackoverflow.com/q/701137/191482 - дебаг js, на всякий случай – Алексей Шиманский Nov 13 '22 at 08:17
  • Извиняюсь, имел ввиду логи Apache – HardlinePeak Nov 13 '22 at 08:19
  • @АлексейШиманский Отладка дала только понимание того что волшебным образом при вводе ПРАВИЛЬНЫХ данных, приходит пустая форма (при НЕПРАВИЛЬНЫХ всё отлично), ошибка не может быть не включена, потому что до этого кода идёт только комментарии и чтение файла, а js используется только для показа/скрытия двух кнопочек и изменения HTML кода формы (и при тестировании не используется). – HardlinePeak Nov 13 '22 at 08:22
  • @АлексейШиманский уточню, именно ПРИХОДИТ (то есть правильные логин и пароль от аккаунта который существует) на сервер пустая форма при вводе ПРАВИЛЬНЫХ данных (у неё не удаляются значения (я это понял потому что сразу после "<?php" идёт "echo var_export") и она отправляется (я пробовал заменить метод post на get и все ключи и значения были)), а при отправке НЕПРАВИЛЬНЫХ (опять повторю) всё нормально. Волшебство, да и только... – HardlinePeak Nov 13 '22 at 08:44

0 Answers0