Бот опросник

← К списку тем

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

&lt;?php<br />
<br />
$pw = &quot;123&quot;; // password<br />
<br />
if(!isset($_POST['password']))<br />
{<br />
        ?&gt;<br />
  &lt;form method=&quot;POST&quot; action=&quot;&quot;&gt;<br />
  &lt;center&gt;&lt;b&gt;Введите пароль&lt;/b&gt;&lt;/center&gt;&lt;br&gt;<br />
  &lt;center&gt;&lt;input type=&quot;password&quot; name=&quot;password&quot; size=&quot;20&quot;&gt;&lt;/center&gt;&lt;br&gt;<br />
  &lt;center&gt;&lt;input type=&quot;submit&quot; value=&quot;Войти&quot; name=&quot;B1&quot;&gt;&lt;/center&gt;<br />
&lt;/form&gt;<br />
&lt;?php<br />
}<br />
else<br />
{<br />
        if($_POST['password'] == $pw)<br />
        {<br />
<br />
session_start();<br />
<br />
ini_set('error_reporting', E_ALL &amp; ~E_NOTICE);<br />
ini_set('display_errors', 1);<br />
ini_set('display_startup_errors', 1);<br />
<br />
ini_set('log_errors', 'On');<br />
ini_set('error_log', './logs/php_errors.log');<br />
<br />
header(&quot;HTTP/1.1 200 OK&quot;);<br />
header('Content-type: text/html; charset=utf-8');<br />
<br />
include &quot;Services/Autoloader.php&quot;;<br />
spl_autoload_register([new Autoloader(), 'getClass']);<br />
new AdminController();<br />
<br />
<br />
        }<br />
        else<br />
        {<br />
                echo &quot;&lt;center&gt;&lt;b&gt;Пароль неверный!&lt;/b&gt;&lt;/center&gt;&quot;;<br />
        }<br />
}<br />
?&gt; <br />

Теперь пароль есть но нет сессий, то есть я ввожу пароль каждый раз когда переключаюсь на странице админа в настройки, анкеты, пользователи...
Грачик Абдулошвили 14.04.2020 в 13:43

Авторизуйтесь через Telegram, чтобы ответить.
Откройте бот @SiteAuthBot, нажмите кнопку Старт/Start. Следуйте инструкциям бота.


Ответы

  • Обратите внимание на то что любое открытие страницы, любой переход по ссылке (по умолчанию) - это GET запрос.
    У вас идет проверка на POST запрос

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

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

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

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

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

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

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

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

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

              НО не работает сам бот теперь))
              вот такие ошибки в ЛОГАХ
              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:13
            • ДОБАВИТЬ я тоже из админки не могу никакой анкеты. ввожу названеи жмву добавить а странциа прсото обновляется.
              Грачик Абдулошвили 15.04.2020 в 20:58
            • &lt;?<br />
              session_start();<br />
              <br />
              ini_set('error_reporting', E_ALL & ~E_NOTICE);<br />
              ini_set('display_errors', 1);<br />
              ini_set('display_startup_errors', 1);<br />
              <br />
              ini_set('log_errors', 'On');<br />
              ini_set('error_log', './logs/php_errors.log');<br />
              <br />
              header("HTTP/1.1 200 OK");<br />
              header('Content-type: text/html; charset=utf-8')ж<br />
              <br />
              include "Services/Autoloader.php";<br />
              spl_autoload_register([new Autoloader(), 'getClass']);<br />
              <br />
              $password = "123"; // password<br />
              <br />
              // проверяем есть ли метка в сессии<br />
              if($_SESSION['access'] != "метка") {<br />
                  // если метки нет и это пост запрос<br />
                  if($_POST) {<br />
                      // если в пост данных есть поле password<br />
                      if(isset($_POST['password']))<br />
                          // проверяем валидность пароля<br />
                          if($_POST['password'] == $password) {<br />
                              // ставим метку<br />
                              $_SESSION['access'] = "метка";<br />
                          }<br />
                      // в любом случае перезагружаем страницу<br />
                      header("Refresh:0");<br />
                  } else {<br />
                      // если метки нет и не пост то выводим форму<br />
                      echo "&lt;form method='post'>&lt;input type='password' name='password'> &lt;button type='submit'>Login&lt;/button>&lt;/form>";<br />
                  }<br />
              } else {<br />
                  // если метка есть разрешаем работать с админкой<br />
                  new AdminController();<br />
              }
              iMakeBots 15.04.2020 в 22:30
            • По работе бота:
              Логи говорят что не может найти метод WebHook::start()

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