par
Sékiltoyai » 09 févr. 2008, 15:19
Au passage, il y a pire encore, c'est que ton shéma de table est très très mauvais.
Si jamais tu as champs identiques à stocker (email_1, email_2, email_3), on ne va pas créer les n champs dans ta table, sauf si tu veux pourrir ton serveur, on fait des tables annexes pour stocker ces données.
En l'occurence, ici, tu devrais avoir une table emails :
Code : Tout sélectionner
CREATE TABLE emails (
id_inscription INTEGER PRIMARY KEY,
email VARCHAR(90) UNIQUE NOT NULL
);
id_inscription étant l'identifiant du membre inscrit. Et tu devrais faire pareil pour tous les champs du même genre (les champs d'adresse, les champs telephone, les champs de site), pour ne garder que le strict nécessaire dans ta table inscription. De même, les champs jour mois année peuvent être regroupés dans un champ date, lequel peut être utilisé par les fonctions date/heure de mysql, et le champ de date d'inscription doit aussi être spécifié en datetime. Enfin, j'ai l'impression que tu vas stocker le mot de passe en clair dans ta base, c'est le meilleur moyen de te faire attaquer les comptes utilisateurs si jamais quelqu'un réussissait à récupérer ces mots de passe, donc règle absolue, on chiffre les mots de passe avant de les mettre en base, par exemple avec la fonction php md5() ou bien son équivalent sous MYSQL MD5(), et du coup, le champ est un char(32) :
Code : Tout sélectionner
CREATE TABLE `inscription` (
`identifiant` integer auto_increment NOT NULL,
`mot_de_passe` char(32) collate latin1_general_ci NOT NULL,
`pseudo_forum` varchar(20) collate latin1_general_ci NOT NULL,
`pseudo_chat` varchar(20) collate latin1_general_ci NOT NULL,
`pseudo_blog` varchar(20) collate latin1_general_ci NOT NULL,
`pseudo_article` varchar(20) collate latin1_general_ci NOT NULL,
`question_secrete` varchar(30) collate latin1_general_ci NOT NULL,
`reponse_secrete` varchar(30) collate latin1_general_ci NOT NULL,
`date_heure_inscription` datetime collate latin1_general_ci NOT NULL,
`civilite` varchar(4) collate latin1_general_ci NOT NULL,
`nom` varchar(20) collate latin1_general_ci NOT NULL,
`prenom` varchar(20) collate latin1_general_ci NOT NULL,
`date‘ datetime collate latin1_general_ci NOT NULL,
`loisir` longtext collate latin1_general_ci NOT NULL,
`langue` longtext collate latin1_general_ci NOT NULL,
`langage` longtext collate latin1_general_ci NOT NULL,
`ip` varchar(255) collate latin1_general_ci NOT NULL,
`identite` varchar(40) collate latin1_general_ci NOT NULL,
`statut` varchar(255) collate latin1_general_ci NOT NULL,
`code_membre` varchar(255) collate latin1_general_ci NOT NULL,
`code_compte` varchar(255) collate latin1_general_ci NOT NULL,
`etat` varchar(255) collate latin1_general_ci NOT NULL,
`fin_activation` varchar(10) collate latin1_general_ci NOT NULL,
PRIMARY KEY `identifiant` (`identifiant`),
UNIQUE KEY `identite` (`identite`),
UNIQUE KEY `pseudo_forum` (`pseudo_forum`),
UNIQUE KEY `pseudo_chat` (`pseudo_chat`),
UNIQUE KEY `pseudo_blog` (`pseudo_blog`),
UNIQUE KEY `pseudo_article` (`pseudo_article`)
);
J'oubliais : Il vaut mieux avoir un identifiant auto incrémenté, et surtout, il est très important de mettre des index sur les champs les plus utilisés dans ou les clauses WHERE ou ORDER, avec le mot clé INDEX
Au passage, il y a pire encore, c'est que ton shéma de table est très très mauvais.
Si jamais tu as champs identiques à stocker (email_1, email_2, email_3), on ne va pas créer les n champs dans ta table, sauf si tu veux pourrir ton serveur, on fait des tables annexes pour stocker ces données.
En l'occurence, ici, tu devrais avoir une table emails :
[code]CREATE TABLE emails (
id_inscription INTEGER PRIMARY KEY,
email VARCHAR(90) UNIQUE NOT NULL
);[/code]
id_inscription étant l'identifiant du membre inscrit. Et tu devrais faire pareil pour tous les champs du même genre (les champs d'adresse, les champs telephone, les champs de site), pour ne garder que le strict nécessaire dans ta table inscription. De même, les champs jour mois année peuvent être regroupés dans un champ date, lequel peut être utilisé par les fonctions date/heure de mysql, et le champ de date d'inscription doit aussi être spécifié en datetime. Enfin, j'ai l'impression que tu vas stocker le mot de passe en clair dans ta base, c'est le meilleur moyen de te faire attaquer les comptes utilisateurs si jamais quelqu'un réussissait à récupérer ces mots de passe, donc règle absolue, on chiffre les mots de passe avant de les mettre en base, par exemple avec la fonction php md5() ou bien son équivalent sous MYSQL MD5(), et du coup, le champ est un char(32) :
[code]CREATE TABLE `inscription` (
`identifiant` integer auto_increment NOT NULL,
`mot_de_passe` char(32) collate latin1_general_ci NOT NULL,
`pseudo_forum` varchar(20) collate latin1_general_ci NOT NULL,
`pseudo_chat` varchar(20) collate latin1_general_ci NOT NULL,
`pseudo_blog` varchar(20) collate latin1_general_ci NOT NULL,
`pseudo_article` varchar(20) collate latin1_general_ci NOT NULL,
`question_secrete` varchar(30) collate latin1_general_ci NOT NULL,
`reponse_secrete` varchar(30) collate latin1_general_ci NOT NULL,
`date_heure_inscription` datetime collate latin1_general_ci NOT NULL,
`civilite` varchar(4) collate latin1_general_ci NOT NULL,
`nom` varchar(20) collate latin1_general_ci NOT NULL,
`prenom` varchar(20) collate latin1_general_ci NOT NULL,
`date‘ datetime collate latin1_general_ci NOT NULL,
`loisir` longtext collate latin1_general_ci NOT NULL,
`langue` longtext collate latin1_general_ci NOT NULL,
`langage` longtext collate latin1_general_ci NOT NULL,
`ip` varchar(255) collate latin1_general_ci NOT NULL,
`identite` varchar(40) collate latin1_general_ci NOT NULL,
`statut` varchar(255) collate latin1_general_ci NOT NULL,
`code_membre` varchar(255) collate latin1_general_ci NOT NULL,
`code_compte` varchar(255) collate latin1_general_ci NOT NULL,
`etat` varchar(255) collate latin1_general_ci NOT NULL,
`fin_activation` varchar(10) collate latin1_general_ci NOT NULL,
PRIMARY KEY `identifiant` (`identifiant`),
UNIQUE KEY `identite` (`identite`),
UNIQUE KEY `pseudo_forum` (`pseudo_forum`),
UNIQUE KEY `pseudo_chat` (`pseudo_chat`),
UNIQUE KEY `pseudo_blog` (`pseudo_blog`),
UNIQUE KEY `pseudo_article` (`pseudo_article`)
);[/code]
J'oubliais : Il vaut mieux avoir un identifiant auto incrémenté, et surtout, il est très important de mettre des index sur les champs les plus utilisés dans ou les clauses WHERE ou ORDER, avec le mot clé INDEX