Savoir si valeur existe déjà dans BDD [Résolu]

MacGaliver 149 Messages postés vendredi 28 mai 2010Date d'inscription 21 juillet 2013 Dernière intervention - 10 déc. 2012 à 15:02 - Dernière réponse : MacGaliver 149 Messages postés vendredi 28 mai 2010Date d'inscription 21 juillet 2013 Dernière intervention
- 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 ;)
Afficher la suite 

2 réponses

Répondre au sujet
cs_L0ci 224 Messages postés vendredi 26 novembre 2010Date d'inscription 11 juin 2013 Dernière intervention - 10 déc. 2012 à 15:18
+3
Utile
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{}.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_L0ci
MacGaliver 149 Messages postés vendredi 28 mai 2010Date d'inscription 21 juillet 2013 Dernière intervention - 10 déc. 2012 à 16:18
0
Utile
Merci pour la piste ;)

J'ai choisi la première:


<?php
include "config.php";

$sql = 'SELECT count(*) FROM matable WHERE email="'.mysql_escape_string($_POST['email']).'"';
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
$data = mysql_fetch_array($req);

if ($data[0] == 0) {
echo "OK";
}
else {
echo "existe deja";
}

?>

Bonne soirée.
Commenter la réponse de MacGaliver

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.