Autor Zpráva
_fantomas
Profil
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
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
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
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 returnom, 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
Kubo2:
Díky, pomohlo, funguje :)

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: