Bonsoir
merci encore une fois pour vos retours que je vais essayer de m'approprier.
J'aimerai vous soumettre un point de blocage. Celui de contrôler via une requête SQL si un enregistrement (sur la base de 3 champs) existe déjà.
Cette requete me permet simplement d'insérer un contact. Tout fonctionne normalement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 public function create(Contact &$contact) { $this->pdoStatement = $this->pdo->prepare('INSERT INTO contact VALUES (NULL, :nom, :prenom, :tel, :mel)'); // on lie les variables et on utilise les getters pour obtenir les données $this->pdoStatement->bindValue(':nom', $contact->getNom(), PDO::PARAM_STR); $this->pdoStatement->bindValue(':prenom', $contact->getPrenom(), PDO::PARAM_STR); $this->pdoStatement->bindValue(':tel', $contact->getTel(), PDO::PARAM_STR); $this->pdoStatement->bindValue(':mel', $contact->getMel(), PDO::PARAM_STR); //execute la requete préparée et on recupére l'objet pour pouvoir le tester $executeIsOK = $this->pdoStatement->execute(); // on teste le retour de la requete conformément à la documentation ci-dessus : true = si tout s'est bien passé ou false s'il y a une erreure if(!$executeIsOK) { return false; } else { // pour la mise à jour de l'insertion $id = $this->pdo->lastInsertId(); // on récupère l'identifiant de l'objet créé $contact = $this->read($id); // affectation de l'id à l'objet créé return true; } }
CELIRA m'avait proposé une requête SQL que j'avais adapté pour vérifier si un enregistrement existait déjà sur la base de 3 champs renseignés à l'identique. Tout fonctionne parfaitement également.
j'aimerai maintenant la même chose en POO mais je ne sais pas où je commets mon erreur. Certainement la requête SQL....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 $nom = $_POST['nomF']; $prenom = $_POST['prenomF']; $date = $_POST['dateN']; $ville = $_POST['villeN']; $req = $bdd->prepare('INSERT INTO t_doublon(nomF, prenomF, dateN, villeN) SELECT :nomF, :prenomF, :dateN, :villeN FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM t_doublon WHERE nomF=:nomF AND prenomF=:prenomF and dateN=:dateN)'); $req->execute(array( 'nomF' => $nom, 'prenomF' => $prenom, 'dateN' => $date, 'villeN' => $ville )); if($req->rowCount() == 0){ echo "Ce joueur est déjà enregistré !"; }else { echo "Inscription effectuée"; }
j'ai essayé beaucoup de chose mais je ne trouve pas.....j'aimerai également réinsérer un message pour alerter l'utilisateur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $this->pdoStatement = $this->pdo->prepare('INSERT INTO contact VALUES (NULL, :nom, :prenom, :tel, :mel) SELECT :nom, :prenom, :tel, :mel FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM contact WHERE nom=:nom AND prenom=:prenom and tel=:tel)');
Est-ce que ce fait bien dans la class ContactManager.php ?
Partager