Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][PDO]Sprawdzenie klasy + zapytanie PDO = error
Forum PHP.pl > Forum > Przedszkole
Rysh
Witam, mam taką oto klasę w php (chciałbym prosić o sprawdzenie jej pod kątem poprawności - coś mi się wydaje, że wyjątki w klasie tworzę źle i powinny one być poza klasą. W każdym razie sama klasa działa, lecz gdy dodaję sprawdzanie w mySQL mam błąd przy linijce:
  1. $sql->$this->pdo->bindValue(':login',$login,PDO::PARAM_STR);


Kod błędu:
Kod
Catchable fatal error: Object of class Register could not be converted to string in /home/rysh/public_html/class/class.register.php on line 20


Oto całość kodu:
  1. class Register {
  2. private $pdo;
  3. function __construct($pdo) {
  4. $this->pdo = $pdo;
  5. }
  6.  
  7. function register_player($login, $pass, $repass, $email) {
  8. try {
  9. if(strlen($login) < 4) {
  10. throw new Exception('Login za krótki.');
  11. } elseif(md5($pass) != md5($repass)) {
  12. throw new Exception('Wpisane hasła nie zgadzają się.');
  13. } elseif(!preg_match("/^[a-zA-Z0-9.-]+@[a-zA_Z0-9.-]+[a-zA-Z0-9.-]+$/",$email)) {
  14. throw new Exception('Błędny adres email.');
  15. }
  16. $sql = $this->pdo->prepare("SELECT * as COUNT FROM user WHERE login=:login OR email=:email");
  17. $sql->$this->pdo->bindValue(':login',$login,PDO::PARAM_STR);
  18. $sql->$this->pdo->bindValue(':email',$email,PDO::PARAM_STR);
  19. $zajety = $sql->$this->pdo->execute();
  20. print_r($zajety);
  21.  
  22. } catch(Exception $exception) {
  23. echo 'Wystąpił błąd: '. $exception->getMessage() .'<br />';
  24. }
  25. }
  26. }


Czy mógłby mi ktoś doradzić co robię źle, ewentualnie naprowadzić?

Pozdrawiam.
nospor
$sql->$this
Rysh
Trochę mi to zajęło zanim zrozumiałem co jest źle... w każdym razie działa smile.gif
  1. $sql = $this->pdo->prepare("SELECT * FROM user WHERE login=:login OR email=:email");
  2. $sql->bindValue(':login',$login,PDO::PARAM_STR);
  3. $sql->bindValue(':email',$email,PDO::PARAM_STR);
  4. $sql->execute();
  5. $sql->closeCursor();


A co z poprawnością klasy?

[edit: 15:47]

Przeniosłem wyjątki poza klasę, wszystko działa.
Jednak prosiłbym o ogólną ocenę i uwagi dotyczące tej klasy.

index.php:
  1. try {
  2. require_once('./class/class.register.php');
  3. $player = new Register($pdo);
  4. $player->register_player($_POST['login'], $_POST['pass'], $_POST['repass'], $_POST['email']);
  5. echo 'Użytkownik zarejestrowany poprawnie.<br />';
  6. } catch(Exception $exception) {
  7. echo 'Wystąpił błąd: '. $exception->getMessage() .'<br />';
  8. }


class.register.php:
  1. class Register {
  2. private $pdo;
  3. function __construct($pdo) {
  4. $this->pdo = $pdo;
  5. }
  6.  
  7. private function istnieje($login, $email) {
  8. $sql = $this->pdo->prepare("SELECT * FROM user WHERE login=:login OR email=:email");
  9. $sql->bindValue(':login',$login,PDO::PARAM_STR);
  10. $sql->bindValue(':email',$email,PDO::PARAM_STR);
  11. $sql->execute();
  12. $sql->closeCursor();
  13. if($sql->rowCount() == 0) {
  14. return false;
  15. } else {
  16. return true;
  17. }
  18. }
  19.  
  20. function register_player($login, $pass, $repass, $email) {
  21. if(strlen($login) < 3) {
  22. throw new Exception('Login za krótki.');
  23. } elseif(md5($pass) != md5($repass)) {
  24. throw new Exception('Wpisane hasła nie zgadzają się.');
  25. } elseif(!preg_match("/^[a-zA-Z0-9.-]+@[a-zA_Z0-9.-]+[a-zA-Z0-9.-]+$/",$email)) {
  26. throw new Exception('Błędny adres email.');
  27. } elseif($this->istnieje($login, $email)) {
  28. throw new Exception('Podany login lub email znajduje się już w bazie.');
  29. }
  30.  
  31. $new = $this->pdo->prepare("INSERT INTO user (login, haslo, email) VALUES (:login, :haslo, :email)");
  32. $new->bindValue(':login',$login,PDO::PARAM_STR);
  33. $new->bindValue(':haslo',md5($pass),PDO::PARAM_STR);
  34. $new->bindValue(':email',$email,PDO::PARAM_STR);
  35. $new->execute();
  36. $new->closeCursor();
  37. return true;
  38. }
  39. }
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.