Здравствуйте! Есть проблема с классом SafeMySQL

86
15 апреля 2021, 20:10

Создал класс для Логина на сайте, но остановился так как появилась ошибка

Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, null given in D:\openserver\OSPanel\domains\localhost\safemysql.php on line 560

Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, null given in D:\openserver\OSPanel\domains\localhost\safemysql.php on line 560

Warning: mysqli_query() expects parameter 1 to be mysqli, null given in D:\openserver\OSPanel\domains\localhost\safemysql.php on line 466

Мой код -

<?php 
require_once "../../safemysql.php"; 
class Login extends SafeMySql { 
    private $username; 
    private $password; 
    function __construct() { 
        $this->username=$_POST['username']; 
        $this->password=$_POST['password']; 
    } 
    public function check(){ 
    if($this->username=="" || $this->password==""){ 
echo "Password or Username is empty."; 
exit(); 
    }else { 
        $this->getAll("SELECT * FROM users WHERE username=?s AND password=?s",$this->username,$this->password); 
    } 
} 
} 
if(isset($_POST['reg'])){ 
    header('Location: ../register.php'); 
}else{ 
    $login = new Login(); 
    $login->check();  
} 
?>

Сам класс - https://github.com/colshrapnel/safemysql/blob/master/safemysql.class.php

Вопрос - С чей стороны ошибка? С моей или со стороны класса?

Answer 1

Вы в своем классе переопределяете конструктор родителя, в котором устанавливается соединение с БД. Поэтому соединение в Вашем классе не определено Стоит сделать

  • либо передавать в свой конструктор соединения или параметры соединения (как это сделано в SafeMySql) и вызывать в своем конструкторе родительский конструктор (это решение получше)
  • либо переопределить в своем классе свойство $defaults, прописав в него параметры соединения с базой (этот вариант похуже)

PS. логин и пароль тоже лучше передавать в конструктор и перед этим "очищать" от sql инъекций

READ ALSO
PreparedStatement ошибка в setString()

PreparedStatement ошибка в setString()

Пытаюсь вытащить из бд значенияИспользую PreparedStatement для подготовки sql-запроса

104
Как сохранить значение переменной

Как сохранить значение переменной

Как сохранить значение переменной типа boolean? Использую javaМожет как то можно через SharedPreferences?

121
Добавление и удаление классов в js

Добавление и удаление классов в js

Как добавить класс блоку и через некоторое время удалить его?

121
Работы с input - ами через js

Работы с input - ами через js

Всем приветВот познаю js и в результате работы сталкнулся со следующий проблемой

117