← Вернуться к списку тем

Бот опросник

Добрый день, я решил добавить пароль в бота опросника и изменил файл админ.пхп вот так-

<?php

$pw = "123"; // password

if(!isset($_POST['password']))
{
        ?>
  <form method="POST" action="">
  <center><b>Введите пароль</b></center><br>
  <center><input type="password" name="password" size="20"></center><br>
  <center><input type="submit" value="Войти" name="B1"></center>
</form>
<?php
}
else
{
        if($_POST['password'] == $pw)
        {

session_start();

ini_set('error_reporting', E_ALL & ~E_NOTICE);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);

ini_set('log_errors', 'On');
ini_set('error_log', './logs/php_errors.log');

header("HTTP/1.1 200 OK");
header('Content-type: text/html; charset=utf-8');

include "Services/Autoloader.php";
spl_autoload_register([new Autoloader(), 'getClass']);
new AdminController();


        }
        else
        {
                echo "<center><b>Пароль неверный!</b></center>";
        }
}
?> 

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

Ответы


  • iMakeBots [14.04.2020 в 13:49 → Грачик Абдулошвили]
    Обратите внимание на то что любое открытие страницы, любой переход по ссылке (по умолчанию) - это GET запрос.
    У вас идет проверка на POST запрос

    Когда вы отправляете форму с методом method="POST" - то идет POST запрос.

    Но не это главное.

    После получения данных из формы для авторизации и их проверки, в случае успеха вам надо ставить метку SESSION или COOKIES - на ваше усмотрение.

    И при переходе на страницу проверяйте не POST запрос а наличие этой метки.
  • Грачик Абдулошвили [14.04.2020 в 13:58 → iMakeBots]
    поменял на ГЕТ так как теперь ПАРОЛЬ прям в строке браузера отображается- http://prntscr.com/rz15b8
  • iMakeBots [14.04.2020 в 14:00 → Грачик Абдулошвили]
    В этом и есть отличие GET запроса от других видов запроса.

    Вам не надо менять на GET - оставьте POST - проверять надо другое.
  • Грачик Абдулошвили [14.04.2020 в 14:01 → iMakeBots]
    метку session я поставил- http://prntscr.com/rz16de
    вопрос где ее ставить на этих страницах- http://prntscr.com/rz17qt
  • iMakeBots [14.04.2020 в 14:16 → Грачик Абдулошвили]
    Файл admin.php

    <?
    session_start();
    ini_set('error_reporting', E_ALL & ~E_NOTICE);
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    
    ini_set('log_errors', 'On');
    ini_set('error_log', './logs/php_errors.log');
    
    header("HTTP/1.1 200 OK");
    header('Content-type: text/html; charset=utf-8');
    
    if($_POST) {
        // обрабатываем форму
        // ставим метку 
        $_SESSION['access'] = "метка";
    } else {
        if($_SESSION['access'] != "метка") {
            // выводим форму для авторизации
            echo "<form method='POST'>...</form>";
        } else {
            // разрешаем работать с админкой
            include "Services/Autoloader.php";
            spl_autoload_register([new Autoloader(), 'getClass']);
            new AdminController();
        }
    }
    
  • Грачик Абдулошвили [14.04.2020 в 14:33 → iMakeBots]
    <?php
    
    $pw = "123"; // password
    
    if(!isset($_POST['password']))
    {
            ?>
    
    <?
    }
    else
    {
            if($_POST['password'] == $pw)
            {
    session_start();
    ini_set('error_reporting', E_ALL & ~E_NOTICE);
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    
    ini_set('log_errors', 'On');
    ini_set('error_log', './logs/php_errors.log');
    
    header("HTTP/1.1 200 OK");
    header('Content-type: text/html; charset=utf-8');
    
    if($_POST) {
        // обрабатываем форму
        // ставим метку 
        $_SESSION['access'] = "метка"
    } else {
        if($_SESSION['access'] != "метка") {
            // выводим форму для авторизации
             <form method="POST" action="">
      <center><b>Введите пароль</b></center>
    <center><input type="password" name="password" size="20"></center>
    <center><input type="submit" value="Войти" name="B1"></center> </form> } else { // разрешаем работать с админкой include "Services/Autoloader.php"; spl_autoload_register([new Autoloader(), 'getClass']); new AdminController(); } } else { echo "
    Пароль неверный!
    "; } } ?>

    http://prntscr.com/rz1xkr
  • iMakeBots [14.04.2020 в 14:42 → Грачик Абдулошвили]
    Вы намешали проверок идентичных и вложенных друг в друга.

    Я вам выше привел пример простой логики, используйте ее.
  • Грачик Абдулошвили [14.04.2020 в 14:44 → iMakeBots]
    в вашем примере никакого пароля нету.
  • iMakeBots [14.04.2020 в 14:47 → iMakeBots]
    В блоке //обрабатываем форму делайте проверку на передачу пароля if(isset($_POST['password'])), а в блоке // выводим форму для авторизации выведите форму
  • Грачик Абдулошвили [14.04.2020 в 14:58 → iMakeBots]
    Ругается на эту строку- http://prntscr.com/rz2iis
  • iMakeBots [14.04.2020 в 15:01 → iMakeBots]
    Точку с запятой поставьте - $_SESSION['access'] = "метка";
  • Грачик Абдулошвили [14.04.2020 в 15:26 → iMakeBots]
    http://prntscr.com/rz35lh
    http://prntscr.com/rz36ce
  • iMakeBots [14.04.2020 в 15:30 → iMakeBots]
    Ругается на вложенные кавычки или экранируйте или замените
  • Грачик Абдулошвили [14.04.2020 в 17:58 → iMakeBots]
    кавычки экранировал, форма ввода пароля появилась но внезависимости от того верный или неверный введен пароль после нажатия ВОЙТИ появляется просто белый экран.
    Введите пароль


    "; } else { // разрешаем работать с админкой include "Services/Autoloader.php"; spl_autoload_register([new Autoloader(), 'getClass']); new AdminController(); } }
  • Грачик Абдулошвили [15.04.2020 в 13:13 → Грачик Абдулошвили]
    В общем по итогу сделал так-
    session_start();
    ini_set('error_reporting', E_ALL & ~E_NOTICE);
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);

    ini_set('log_errors', 'On');
    ini_set('error_log', './logs/php_errors.log');

    header("HTTP/1.1 200 OK");
    header('Content-type: text/html; charset=utf-8');

    if($_POST) {
    $pw = "123"; // password

    if(!isset($_POST['password']))
    // ставим метку
    $_SESSION['access'] = "метка";
    } else {
    if($_SESSION['access'] != "метка") {
    echо "Введите пароль



    ";
    } else {
    // разрешаем работать с админкой
    include "Services/Autoloader.php";
    spl_autoload_register([new Autoloader(), 'getClass']);
    new AdminController();
    }
    }

    ошибок никаких РНР не выыдает, форма ввода пароля появилась но внезависимости от того верный или неверный введен пароль после нажатия ВОЙТИ появляется просто белый экран.... так как непонятно куда засунуть теперь if($_POST['password'] == $pw)
  • iMakeBots [15.04.2020 в 15:07 → Грачик Абдулошвили]
    <?
    session_start();
    
    ini_set('error_reporting', E_ALL & ~E_NOTICE);
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    
    ini_set('log_errors', 'On');
    ini_set('error_log', './logs/php_errors.log');
    
    header("HTTP/1.1 200 OK");
    header('Content-type: text/html; charset=utf-8')ж
    
    include "Services/Autoloader.php";
    spl_autoload_register([new Autoloader(), 'getClass']);
    
    $password = "123"; // password
    
    // проверяем на пост данные
    if($_POST) {
        // если в пост данных есть поле password
        if(isset($_POST['password']))
            // проверяем валидность пароля
            if($_POST['password'] == $password) {
                // ставим метку
                $_SESSION['access'] = "метка";
            }
            // в любом случае перезагружаем страницу
            header("Refresh:0");
    } else {
        // Если это не пост запрос то проверяем есть ли метка в сессии
        if($_SESSION['access'] != "метка") {
            // если метки нет то выводим форму
            echo "<form method='post'><input type='password' name='password'> <button type='submit'>Login</button></form>";
        } else {
            // если метка есть разрешаем работать с админкой
            new AdminController();
        }
    }
  • Грачик Абдулошвили [15.04.2020 в 15:53 → iMakeBots]
    увы но не срабатывает совсем этот вариант, даже не загружает страницу... http://prntscr.com/rztkqm
  • iMakeBots [15.04.2020 в 15:57 → iMakeBots]
    У меня работает предложенный мной код.
    Посмотрите логи php_errors.log в директории logs
  • Грачик Абдулошвили [15.04.2020 в 17:30 → iMakeBots]
    ошибок нет там от сегодняшнего дня.

    а кроме admin.php что то еще нужно менять в других файлах?
  • iMakeBots [15.04.2020 в 17:31 → iMakeBots]
    У вас форма выводиться?
  • Грачик Абдулошвили [15.04.2020 в 17:48 → iMakeBots]
    ничего не выводится белый экран и ошибка при попытке загрузить страницу.
  • iMakeBots [15.04.2020 в 18:02 → iMakeBots]
    Исходный код страницы посмотрите - когда белый экран.
  • Грачик Абдулошвили [15.04.2020 в 20:13 → iMakeBots]
    Все работает) оказывается на хостинге какие то были неполадки ИМЕННО в момент когд я настраивал....

    НО не работает сам бот теперь))
    вот такие ошибки в ЛОГАХ
    http://prntscr.com/rzzkrx
    [15-Apr-2020 20:09:41 Europe/Moscow] PHP Fatal error: Call to undefined function WebHook::start() in /var/www/user71548/data/www/ХХХ.site/opros/Services/Route.php on line 92
    http://prntscr.com/rzzmxr
  • Грачик Абдулошвили [15.04.2020 в 20:58 → iMakeBots]
    ДОБАВИТЬ я тоже из админки не могу никакой анкеты. ввожу названеи жмву добавить а странциа прсото обновляется.
  • iMakeBots [15.04.2020 в 22:30 → iMakeBots]
    <?
    session_start();
    
    ini_set('error_reporting', E_ALL & ~E_NOTICE);
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    
    ini_set('log_errors', 'On');
    ini_set('error_log', './logs/php_errors.log');
    
    header("HTTP/1.1 200 OK");
    header('Content-type: text/html; charset=utf-8')ж
    
    include "Services/Autoloader.php";
    spl_autoload_register([new Autoloader(), 'getClass']);
    
    $password = "123"; // password
    
    // проверяем есть ли метка в сессии
    if($_SESSION['access'] != "метка") {
        // если метки нет и это пост запрос
        if($_POST) {
            // если в пост данных есть поле password
            if(isset($_POST['password']))
                // проверяем валидность пароля
                if($_POST['password'] == $password) {
                    // ставим метку
                    $_SESSION['access'] = "метка";
                }
            // в любом случае перезагружаем страницу
            header("Refresh:0");
        } else {
            // если метки нет и не пост то выводим форму
            echo "<form method='post'><input type='password' name='password'> <button type='submit'>Login</button></form>";
        }
    } else {
        // если метка есть разрешаем работать с админкой
        new AdminController();
    }
  • iMakeBots [15.04.2020 в 22:32 → iMakeBots]
    По работе бота:
    Логи говорят что не может найти метод WebHook::start()

    Проверьте наличие всех файлов на хостинге из архива
  • Грачик Абдулошвили [15.04.2020 в 22:51 → Грачик Абдулошвили]
    файлы заменил- бот молчит. на команду старт не отвечат анкеты не запускает НО факт активности юзера в админке фиксирует- http://prntscr.com/s02hjb
  • iMakeBots [15.04.2020 в 22:56 → Грачик Абдулошвили]
    Если была бы ошибка в настройке webhook то errors были бы другие.
    А так он доходит до Router - значит все работает просто не может найти метод - первое что в голову пришло - отсутсвие файла
  • Грачик Абдулошвили [15.04.2020 в 22:57 → Грачик Абдулошвили]
    и вот что в ошибках светится- http://prntscr.com/s02luh
  • iMakeBots [15.04.2020 в 23:11 → Грачик Абдулошвили]
    Файл index.php для бота у вас судя по предыдущим логам лежит /opros, а в этих логах идет обращение к /index.php, которого он не может найти.
    К боту эта ошибка не относиться