geometria
@geometria

Как настроить авторизацию в MVC PHP?

В этом коде у меня отображается переменная из инпута, а не из БД после проверки логина и пароля. А хотелось бы именно чтоб работала проверка, как и предполагает логика авторизации.
Подскажите как настроить правильно авторизацию?

routes.php
//в этой части кода прописана реакция на клик по кнопке с именем add
switch($action) {
        case 'index':
        if (isset($_POST['add'])) {
          $name = $_POST['name'];
          $password = $_POST['password'];
          $login = new Auth($name, $password);
          $insertId = $login->login($name, $password);
          //отображает имя из формы а не из БД
          echo $login->name;
          }
        break;


views/auth.php
<form name="frmAdd" method="post" action="" id="frmAdd"
    onSubmit="return validate();">
<div id="mail-status">

<div>
    <label style="padding-top: 20px;">Name</label> <span
        id="name-info" class="info"></span><br />
        <input type="text"
        name="name" id="name" class="demoInputBox">
</div>
<div>
    <label>Password</label> <span id="password" class="info"></span><br />
    <input type="password" name="password" id="password" class="demoInputBox">
</div>
<div>
    <input type="submit" name="add" id="btnSubmit" value="Login" />
</div>
</div>

</body>
</html>


controllers/authController.php
<?php
  class AuthController {
    public function index() {
        require_once('views/auth.php');
    }
}


models/Auth.php
<?php
  class Auth {
    public $name;
    public $password;

public function __construct($name, $password) {
      $this->name          = $name;
      $this->password   = $password;
    }

    public static function login($name, $password) {
      $db = Db::getInstance();
      $name = intval($name);
      $password = intval($password);
      $req = $db->prepare('SELECT * FROM users WHERE name = :name AND password = :password');
      $req->execute(array('name' => $name, 'password' => $password));
      $login = $req->fetch();

      return new Auth($login['name'], $login['password']);
    }


}
  • Вопрос задан
  • 494 просмотра
Решения вопроса 1
@asmodeusta
PHP Developer (Laravel, Wordpress)
Давайте пройдемся по коду:
1. Нужно исправить метод login в классе Auth
public static function login($name, $password) {
      $db = Db::getInstance();
      $name = intval($name);
      $password = intval($password);
      $req = $db->prepare('SELECT * FROM users WHERE name = :name AND password = :password');
      $req->execute(array('name' => $name, 'password' => $password));
      $login = $req->fetch();

      //return new Auth($login['name'], $login['password']); - Зачем здесь возвращать новый инстанс этого же класса?
      return $login; // - возможно вам это нужно
    }

2. В контроллере нужно выводить полученные данные
$loginData = $login->login($name, $password);
 //отображает имя из формы а не из БД
echo $loginData->name;


Это только то что можно исправить чтобы заработало, но в остальном весь код нужно переделать:
Это уберите немедленно -
$name = intval($name);
$password = intval($password);

Это тоже не нужно
<?php
  class AuthController {
    public function index() {
        require_once('views/auth.php');
    }
}

Вместо этого используйте автозагрузку (в идеале composer)
Переделайте модель авторизации, не используйте публичные свойства, вместо них private & getters
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Причина в том, что этот код - полная бессмыслица.
Если просто случайным образом писать операторы РНР, и то получится лучше.

Надо на пару лет забыть про красивые слова OOP и MVC, и поучиться просто писать код, который делает то, что требуется.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
23 апр. 2024, в 15:45
10000 руб./за проект
23 апр. 2024, в 15:42
5000 руб./за проект
23 апр. 2024, в 15:34
10000 руб./за проект