Aller au contenu

vérification avant insertion dans BD


sofia

Sujets conseillés

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();

?>

Lien vers le commentaire
Partager sur d’autres sites

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 :huh:

  • 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 :P

    else { // Fermeture de la base de données
    echo 'connexion à la BD echouée';
    }
    _AT_mysql_close();


@+ ;)

Modifié par MS-DOS_1991
Lien vers le commentaire
Partager sur d’autres sites

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. @+

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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à. @+

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...