Savoir si valeur existe déjà dans BDD

Résolu
MacGaliver Messages postés 146 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 21 juillet 2013 - 10 déc. 2012 à 15:02
MacGaliver Messages postés 146 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 21 juillet 2013 - 10 déc. 2012 à 16:18
Bonjour à toutes et à tous,

Voilà j'explique mon problème.

En fait j'ai trouvé un petit code source sur le web, mais voilà je ne sais pas comment le modifie pour vérifier si l'adresse e-mail saisie existe déjà dans la basse de donnée: voici le bout de code et la bdd:

db name: a97
table: users

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
id | username | password | email | avatar | signup_date+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 | mgyver | psswd |mg@dom.tld | me.png | 1344880350 +
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 | mgyves | psswe |mh@dom.tld | xx.png | 1344959188 +
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


ET LE CODE SOURCE: FORMUALIRE INSCRIPTION::

<?php
include('config.php'); //Config BDD, ...
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <link rel="stylesheet" media="all" type="text/css" href="/styles/<?php echo $skin; ?>/styles.css" />
        <title>Inscription</title>
    </head>
    
<?php
include "include/header.inc.php";

if(isset($_POST['username'], $_POST['password'], $_POST['passverif'], $_POST['email'], $_POST['avatar']) and $_POST['username']!='')
{
//On enleve lechappement si get_magic_quotes_gpc est active
if(get_magic_quotes_gpc())
{
$_POST['username'] = stripslashes($_POST['username']);
$_POST['password'] = stripslashes($_POST['password']);
$_POST['passverif'] = stripslashes($_POST['passverif']);
$_POST['email'] = stripslashes($_POST['email']);
$_POST['avatar'] = stripslashes($_POST['avatar']);
}
if($_POST['password']==$_POST['passverif'])
{
if(strlen($_POST['password'])>=6)
{

if(preg_match('#^(([a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+\.?)*[a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+)@(([a-z0-9-_]+\.?)*[a-z0-9-_]+)\.[a-z]{2,}$#i',$_POST['email']))
{
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
$email = mysql_real_escape_string($_POST['email']);
$avatar = mysql_real_escape_string($_POST['avatar']);
$dn = mysql_num_rows(mysql_query('select id from users where username="'.$username.'"'));
if($dn==0)
{
$dn2 = mysql_num_rows(mysql_query('select id from users'));
$id = $dn2+1;
//On enregistre les informations dans la base de donnee
if(mysql_query('insert into users(id, username, password, email, avatar, signup_date) values ('.$id.', "'.$username.'", "'.$password.'", "'.$email.'", "'.$avatar.'", "'.time().'")'))
{
$form = false;
?>

Vous avez bien été inscrit. Vous pouvez dorénavant vous connecter.

Se connecter

<?php
}
else
{
$form = true;
$message = 'Une erreur est survenue lors de l\'inscription.';
}
}
else
{
$form = true;
$message = 'Un autre utilisateur utilise déjà le nom d\'utilisateur que vous désirez.';
}
}
else
{
$form = true;
$message = 'L\'email que vous avez entré n\'est pas valide.';
}
}
else
{
$form = true;
$message = 'Le mot de passe que vous avez entré contient moins de 6 caractères.';
}
}
else
{
$form = true;
$message = 'Les mots de passe que vous avez entré ne sont pas identiques.';
}
}
else
{
$form = true;
}
if($form)
{
if(isset($message))
{
echo '
'.$message.'
&rarr; Retour
';
exit();
}
//On affiche le formulaire
?>




    <form action="signup.php" method="post">
        Veuillez remplir ce formulaire pour vous inscrire:

        

            <label for="username">Nom d'utilisateur</label>" />

            <label for="password">Mot de passe (6 caractères min.): </label>

            <label for="passverif">Mot de passe (vérification): </label>

            <label for="email">Email</label>" />

            <label for="avatar">Image perso(facultatif)</label>" />

            


    </form>


<?php
}

include "include/footer.inc.php";
?>

</html>




Merci d'avance ;)

2 réponses

cs_L0ci Messages postés 224 Date d'inscription vendredi 26 novembre 2010 Statut Membre Dernière intervention 11 juin 2013 7
10 déc. 2012 à 15:18
Bonjour,

Avant l'insertion dans la bdd, il suffit d’exécuter un "select count... where email = $_POST['email']";
Si la requête renvoi 0 c'est bon, sinon c'est un doublon.

2ème possibilité est de mettre le champs email à 'unique' dans la base et d'encadrer la requête d'un try{}catch{}.
3