Des doublons se créent dans ma table

Eléphanteau du PHP | 30 Messages

22 mai 2017, 13:27

Bonjour
J’ai créé une table dans laquelle j’enregistre via un formulaire les données suivantes : « prenom » , « email » , et « age »
Pour les enregistrer dans la table, j’ai essayé au début de mon code de mettre quelques filtres, afin d’empêcher que les utilisateurs n’introduisent n’importe quoi dans ma table, jusque-là tout fonctionne nickel , ensuite dans une deuxième étape je vérifie d’abord si ce nouveau enregistrement se trouve déjà inscrit dans la table si tel est pas le cas je n’autorise pas l’enregistrement au cas contraire je l’autorise dans une troisième étape. Maintenant mon problème se situe au niveau de cette dernière étape c’est-à-dire que je me suis rendu compte que même si l’enregistrement existe déjà dans la table ceci n’empêche pas son enregistrement dans la table.
Voici mon code

Code : Tout sélectionner

<html > <body> <form action='validation_enregistrement_bd.php' method='POST'> Prénom : <input type="text" name="prenom"/><br/> Adresse de messagerie : <input type="text" name="email"/><br/> Âge : <input type="INT" name="age"/><br/> <input type="submit" value="Envoyer"/> </form> <?php //Filtrer toutes les données du formulaire $options = array( //Enlever les balises. 'prenom' => FILTER_SANITIZE_STRING, //Valider l'adresse de messagerie. 'email' => FILTER_VALIDATE_EMAIL, 'age' => array( 'filter' => FILTER_VALIDATE_INT, //Valider l'entier. 'options' => array( 'min_range' => 0 //Minimum 0. ) ) ); $resultat = filter_input_array(INPUT_POST, $options); if($resultat != null) { //Si le formulaire a bien été posté. //Enregistrer des messages d'erreur perso. $messageErreur = array( 'email' => 'L\'adresse de messagerie n\'est pas valide.', 'age' => 'Veuillez entrer un nombre entier positif pour votre âge.' ); $nbrErreurs = 0; foreach($options as $cle => $valeur) { //Parcourir tous les champs voulus. if(empty($_POST[$cle])) { //Si le champ est vide. echo 'Veuillez remplir le champ ' . $cle . '.<br/>'; $nbrErreurs++; } elseif($resultat[$cle] === false) { //S'il n'est pas valide. echo $messageErreur[$cle] . '<br/>'; $nbrErreurs++; } } // Si les données saisies dans le formulaire respectent les formes exigées alors... if($nbrErreurs == 0) { if ( isset( $_POST['prenom'] )) { $rechpren = $_POST['prenom']; $rechadresse = $_POST['email']; $rechage = $_POST['age']; // On verrifie d'abord l'eventuelle existence de l'enregistrement dans la table try { $bdd = new PDO('mysql:host=localhost;dbname=comptes','root','',array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } // On récupère d'abord l'engistrement liee a la fiche du client dans la table ''clients'' $req = $bdd->prepare('SELECT prenom,email,age FROM clients WHERE prenom= :prenom '); $req-> execute(array( 'prenom'=> $rechpren , )); $count = $req->rowCount(); //On affiche chaque entrée une à une while ($donnees = $req->fetch()) if($count> 0) // { // echo 'Ce client a ete deja enregistre'; // } // Si le client existe dans la table on affichera { echo 'Ce client a ete deja enregistre'; echo $donnees['prenom'].'.......'.$donnees['email'].'........................'.$donnees['age'].'<br><br/>'; } $req->closeCursor(); // Termine le traitement de la requête } else // L'enregistrement n'existe pas dans la table on l'effectue try { $bdd = new PDO('mysql:host=localhost;dbname=comptes','root','',array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } { $req = $bdd->prepare('INSERT INTO clients (prenom, email,age) VALUES(:prenom, :email,:age)'); $req->execute(array( 'prenom' =>$rechpren , 'email' => $rechadresse, 'age' =>$rechage )); { echo 'Client enregistre'; } $req->closeCursor(); } } } else { echo 'effectuez votre premier enregistrement de cette session.'; } ?> </body> </html>

Mammouth du PHP | 1967 Messages

23 mai 2017, 17:20

Difficile à voir sans une identation correcte, mais je pense que ton problème viens de là, place des petits espions echo "je suis un super espion"; pour voir par où passe ton code. je pense qu'il y a un } en trop ici :

cho 'Ce client a ete deja enregistre';
echo $donnees['prenom'].'.......'.$donnees['email'].'........................'.$donnees['age'].'<br><br/>';
}
$req->closeCursor(); // Termine le traitement de la requête
} //< -- celui ci devrait se trouver ailleurs, plus bas
else
// L'enregistrement n'existe pas dans la table on l'effectue
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 19 Messages

26 mai 2017, 04:04

je crois que l'erreur viens de ton premier while:
while ($donnees = $req->fetch())
tu n'a pas mis d'accollade ouvrant ouvrant ( { ) de fait celui de if