Autor | Zpráva | ||
---|---|---|---|
_fantomas Profil |
#1 · Zasláno: 19. 1. 2015, 21:04:44
Ahoj, snažil som sa dostať pri prihlasovaní do hesla funkciu mysqli_real_escape_string aby som to mal bezpečnejšíe no nedarí sa mi to
Pri zaslaní tohto SQL príkazu vypíše chybu Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, null given in C:\xampp\htdocs\develop\website\class\login.php on line 41 $this->hashed = mysqli_real_escape_string($db->connect(), $this->password); $q = "SELECT * FROM `users` WHERE username ='$this->username' AND password='$this->hashed'"; v login.php na 41 mam to čo som už písal vyššie $this->hashed = mysqli_real_escape_string($db->connect(), $this->password); Neviem kde by mohla byť chyba, inač funkcia connect(); funguje na pripojenie k DB. Bol by som rád za rady a rychlu pomoc :) |
||
DJ Miky Profil |
#2 · Zasláno: 19. 1. 2015, 21:08:25
mysqli_real_escape_string() očekává jako první parametr instanci mysqli , ale přijde ji null , tedy $db->connect() vrátí null . Chyba je tedy někde v té metodě connect() .
|
||
lionel messi Profil |
_fantomas:
Hoci je možné objektový a procedurálny prístup k databáze mixovať, nezdá sa mi to ako najlepšia praktika, sťažuje to orientáciu v kóde. Radšej si vyber jeden spôsob, ale používaj ho konzistentne. Čo takto vyskúšať niečo podobné: $this->hashed = $db->real_escape_string($this->password); Malo by to fungovať a kód by sa držal objektového prístupu. |
||
_fantomas Profil |
#4 · Zasláno: 19. 1. 2015, 21:17:18
Fatal error: Call to undefined method DatabaseX::mysqli_real_escape_string() in C:\xampp\htdocs\develop\website\class\login.php on line 41
Volám neznámu metodu / funkciu asi som sem mal hodiť cely kod $db = new DatabaseX('localhost', 'root', '*****', 'web'); $db->connect(); $this->hashed = $db->mysqli_real_escape_string($this->password); $q = "SELECT * FROM users WHERE username ='$this->username' AND password='$this->hashed'"; Funkcia connect(); public function connect() { $this->link = mysqli_connect($this->host, $this->user, $this->pass, $this->name) or die("Chyba pri spojeni s DB"); |
||
jefitto44 Profil |
#5 · Zasláno: 20. 1. 2015, 07:44:30
Nechýbajú ti tam v query náhodou
$q = "SELECT * FROM users WHERE username ='".$this->username."' AND password='".$this->hashed."'"; |
||
Kubo2 Profil |
[#4] _fantomas:
To je, ako ja hovorím, celé zle. Čítal si vôbec poriadne tú chybovú hlášku? Voláš metódu ::mysqli_real_escape_string() na objekte triedy DatabaseX , čo je zjavne nejaká tvoja databázová vrstva, ktorej si túto metódu neimplementoval. (Nie, to neznamená, že ju máš implementovať.)
Escapovanie by mimochodom mohla tá vrstva riešiť automaticky, podobne, ako to robí napr. dibi::query() .
Metóda DatabaseX::connect() zjavne nič nevracia (ako implictná návratová hodnota každého typu callable , ktorú je možné prekryť explicitným return om, je v PHP hodnota NULL (jediná hodnota rovnomenného typu)).
Potrebuješ pre volanie získať odkaz na objekt pripojenia k databázi, takže by mohlo pomôcť pridanie metódy DatabaseX::getConnection() :
public function getConnection() { return $this->link; } |
||
_fantomas Profil |
#7 · Zasláno: 20. 1. 2015, 17:57:27
Kubo2:
Díky, pomohlo, funguje :) |
||
Časová prodleva: 9 let
|
0