Requete sql vérifiez si déjà dans la base
13 messages
• Page 1 sur 1
Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics
-

JeunZ - WRInaute accro

- Messages: 5301
- Inscription: 18 Fév 2004
Requete sql vérifiez si déjà dans la base
Existe il une requete sql qui vérifie si une valeur est déjà insérée dans la base de donnée?
En fait je veux mettre dans une table des emails, un champ id, et un champ email, mais je ne veux pas de doublons au niveau des emails.
Donc je vais mettre le champs email en unique, mais je suppose que si je tente de mettre un email en double ca va faire une erreur et l'afficher disant que on ne peut insérer car c'est un champs unique et que la valeur est déjà dans la table.
Donc je voudrais vérifier avant de tenter l'insertion si la valeur existe déjà.
Sans faire une boucle bien sur, ou sans petites astuces qui consomment trop de ressources. Il doit bien exister quelque chose qui fasse ça de base non?
Genre if exist ou je ne sais quoi
En fait je veux mettre dans une table des emails, un champ id, et un champ email, mais je ne veux pas de doublons au niveau des emails.
Donc je vais mettre le champs email en unique, mais je suppose que si je tente de mettre un email en double ca va faire une erreur et l'afficher disant que on ne peut insérer car c'est un champs unique et que la valeur est déjà dans la table.
Donc je voudrais vérifier avant de tenter l'insertion si la valeur existe déjà.
Sans faire une boucle bien sur, ou sans petites astuces qui consomment trop de ressources. Il doit bien exister quelque chose qui fasse ça de base non?
Genre if exist ou je ne sais quoi
-

rebirth - WRInaute impliqué

- Messages: 909
- Inscription: 18 Avr 2004
Soit tu select count(*) avant, pour savoir combien d'elements il existe avant...
0 => ca existe pas
>0 => ca existe.
Soit tu insert, et tu geres l'erreur en arriere-plan...
Genre
if (erreur_sql)
{
retry_another_email();
}
else
{
next_function();
}
0 => ca existe pas
>0 => ca existe.
Soit tu insert, et tu geres l'erreur en arriere-plan...
Genre
if (erreur_sql)
{
retry_another_email();
}
else
{
next_function();
}
- r23o
- WRInaute discret

- Messages: 211
- Inscription: 13 Juil 2003
Moi je mettrais une clé primaire sur le champ email, et à la place du champ id je prefererais generer une chaine de 37 caracteres alphanum aleatoires...
Ensuite une seule requete suffit pour inserer tes mails sans doublons possible :
un simple insert.
Si l'email n'existait pas l'insert se passe sans probleme, sinon il y aura une erreur à cause de la clé primaire qui interdit l'insertion.
if($result=@mysql_query("insert email, chaine_aleatoire into table...")) echo "Insertion reussi";
else echo"Echec ou L'email existe dejà";
avec le @ derrière mysql_query pour ne pas afficher les erreusr sql à l'ecran.
Ensuite une seule requete suffit pour inserer tes mails sans doublons possible :
un simple insert.
Si l'email n'existait pas l'insert se passe sans probleme, sinon il y aura une erreur à cause de la clé primaire qui interdit l'insertion.
if($result=@mysql_query("insert email, chaine_aleatoire into table...")) echo "Insertion reussi";
else echo"Echec ou L'email existe dejà";
avec le @ derrière mysql_query pour ne pas afficher les erreusr sql à l'ecran.
- andy
- Nouveau WRInaute

