Index unique et insertion

karpediem Messages postés 49 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 22 septembre 2014 - 2 janv. 2009 à 03:45
karpediem Messages postés 49 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 22 septembre 2014 - 3 janv. 2009 à 17:20
Bonjour à toutezéatous,

Tout d'abord, je vous souhaite une très belle année à tous avec du succès dans tous vos projets tant professionnels que personnels.

Maintenant, je vais vous soumettre une question que je me pose...

J'ai une table de mes utilisateurs avec les champs suivants :
- id_user => auto_increment
- login => j'ai défini dans phpadmin cette valeur comme étant unique
- mot_de_passe

- email => j'ai défini dans phpadmin cette valeur comme étant unique aussi
- autres informations

Avant de faire l'insertion, je vérifie si le email existe et aussi si
le login existe => si mes 2 requêtes me renvoient 0 réponses c'est
que je peux faire l'insertion...

Je me pose la question si ces contrôles sont bien nécessaires... Est-ce que si je teste uniquement le résultat de l'insertion ça ne suffit pas à savoir si oui ou non ces valeurs sont uniques. C'est-à-dire, si le INSERT échoue c'est que le login et/ou le mail existent déjà quelque part dans la table ?

Il peut bien-sûr y avoir d'autres raisons qui fassent échouer le INSERT, mais pour l'instant ces 2 là me semble être les plus importantes.

J'ai d'ailleurs la même question concernant le UPDATE...

Qu'en pensez-vous ?

A bientôt

5 réponses

kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
2 janv. 2009 à 10:34
Salut,

Non, ça ne sert à rien que tu testes leurs présences, fais l'INSERT directement et teste, si elle existe, l'erreur retournée (avec mysql_errno)
Si elle est égal à 1062 (vérifie quand même que je ne me trompes pas) c'est que l'une des deux valeurs existe déjà (tu peux également savoir de laquelle il s'agit).
S'il s'agit d'une autre erreur tu gères comme d'hab.

Cordialement,

Kohntark-
0
karpediem Messages postés 49 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 22 septembre 2014
2 janv. 2009 à 16:40
T'es trop fort !!!

C'est exactement ça ! ça fonctionne SUPER bien !! C'est bien le 1062... MERCI bcp pour cette réponse...

Et puisque je t'ai sous la main je vais abuser un peu ;o))

Je m'embrouille un peu avec toutes les conversions de données à faire avant l'insertion ou la récupération de données dans les bases MySQL...

Alors, je me disais que pour faire simple, je pouvais définir toutes mes tables en <dfn title= "Unicode (multilingue), Binaire">utf8_bin</dfn> plutôt qu'en <dfn title="suédois, insensible à la casse">latin1_swedish_ci</dfn>   puis dans mes définitions de page je définie ma balise
<meta http-equiv ="Content-Type" content="text/html; charset=utf-8" />
Et comme ça, tous les champs de mes formulaires seront au bon format et à l'insertion je n'aurai pas besoin de faire des htmlspecialchars, nbl2r, et toutes ces choses là qui me semblent assez abscons... D'autant que si on les met à l'insertion, il faut les supprimer pour les afficher correctement, alors que si ma page html et ma base mysql ont le même "décodeur_langage_interpréteur", ils doivent se comprendre non ? (là aussi c'est intuitif ;o))

Pour l'instant ce que je fais c'est qu'avant d'insérer dans mysql une donnée issue d'un formulaire, je mets du trim(addslashes($_POST['saisie'])) et au moment de l'afficher, je fais du stripslashes('donnée_mysql').

Penses-tu que ce soit suffisant ? Est-ce que ça me dispense de tester si les magic-quotes-gpc sont à on ou à off ?

,<dfn title="suédois, insensible à la casse">

</dfn>
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
2 janv. 2009 à 18:38
Re,

Alors, je me disais que pour faire simple, je pouvais définir toutes mes tables en <dfn title= "Unicode (multilingue), Binaire">utf8_bin</dfn> plutôt qu'en <dfn title="suédois, insensible à la casse">latin1_swedish_ci</dfn>  puis dans mes définitions de page je définie ma balise [...]
=> effectivement, c'est une bonne idée, mais ça ne t'empêchera pas de rencontrer, selon les circonstances, des pbs. C'est une véritable galère l'encodage, vivement que seul l'utf8 survive.

[...]ils doivent se comprendre non ?
= > ça ne te dispensera pas de faire du traitement sur les données insérées. htmlspecialchars, nbl2r, etc ... n'ont rien à voir avec l'encodage.

si on les met à l'insertion, il faut les supprimer pour les afficher correctement
=> tu as une config incorrecte (magic_quotes ?), dans la majorité des cas il n'y a pas à faire de traitement des données issues d'une base

trim(addslashes($_POST['saisie']))
= > ok pour le trim, c'est tout
$saisie = trim($_POST['saisie']);
$saisie = strip_tags($saisie); // à voir selon ce que tu souhaites faire
$saisie = mysql_real_escape_string($saisie);
[insertion en DB]
(j'ai décompé mais ça peut être regroupé)

stripslashes('donnée_mysql')
=> pas besoin en principe. Ce que tu me décris ressemble bien à un magic_quotes activé => le mettre toujours à off, d'autant plus qu'il ne va plus exister d'ici un futur très proche.

Cordialement,

Kohntark -
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
2 janv. 2009 à 18:41
Et puis :
T'es trop fort !!!

Je sais, je me le dis chaque jour !!!
Non, franchement, je ne fais que me débrouiller un peu, mais ça ne va pas chercher loin.

Kohntark -
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
karpediem Messages postés 49 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 22 septembre 2014
3 janv. 2009 à 17:20
Je te trouve un peu trop modeste !!!

C'est moi qui bidouille un peu, toi tu joues dans la cours des grands !

Moi c'est en cuisine que je joue dans la cours des grands (mais peut-être que toi aussi ;o))) malheureusement ça ne m'est d'aucune utilité pour développer mon appli ;o))

Quant à tes réponses, encore une fois, elles sont pile-poil ce qu'il me fallait ! Je comprends un peu mieux la justification de ces encodages étranges...

Encore un grand MERCI !!!
0
Rejoignez-nous