Autor Zpráva
petey
Profil
Ahoj všem!
Věřím, že jde o školáckou chybu, ale zeptám se, než nesmyslně zkoušet miliony změn, které nikam nevedou. Zatím jsem zjistil, že objekt ve funkci logged() není definován, tudíž se domnívám, že by měl být zapsán někde do konstruktoru, aby na něj funkce viděla. To ovšem zapsat neumím.
Pro zkušenost s tím, že chcete vidět kód, tak zde uvádím dotčené kusy kódu.

V db_init.php mám vytvořený objekt:
<?php

$host="localhost";
$db="***";
$user="***";
$pass="***";

$mysqli = new mysqli($host,$user,$pass,$db);

/* check connection */
if (mysqli_connect_errno()) {
    printf("Selhalo spojení na databázi: %s\n", mysqli_connect_error());
    exit();
}

/* change character set to utf8 */
if (!$mysqli->set_charset("utf8")) {
    printf("Nepodařilo se pro spojení nastavit utf8: %s\n", $mysqli->error);
}

?>

Ten se snažím využít v metodě třídy login:

function logged() {
        $query="SELECT login FROM $this->table WHERE session='".$this->session_login_string."' AND login='".$this->login_name."' AND ip='".$this->ip."'  AND prihlasen>=DATE_SUB(now(),INTERVAL ".$this->checktimelimit." SECOND)";
        $result = $mysql->query($query);
        $data = $mysqli_fetch_array($result);

        if ($mysqli_num_rows($result)==1){

            $query="UPDATE $this->table SET prihlasen=now() WHERE session='".$this->session_login_string."' AND login='".$this->login_name."'";
            $result = @mysql_query($query,$this->db);

            $this->load();
            return (1);
        } else {
            return (0);
        }
        $result->close();
    }
...
Joker
Profil
petey:
Tak za prvé se ta proměnná na jednom místě jmenuje $mysql a na druhém $mysqli.

Za druhé to nevypadá jako atribut něčeho, ale jen jako globální proměnná.

Za třetí předávání dat mezi funkcí/metodou a okolním světem by mělo probíhat přes parametry a návratovou hodnotu.

Kromě toho ten kód v přístupu k databázi kombinuje mysql a mysqli rozšíření a potlačuje případné chybové hlášky u mysql_query.
petey
Profil
Joker:
Díky za reakci.

ad1
To je chybou přepisování původně mysql na mysqli, už je to opraveno.
ad2
Je tedy nějaký lepší přístup? Vím že globální proměnné nejsou dobré. Je to kopírované přímo z reference php.net.
ad3
Ano, přes parametr by to bylo vhodné pro jednu funkci, lze to ale pro celou třídu? Jak by v takovém případě vypadl zápis v konstruktoru?
ad4
Jelikož přepisuji mysql na mysqli, tak jsou ve funkci login ještě nedodělky. Primárně řeším řádek $result = $mysqli->query($query);, kde dostávám od PHP chybu Call to a member function query() on a non-object in ....
Toto téma je uzamčeno. Odpověď nelze zaslat.