- Messages: 22
- Inscription: 29 Juil 2005
Salut, moi je te propose cette solution (qui n'est pas forcément la meilleure):
et ensuite, avec un if, on verifie
Voilà ma méthode!!
++
- Code: Tout sélectionner
$sql_verification = mysql_query('SELECT * FROM table WHERE email =\''.$email.'\'');
$verification = mysql_num_rows($sql_verification);
et ensuite, avec un if, on verifie
- Code: Tout sélectionner
if($verification == 0)
{
echo 'OK, pas de doublon';
}else{
echo 'l\'adresse email existe deja...';
}
Voilà ma méthode!!
++
-

JeunZ - WRInaute accro

- Messages: 5301
- Inscription: 18 Fév 2004
// Ajout à la newsletter
function mysql_die($error = "inconnue"){}
$db = mysql_connect("localhost","xxxxxxxxxx","xxxxxxxxxxxxx");
mysql_select_db("xxxxxxxxxxxxxxxx",$db);
$query_connecte = "INSERT Into newsletter VALUES ('','$mail','1')";
$result_connecte = @mysql_query($query_connecte, $db) or mysql_die("Connexion impossible");
mysql_close($db);
j'ai utilisé ça et ça marche impec !.
- Didier_S
- WRInaute impliqué

- Messages: 567
- Inscription: 24 Aoû 2004
$query_connecte = "INSERT Into newsletter VALUES ('','$mail','1')";
je me permets un petit conseil: utilise plutot une syntaxe comme
- Code: Tout sélectionner
INSERT INTO newsletter (`mail`,`status`) VALUES ('$mail', '1')
ça change pas grand chose, mais ta requête reste valable (et valide) si jamais tu dois ajouter / supprimer des champs. ça t'es jamais arrivé de devoir retoucher des requêtes dans inscription.php parce que tu avais ajouté ou retiré un champ de la table ?
-

JeunZ - WRInaute accro

- Messages: 5301
- Inscription: 18 Fév 2004
Didier_S a écrit:$query_connecte = "INSERT Into newsletter VALUES ('','$mail','1')";
je me permets un petit conseil: utilise plutot une syntaxe comme
- Code: Tout sélectionner
INSERT INTO newsletter (`mail`,`status`) VALUES ('$mail', '1')
ça change pas grand chose, mais ta requête reste valable (et valide) si jamais tu dois ajouter / supprimer des champs. ça t'es jamais arrivé de devoir retoucher des requêtes dans inscription.php parce que tu avais ajouté ou retiré un champ de la table ?
Ah merci j'apprend quelque chose
- r23o
- WRInaute discret

- Messages: 211
- Inscription: 13 Juil 2003
j'ai reçu ta newsletter jeunz
A ta place je ne ferais pas mes liens de desinscriptions sous cette forme :
desinscription.php?id=email@domaine.tld
car un petit malin pourrait facilement ensuite s'amuser à te desinscrire un de tes membres "à l'insu de son plein grés" tout simplement en appellant l'url correspondant.
Si tu relis ma recommandation plus haut tu comprends pkoi il est plus judicieux au lieu d'un id auto_increment de generer une chaine de caractere aleatoire suffisament longue pour reduire à l'infini le risque de repetition (un peu comme un SID de session).
ce qui donne plutot :
desinscription.php?code=gGHhj223bhhHHj3FREDGHJhBBEHS363N
c'est dejà moins parlant comme url
J'ai eu recemment à coder une newsletter en php, j'essai juste de te faire profiter de ma petite experience là dessus...
A ta place je ne ferais pas mes liens de desinscriptions sous cette forme :
desinscription.php?id=email@domaine.tld
car un petit malin pourrait facilement ensuite s'amuser à te desinscrire un de tes membres "à l'insu de son plein grés" tout simplement en appellant l'url correspondant.
Si tu relis ma recommandation plus haut tu comprends pkoi il est plus judicieux au lieu d'un id auto_increment de generer une chaine de caractere aleatoire suffisament longue pour reduire à l'infini le risque de repetition (un peu comme un SID de session).
ce qui donne plutot :
desinscription.php?code=gGHhj223bhhHHj3FREDGHJhBBEHS363N
c'est dejà moins parlant comme url
J'ai eu recemment à coder une newsletter en php, j'essai juste de te faire profiter de ma petite experience là dessus...
-

JeunZ - WRInaute accro

- Messages: 5301
- Inscription: 18 Fév 2004
r23o a écrit:j'ai reçu ta newsletter jeunz
A ta place je ne ferais pas mes liens de desinscriptions sous cette forme :
desinscription.php?id=email@domaine.tld
car un petit malin pourrait facilement ensuite s'amuser à te desinscrire un de tes membres "à l'insu de son plein grés" tout simplement en appellant l'url correspondant.
Si tu relis ma recommandation plus haut tu comprends pkoi il est plus judicieux au lieu d'un id auto_increment de generer une chaine de caractere aleatoire suffisament longue pour reduire à l'infini le risque de repetition (un peu comme un SID de session).
ce qui donne plutot :
desinscription.php?code=gGHhj223bhhHHj3FREDGHJhBBEHS363N
c'est dejà moins parlant comme url
J'ai eu recemment à coder une newsletter en php, j'essai juste de te faire profiter de ma petite experience là dessus...
Ouai t'inquiète je sais...
Mais comme je pars demain en vacances, et que donc je suis super pressé, j'ai fait un système juste pour cette newsletter et je le referait avec une sécurité pour la prochaine
merci
13 messages
• Page 1 sur 1
Formation recommandée sur ce thème :
Formation Google Analytics : en 2 jours, apprenez comment exploiter l'essentiel des possibilités de l'outil de mesure d'audience de Google. Formation animée par les experts Google Analytics de Ranking Metrics.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
Consultez la description détaillée des produits ou services de Google suivants : Google Base
- Google Suggest
Cet outil vous permet d'obtenir une liste de 10 mots ou expressions suggérés par Google sur la base d'un mot que vous fournissez.
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités
