0

Переписываю процедурный код в ООП. Столкнулся с проблемой очень странной... ООП код должен работать, но нет.. не работает. Прошу вашей помощи в сравнении. Может я где то что то не так написал? Вот оба кода - процедурный:

if(isset($_POST["loginUserEmail"])){ // Данные из поля 
    $email = mysqli_real_escape_string($connection, $_POST["loginUserEmail"]);
    $password = mysqli_real_escape_string($connection, $_POST["loginPassword"]);
    if($email != "" && $password != ""){
        //Check are entered username and password matched
        $sql = "SELECT * FROM accounts WHERE email = '$email' AND password = '$password'";
        if(mysqli_num_rows(mysqli_query($connection, $sql)) > 0){
            echo 1;
        }else{
            echo 0;
        }
    }else{
        echo "Оба поля обязательны.";
    }
}else{
    echo "Успешное соединение";
}

А это ООП который я написал:

if(isset($_POST["loginUserEmail"])) {
$email = $_POST["loginUserEmail"];
$password = $_POST["loginPassword"];

if($email != "" && $password != "") {
    $accounts = $db->query('SELECT * FROM accounts WHERE email = ? AND password = ?', $email, $password);
    $accounts->numRows(); // Подсчитываем кол-во строк.

    if ($accounts->numRows() > 0) { // Больше 0 сообщаем 1, пускаем в игру
        echo 1;
    }else{
        echo 0;
    }
}else{ echo "Оба поля обязательны.";}

}else { echo "Успешное соединение"; }

Что не так с моим кодом? Помогите пожалуйста. Может я в синтаксисе ошибся?

  • Настаиваю на том, чтобы вы смотрели на все ответы в теме про нахождения ошибок – Алексей Шиманский Nov 08 '21 at 16:27
  • Также в mysqli нет numRows, И уж точно не надо его два раза вызывать. Отсюда вывод: это НЕ 2 одинаковых кода – Алексей Шиманский Nov 08 '21 at 16:29
  • Тут дебагинг PHP не поможет. Через сайт скрипт ошибок не выдаёт. Я пробовал играться со строчкой if ($accounts->numRows() > 0), по разному. Загонял в переменную результат if ($var > 0) и т д п. Распечатывал результат выполнения функции $accounts = $db->query('SE... Она работает и через сайт присылает значение 0 это проверено. 1 прислать не сможет так как форма находится в юнити2д, данные поступать должны оттуда. И вот тут самое интересное... в процедурном коде они поступают, в ООП движок пишет в консоли NULL. – Василий Nov 09 '21 at 00:34
  • Именно поэтому я и спрашиваю профи в PHP что бы сравнили код и ткнули носом где я облажался, потому что у меня просто идей уже не осталось... код должен работать, а всё равно присылает NULL. – Василий Nov 09 '21 at 00:34
  • Эээ... Простите а где тут ООП? Вот если бы Вы создали модель формы авторизации, объявили бы там два поля email и password, реализовали бы метод load() в котором из $_POST заносили бы значения полей, реализовали бы метод checkUserAccount в котором бы проверяли в БД наличие такого аккаунта... И вызывали бы уже только методы этой модели - я бы согласился на ООП. А так я вижу практически идентичный хаотично написанный код. Уж простите за вольность мыслей. Попробуйте все же почитать что такое ООП и как им пользоваться. –  Nov 09 '21 at 02:54
  • у меня ещё не настолько много знаний к сожалению, что бы реализовать то что вы написали. Я пока только вот так могу, и то с какой то ошибкой, которую не могу идентифицировать. ООП тут скорее стиль, чем суть =) Классы и методы я пока писать не научился, тем более такие сложные как регистрация-авторизация. Пишу как умею. Надеюсь тут мне помогут сравнить код и выявить несоответствия. – Василий Nov 09 '21 at 05:05
  • "дебагинг PHP не поможет" --- а вы пробовали? Нет вы не пробовали. И не прочитали. ................. "скрипт ошибок не выдаёт" --- а вы настроили вывод ошибок? Нет не настроили. Почему? А потому что numRows в mysqli нет. А значит ошибка обеспечена..................... так что не надо придумывать что поможет, а что нет - прочитайте все способы нахождения ошибок для начала и попробуйте...........................и ещё раз скажу про numRows --- прочитайте документацию.Нет такого метода в таком виде...................."в ООП движок пишет в консоли NULL" --- включить отображение ошибок + отладка! – Алексей Шиманский Nov 09 '21 at 05:47
  • "а вы пробовали?" - Да пробовал. POST приходит из формы которая в движке юнити. И он не доходит. "а вы настроили вывод ошибок?" - Нет не настраивал, я проверок навтыкал что бы понять какой пункт не работает. Может быть метод и деревянный, но сработал. То что из формы приходит NULL я узнал по крайней мере. "А потому что numRows в mysqli нет" Хм... серьёзно? Вот часть кода из РАБОЧЕГО класса Database, через который я к БД коннекчусь. public function __construct($dbhost, $dbuser, $dbpass, $dbname, $charset = 'utf8') { $this->connection = new mysqli($dbhost, $dbuser, $dbpass, $dbname); – Василий Nov 09 '21 at 05:54
  • "в ООП движок пишет в консоли NULL" --- включить отображение ошибок + отладка!" NULL приходит не в консоли php. А в консоли движка Unity2D. Из формы в движке, по дороге к бэкэнду php, теряется POST. При чём процедурный код работает с теми же запросами, и теми же ответами как из скрипта C# юнити, так и с бэкэнда php. – Василий Nov 09 '21 at 05:56
  • ""А потому что numRows в mysqli нет" Хм... серьёзно?" ----- вы бы в доки посмотрели, вместо того, чтобы удивляться................." Вот часть кода из РАБОЧЕГО класса Database," --- как он связан с numRows ? Подсказка: Никак ............"То что из формы приходит NULL я узнал по крайней мере" --- тогда чего вы ожидаете от кода, если приходит NULL? ..................""а вы пробовали?" - Да пробовал" --- Нет не пробовали, потому что пользовались своим "деревянным способом".............." "а вы настроили вывод ошибок?" - Нет не настраивал" --- тогда удачи вам ещё десяток дней разбираться)) – Алексей Шиманский Nov 09 '21 at 13:42
  • Я конечно разберусь, через десяток дней или позже, но разберусь... А вот вы ошиблись видимо топиком. Я просил помощи а не критики. И хватит писать идиотию... "А потому что numRows в mysqli нет" Решистрация с этим же методом работает, и представьте себе с numRows. public function numRows() { $this->query->store_result(); return $this->query->num_rows; } Я даже метод вам покажу с которым она работает, а запрос query как это по вашему не странно... mysqli. Надо же... какая неожиданность. Ну и можете пойти уже... Я нашёл ответы на пхп.су благо там настоящие программисты есть. – Василий Nov 09 '21 at 18:22
  • Что и требовалось доказать: numRows в mysqli нет, а есть num_rows. что и описано внутри функции numRows, которая относится к реализации логики в классе DB. А сама она имеет отношение к mysqli ровно такое же, как балерина к стройке. Удачи в познавании. – Алексей Шиманский Nov 11 '21 at 08:26
  • Функция подсчёта строк в MySqli есть. И не надо тут затирать. Я сразу писал что эта функция есть. Вы же писали что её нет. Теперь понятен ваш уровень "познания". – Василий Nov 11 '21 at 11:00
  • Вася, я тебе написал про конкретную numRows (её НЕТ) а не num_rows (а вот ОНА есть). Умей правильно ЧИТАТЬ, то что другие пишут. – Алексей Шиманский Nov 11 '21 at 17:34

0 Answers0