@maxontos7

Как увидеть элемент класса в функции php?

Пытаюсь подключиться к базе постоянным конструктором
$mysqli = new mysqli($host, $user, $pass, $db);
    $mysqli->query("SET NAMES UTF8");

После чего использую готовый $mysqli вне функций, процедурным методом - всё работает.
Как только пытаюсь использовать в функции
function enter(){
    $error = array(); 
    if($_POST['login'] != '' && $_POST['pass'] != ''){
        $login = strip_tags($_POST["login"]);
        $pass = strip_tags($_POST["pass"]);
        
        $user = $mysqli->query("SELECT * FROM `users` WHERE `login` = '$login' LIMIT 1");
        
        if($user){
            if($pass == $user->pass){
                setcookie('login',$user->login, time() + 50000);
                setcookie('pass',$user->pass, time() + 50000);
                $_SESSION['id'] = $user->id;
                $id = $_SESSION['id'];
                lastAct($id);
                return $error;
            }
            else {
                $error[] = 'Пароль не подходит';
                return $error;
            }
        }
        else {
            $error[] = 'Пользователь не найден';
            return $error;
        }
    }
    else {
        $error[] = 'Поля должны быть заполнены';
        return $error;
    }
}

Вообще файлы, в которых это записано подключаются методом require в index.php, тысячу раз перепроверил видят ли эти файлы друг друга - да, видят. Однако если поставить подключение к базе непосредственно перед функции - ситуация та же.
Notice: Undefined variable: mysqli in C:\xampp\htdocs\localhost\public_html\templates\user\auth.php on line 68

Fatal error: Uncaught Error: Call to a member function query() on null in C:\xampp\htdocs\localhost\public_html\templates\user\auth.php:68 Stack trace: #0 C:\xampp\htdocs\localhost\public_html\index.php(23): enter() #1 {main} thrown in C:\xampp\htdocs\localhost\public_html\templates\user\auth.php on line 68

68 строчка того самого файла
$user = $mysqli->query("SELECT * FROM `users` WHERE `login` = '$login' LIMIT 1");

Ругается на $mysqli

Памагити

Спасибо
  • Вопрос задан
  • 79 просмотров
Пригласить эксперта
Ответы на вопрос 2
FanatPHP
@FanatPHP
Чебуратор тега РНР
В РНР нет никаких "элементов класса". Есть переменные. Которые подчиняются правилам области видимости.

Чтобы использовать переменную $mysqli в функции enter(), ее надо передать в функцию в качестве параметра

Отдельно хочу заметить, что весь этот код не имеет ни малейшего смысла, кто угодно сможет залогиниться без пароля через SQL инъекцию. Как правильно проверять пароль через mysqli
Ответ написан
@Arik
function enter() use ($mysqli) {
}

работать должно, но это плохая практика
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы