Modérateur PHPfrance |
8758 Messages
04 oct. 2013, 10:14
Sait,
Point de vu intéressant mais
- tu as autant de point de décision avec le switch que le if, mais tu ajoute en complexité avec le foreach or cela n'as pas de raison d'être lorsque tu connais les champs.
- la requête préparée est inutile et exploité a tord. (Surtout que par défaut ce n'est qu'une émulation donc autant utiliser query et la méthode quote. (D'ailleurs la requête préparée n'a de sens que dans une boucle).
Pour la partie objet :
- le problème la c'est ton modèle objet est foireux une entité (en java j'aurais pojo, mais en php ça fait popo du coup c'est pas terrible

) ne doit pas contenir "d'intelligence".
Tu appliques un pattern Dao et donc une classe qui fait les accès base et retourne un objet utilisateur
Dans le même genre on évitera l'héritage entre objet utilitaire et métier cela inclus un couplage fort qui peux être source d'emmerde plus tard

Dans l'objet dao ou effectue une injection de dépendance (par le constructeur généralement quand c'est pas optionnel)
d'ailleurs je t'invite a donner des noms explicite aux méthodes et paramètre de celle ci afin que l'on puisse comprendre rapidement ton code.
Et pendant que l'on y est
- ne pas abuser du transtypage (un return rowCount pour un booleen c'est moyen)
- Ne pas oublier de fermer les curseurs
- Le select * c'est le mail (surtout quand on a pas besoin des données)
Un code un poil plus cohérent serait ainsi (par exemple).
<?php
class User {
private $id;
private $email;
private $pseudo;
/**
* @return mixed
*/
public function getEmail() {
return $this->email;
}
/**
* @param mixed $email
*/
public function setEmail($email) {
$this->email = $email;
}
/**
* @return mixed
*/
public function getId() {
return $this->id;
}
/**
* @param mixed $id
*/
public function setId($id) {
$this->id = $id;
}
/**
* @return mixed
*/
public function getPseudo() {
return $this->pseudo;
}
/**
* @param mixed $pseudo
*/
public function setPseudo($pseudo) {
$this->pseudo = $pseudo;
}
}
include_once './class/database.php';
class utilisateurDao {
/**
* Acces base
* @var PDO
*/
private $db = new PDO('');
public function __construct(PDO $db) {
if ($db !== null) {
$this->db = $db;
}
else {
throws new Exception('Objet database obligatoire');
}
}
/**
* Vérifie l'existance d'une adresse email dans la base
* @param $email
* @return mixed
*/
public function mailExist($email) {
$sql = 'SELECT count(*) as nb FROM utilisateur WHERE mail = ';
$stmt = $this->db->query($sql . $this->db->quote($email));
$this->dbError($stmt);
$data = $stmt->fetch(PDO::FETCH_ASSOC);
$stmt->closeCursor();
return $data['nb'];
}
/**
* Leve une exception si le stmt est false l'erreur est dans l'ibjet pdo
* @param $stmt
* @throws Exception
*/
private function dbError(PDOStatement $stmt) {
if ($stmt === false) {
$err = $this->db->errorInfo();
throw new Exception($err[2]);
}
}
/**
* Vérifier l'existance d'un pseudo dans la base
* @param $pseudo
* @return mixed
*/
public function checkExistePseudo($pseudo) {
$sql = 'SELECT count(*) FROM utilisateur WHERE pseudo =' . $this->db->quote($pseudo);
$stmt = $this->db->query($sql);
$this->dbError($stmt);
$data = $stmt->fetch(PDO::FETCH_ASSOC);
$stmt->closeCursor();
return $data['nb'];
}
/**
* Ajout d'un utilisateur
* @param $mail
* @param $mdp
* @param $pseudo
*/
public function creer($mail, $mdp, $pseudo) {
$sql = 'INSERT INTO utilisateur(mail,mdp,pseudo) VALUES(' . $this->db->quote($mail) . ',' .
$this->db->quote($mdp) . ',' . $this->db->quote($pseudo) . ')';
$stmt = $this->db->query($sql);
$this->dbError($stmt);
$user = new User();
$user->setEmail($mail);
$user->setPseudo($pseudo);
$user->setId($this->db->lastInsertId());
return $user;
}
/**
* Retourne un utilisateur en fonction de son id
* @param $id
* @return mixed
* @throws Exception
*/
public function getById($id) {
$sql = 'SELECT * FROM utilisateur WHERE id = ';
$stmt = $this->db->query($sql . $this->db->quote($id));
if ($stmt === false) {
$err = $this->db->errorInfo();
throw new Exception($err[2]);
}
$data = $stmt->fetch(PDO::FETCH_CLASS, 'User');
$stmt->closeCursor();
return $data;
}
/**
* Authentification de l'utilisateur
* @param $mail
* @param $mdp
* @return mixed
*/
public function authentifier($mail, $mdp) {
$sql = 'SELECT mdp FROM utilisateur WHERE mail = ' . $this->db->quote($mail);
$stmt = $this->db->query($sql . $this->db->quote($id));
if ($stmt === false) {
$err = $this->db->errorInfo();
throw new Exception($err[2]);
}
$data = $stmt->fetch(PDO::FETCH_CLASS, 'user');
$stmt->closeCursor();
if ($data['mdp'] == $mdp) {
return true;
}
else {
return false;
// ou throw Exception au choix
}
}
}
@+
Modifié en dernier par
moogli le 04 oct. 2013, 10:51, modifié 1 fois.
Raison : Ajout code exemple
Il en faut peu pour être heureux ......