Autor Zpráva
8vm8
Profil
Ahoj,
mám tyto skripty.

soubor: database_functions.php
<?php 
class databaseFunctions extends variables
    {
        public function connectToDatabase()
            {
                $db=new PDO("mysql:host=$this->dbHost;dbname=$this->dbName;", $this->dbUsername, $this->dbPassword);
                $db->exec("set names utf8");
                $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            }
        
    }

?>
soubor: main_functions.php
<?php 
class logInOut extends databaseFunctions  
    {
        public function logIn($username,$password)
            {
                $stmt=$db->query("SELECT * FROM `database`.`tabulka` WHERE `username`='$username' and `password`='$password'");
                $r=$stmt->rowCount();
                if($r==1)
                    {
                        header ('Location: soubor.php');
                    }
                    else 
                        {
                            echo 'Přihlášení se nezdařilo. Zkontrolujte si prosím vložené údaje")';
                        }
            }
    }
?>

Oba tyto soubory jsou načteny v jedné stránce. Nevím, jak mám zavolat funkci connectToDatabase() tak, aby mi proběhlo připojení a promměnná $db správně fungovala ve funkci logIn().
Vždy mi vyskočí hláška:

Notice: Undefined variable: db in C:\server\www\web\main_functions.php on line 6

Fatal error: Call to a member function query() on a non-object in C:\server\www\web\main_functions.php on line 6

Pokud ale napíšu připojení hned do logIn, tak mi skript funguje správně. Já bych to ale chtěl mít uložený v té funkci connectToDatabase(), protože připojování k databázi se bude používat často. Bohužel ale nevím, jak na to.
<?php 
class logInOut extends databaseFunctions  
    {
        public function logIn($username,$password)
            {
                    $db=new PDO("mysql:host=$this->dbHost;dbname=$this->dbName;", $this->dbUsername, $this->dbPassword);
                $db->exec("set names utf8");
                $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                $stmt=$db->query("SELECT * FROM `database`.`tabulka` WHERE `username`='$username' and `password`='$password'");
                $r=$stmt->rowCount();
                if($r==1)
                    {
                        header ('Location: soubor.php');
                    }
                    else 
                        {
                            echo 'Přihlášení se nezdařilo. Zkontrolujte si prosím vložené údaje")';
                        }
            }
    }
?>

Mohl byste mi někdo říct, jak mám ty funkce volat? Vím, že se to dělá pomocí parent:: nebo self:: ale ani jedno mi nefungovalo a psalo to pořád ten samej error,
tiso
Profil
Takto ti to bude fungovať:

<?php 
class databaseFunctions extends variables
    {
    protected $db = NULL;
    
        public function connectToDatabase()
            {
                $this->db=new PDO("mysql:host=$this->dbHost;dbname=$this->dbName;", $this->dbUsername, $this->dbPassword);
                $this->db->exec("set names utf8");
                $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            }
        
    }
 
?>

<?php 
class logInOut extends databaseFunctions  
    {
        public function logIn($username,$password)
            {
                $stmt=$this->db->query("SELECT * FROM `database`.`tabulka` WHERE `username`='$username' and `password`='$password'");
                $r=$stmt->rowCount();
                if($r==1)
                    {
                        header ('Location: soubor.php');
                    }
                    else 
                        {
                            echo 'Přihlášení se nezdařilo. Zkontrolujte si prosím vložené údaje")';
                        }
            }
    }
?>

Ale dedičnosť (a extends b) nie je najlepší spôsob ako toto riešiť.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: