sofia Posté 6 Juillet 2005 Posté 6 Juillet 2005 bonjour, je vous demande votre aide à propos d'un prblème que je rencontre pour accepter l'inscription d'un client dans ma base de donnée. je fais un contrôle de l'existence d'emails identiques avant de confirmer l'inscription. si l'email existe déjà le nouveau client doit saisir une autre une autre email. j'ai fait des test en saisissant la même email pour 2 clients, il insert le 2ème comme même! voiçi mon script: est ce qu'il y'a des fautes? Merci de me répondre rapidement. <?php session_start(); // Données provenant du formulaire d'inscription d'un nouveau client $nom = $_POST['Nom']; $prenom = $_POST['Prenom']; $adresse = $_POST['Adresse']; $cp = $_POST['CodePostal']; $ville = $_POST['Ville']; $nutel = $_POST['Tel']; $email = $_POST['E-mail']; $_SESSION['E-mail'] = $email; $mdp = md5($_POST['MotDePasse']); $_SESSION['MotDePasse'] = $mdp; $question = $_POST['Question']; $reponse = $_POST['Reponse']; // Ouverture de la base de données $connexion=mysql_connect("localhost", "root", "");// $db=mysql_select_db("bateautaxi", $connexion); if($db){ // Recherche de l'existence d'un email identique $requete1= "select * from clients where E-mail = $email "; // Soumission de la requête SQL à la base $resultat1 = mysql_query($requete1, $connexion); // Calcul du nombre d'enregistrements dans la table $nbligne=mysql_num_rows($resultat1); // Exploitation des résultats de la recherche if ($nbligne == 0) {// Il n'y a aucun client correspondant dans la table // Insertions des informations concernant le nouveau client $requete2="insert into clients values ('', '$nom', '$prenom', '$adresse', '$cp', '$ville', '$nutel', '$email', '$mdp', '$question',' $reponse')"; +// Soumission de la requête SQL à la base $resultat2 = mysql_query($requete2, $connexion); echo "<P align=\"center\"><FONT SIZE=\"5\" COLOR=\"#CC0000\"> inscription du nouveau client réussie</FONT>"; // header("Location:produit.php"); else { ?>// Il y a un client correspondant <html> <head> <title>Erreur d'inscription</title> </head> <body bgcolor="#FFCC99" link="#000099" vlink="#990099" alink="#000099"> <div align="center"><b><p>ERREUR D'INSCRIPTION</p> <br> </div> <center><p><b>Votre adresse e-mail correspond à un client déjà inscrit. <br>Utilisez une autre adresse e-mail pour vous inscrire.<br> </b></p> <form action = "nvlle_inscription.php" method = "post"><br> <input type = "submit" value = "Valider"></center> </body> </html> <?php }} else { // Fermeture de la base de donnéesecho "connexion à la BD echouée";} mysql_close(); ?>
MS-DOS_1991 Posté 6 Juillet 2005 Posté 6 Juillet 2005 (modifié) Salut sofia Pourrais-tu éditer ton message en refermant ta balise [ code ][ /code ] ? En ce qui concerne les "erreurs" de ton code: Ne JAMAIS faire confiance à un utilisateur , donc toujours protéger ses variables: // Données provenant du formulaire d'inscription d'un nouveau client$nom = trim(strip_tags($_POST['Nom']));$prenom = trim(strip_tags($_POST['Prenom']));$adresse = trim(strip_tags($_POST['Adresse']));$cp = trim(strip_tags($_POST['CodePostal']));$ville = trim(strip_tags($_POST['Ville']));$nutel = trim(strip_tags($_POST['Tel']));$email = trim(strip_tags($_POST['E-mail']));$_SESSION['E-mail'] = $email;$mdp = md5($_POST['MotDePasse']);$_SESSION['MotDePasse'] = $mdp;$question = trim(strip_tags($_POST['Question']));$reponse = trim(strip_tags($_POST['Reponse'])); Plutôt écrire les commandes MySQL en majuscules et mettre des ' ' apres le nom des champs $requete1= "SELECT * FROM clients WHERE E-mail='$email'";...$requete2="INSERT INTO clients VALUES ('', '$nom', '$prenom', '$adresse', '$cp', '$ville', '$nutel', '$email', '$mdp', '$question',' $reponse')"; Le + va produire une erreur car non reconnu par php Penser à refermer les balises html dans l'ordre et utiliser de préférence les single quotes (plus rapides et plus pratiques dans ce cas): echo "<p align="center" style="font-size: normal; color: #CC0000;">Inscription du nouveau client réussie</p>'; Attention: la fonction header() ne marche que si aucune sortie html n'a été produite avant son utilisation: echo "<p align="center" style="font-size: normal; color: #CC0000;">Inscription du nouveau client réussie</p>';// header('Location: produit.php'); La fin de ton code est un peu embrouillée else { // Fermeture de la base de donnéesecho 'connexion à la BD echouée';}_AT_mysql_close(); @+ Modifié 6 Juillet 2005 par MS-DOS_1991
AvenueDuWeb Posté 6 Juillet 2005 Posté 6 Juillet 2005 Salut, Le plus simple c'est de passer le champs mail de ta base en "unique" puis de récupérer la valeur de mysql_errno au moment de l'insertion et de faire une redirection vers la page d'inscription si mysql_errno renvoie une erreur et de marquer "le mail suivant existe déjà dans notre base de données"... Faudrait que je retrouve un bout de code pour te montrer mais déjà avec la doc de MySQL ça doit pouvoir t'aider pas mal. Ca t'évite surtout de faire un Select pour rien. Si je retrouve le bout de code, je le poste dans le fil. @+
sofia Posté 7 Juillet 2005 Auteur Posté 7 Juillet 2005 oui ça m'intéresserait le code de l'erreur si tu peux me le communiquer. j'aurrais pu chercher moi même mais je n'ai pas souvent accés à internet. merci
AvenueDuWeb Posté 7 Juillet 2005 Posté 7 Juillet 2005 oui ça m'intéresserait le code de l'erreur si tu peux me le communiquer. j'aurrais pu chercher moi même mais je n'ai pas souvent accés à internet. merci <{POST_SNAPBACK}> Donc le code l'erreur MySQL c'est 1062. Pour info la liste de toutes les erreurs MySQL : http://dev.mysql.com/doc/mysql/fr/error-handling.html Concernant le code voici ce que j'ai retrouvé : if(mysql_errno()==1062){ $erreur=substr(mysql_error(), -1, 1);header("Location: index.php?erreur=$erreur");} En gros ça permet de savoir sur quel numéro de champs est l'erreur si tu as plusieurs champs en "UNIQUE". Voilà. @+
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant