21. září bude sraz! Od 18.00 v restauraci Tradice v Praze u Anděla
Autor Zpráva
Webster.K
Profil
Zdravím všechny, mám úplně začátečnický dotaz.
Vytvořil jsem si třídu pro připojení do DB která má v sobě funkci query. V jiném souboru tedy nejdříve includnu třídu class.databaze.php, pak zavolám $db= new databaze(nejaky parametry pro pripojeni);$promena = $db->query(dotaz); to vše funguje. Nyní vytvořím třídu uživatel v souboru class.user.php a ve třídě user funkci login(). Můj dotaz zní, jak ve třídě user ve funkci login mám docílit toho, abych na základě dvou parametrů, tedy nick, heslo ze třídy databáze mohl použít třídu query?
Jan Tvrdík
Profil
Webster.K:
Musíš si tu proměnnou $db předat buď jako třetí parametr do funkce User::login() nebo (což je lepší) konstruktorem třídy User, tj. celé to bude vypadat

$db = new Database(...);
$user = new User($db);
$user->login('John', '1234');
Webster.K
Profil
Jan Tvrdík:
Aha, to jsem uplně nepochopil jak. Pošlu spíš obsah těch souborů aby bylo jasnější, co dělám špatně:
soubor class.database.php
<?php
class Databaze {

    private $link;
    private $host, $username, $password, $database;

    public function __construct($host, $username, $password, $database){
        $this->host        = $host;
        $this->username    = $username;
        $this->password    = $password;
        $this->database    = $database;
        $this->link = mysql_connect($this->host, $this->username, $this->password) OR die("Problém s připojením do databáze");
        mysql_select_db($this->database, $this->link) OR die("Problém s vybráním konkrétní databáze");
        return true;
    }

    public function query($query) {
        $result = mysql_query($query);
        if (!$result) die('Špatný dotaz: ' . mysql_error());
        return $result;
    }

    public function __destruct() {
        mysql_close($this->link)
            OR die("Došlo k problému při odpojení od databáze");
    }
}
?>
Obsah souboru class.user.php:
<?php
class User{
    
    public function __construct($db){
        $this->db = $db;
        return true;
    }

    public function login($nick, $pass){
        //telo přihlašovací funkce
        //$result = Databaze::query("SELECT * FROM test WHERE id='".$nick."' AND tablerow='".$pass."'");
        $result = $db->query("SELECT * FROM test WHERE id='".$nick."' AND tablerow='".$pass."'");

        while ($row = mysql_fetch_assoc($result)) {
            echo  $row['tablerow'];
        }
    }
    
    public function logout(){
        session_destroy();
        return;
    }
}
?>
a pak soubor index.php
<?php
include "./class.database.php";
include "./class.user.php";

$db = new Database("localhost", "aaa", "aaa", "aaa");
$user = new User($db);
$user->login('1','Udaj 1');

?>
Kde jsem přesně udelal chybu?
Jan Tvrdík
Profil
Na 12. řádku má být místo $db $this->db
Webster.K
Profil
Aha, děkuju, už to funguje jak má ;)

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:

0