Diskuze: PHP Fatal error: Call to a member function queryOne() on null
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 3 zpráv z 3.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Nebylo by od věci vidět i soubor User.php, který (očividně) volá funkci queryOne.
Zdá se, že proměnnou, která obsahuje instanci třídy "User" (jestli je to vůbec třída, neukázal si celý soubor) je neinicializovaná (je rovna výrazu null).
Zkus na proměnnou, kde se instance nachází, použít funkci var_dump, abys
věděl, co to za proměnnou je.
Jestli je to null, tak si ji asi zapomněl někde inicializovat.
Jinak, doporučuji použít pro příště autoloader (více zde: http://www.itnetwork.cz/php/mvc ).
Mas pravdu, pri var_dump($db) je tam NULL, ale nerozumiem preco tomu tak je, ked by sa mala inicializovat vdaka konstruktoru...
class User extends General
{
/**
* Zaregistruje uživateľa do systému
*
* @param $email string E-mail
* @param $fname string Vlastné jméno
* @param $lname string Priezvisko
* @param $pass string Heslo
*
* @return bool Úspěšne zaregistrovaný?
*
* @throws Exception Nevyplnené pole
* @throws Exception Nesúhlas s podmienkami
* @throws Exception Chybný E-mail
* @throws Exception Slabé heslo
* @throws Exception Obsadený E-mail
* @throws Exception Chyba databázy
*/
public function register($email, $fname, $lname, $pass, $accept_terms)
{
// Nejaké pole nie je vyplnené
if(!isset($email) || !isset($fname) || !isset($lname) || !isset($pass))
throw new Exception('Niektoré pole nie je vyplnené.');
// Uživateľ nesúhlasil s podmienkami
if(!isset($accept_terms))
throw new Exception('Musíte súhlasiť s podmienkami registrácie');
// Je chybne zadaný E-mail
if(!$this->isEmail($email))
throw new Exception('Bol zadaný chybný E-mail.');
// Nie je dostatečne silné heslo (nesplňuje podmienky)
if(!$this->checkPasswordInput($pass))
throw new Exception('Zadané heslo nie je dostatočne silné.');
// Je obsadený E-mail
if(!$this->isEmailAvailable($email))
throw new Exception('Zadaný E-mail už niekdo používa.');
// Šifrované heslo
$hash_pass = password_hash($pass, PASSWORD_DEFAULT);
$registered = $this->db->query('
INSERT INTO `users` (`email`, `first_name`, `last_name`, `password`, `token`)
VALUES (?, ?, ?, ?, ?)
', $email, $fname, $lname, $hash_pass, $this->generateRandomBase64String());
// Nefunkčná databáza
if(!$registered)
throw new Exception('Nastala chyba pri komunikácií s databázou');
return true;
}
a toto je funkcia queryOne
public function queryOne($query) {
$statement = $this->executeStatement(func_get_args());
return $statement->fetch(PDO::FETCH_ASSOC);
}
Zobrazeno 3 zpráv z 3.