Autor | Zpráva | ||
---|---|---|---|
petey Profil |
#1 · Zasláno: 1. 9. 2014, 15:30:41
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 |
#2 · Zasláno: 1. 9. 2014, 15:41:23
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 ... .
|
||
Časová prodleva: 10 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0