Page 1 sur 2

PB valeur par défaut champ ENUM

Posté : 07 janv. 2006, 13:32
par - HXSS -
Bonjour à tous et bonne année ! :D en espérant que vous avez passé de bonnes fêtes

j'ai trouvé un script sur le ouebe pour un espace membre: formulaire (avec mise en place d'un cookie dont la durée est choisi par le membre), mot de passe oublié, modification des informations, suppression du compte

mais j'ai quelques interrogations...

Première chose il utilise une variable "gateau1" et je ne vois pas à quoi elle correspond exactement :?

Code : Tout sélectionner

#Action : C : création, M : modification #Par qui : M : accès par un membre, W : accès par le webmestre if (! isset($action)) Avorte(); if (! isset($mode)) $mode = "M"; if (! isset($page)) $page = 1; $page = AntiTag($page); $droits = 0; if ($action <> "C" || $mode == "W") { if (isset($gateau1)) CheckDroits($gateau1); if ($droits <= 0) Avorte(); } if ($mode == "W" && $droits <> 100) $mode = "M";
apparemment c'est pour un accès root, il s'en sert également pour placer un cookie ou le mettre à jour mais pourquoi "gateau1" ???

Ensuite pour l'adaptation de ce script j'ai rajouté les champs adresse cp ville pays etc... mais pour la date de naissance je sais pas trop comment faire pour la table sql
au début j'avais mis "naiss DATE NOT NULL"
dans la base il affichait 0000-00-00 (cad AAAA-MM-JJ) mais même en m'inscrivant en mettant une date de naissance dans le format qu'il veut il la retient pas : /
alors est-ce que je dois créer 3 champs de cette manière ou je fais fausse route ?
"jj INT(2) NOT NULL"
"mm INT(2) NOT NULL"
"aa INT(4) NOT NULL"

Pareil pour les centres d'intêret j'ai pensé à faire des champs
CI1 INT(1) NOT NULL default'0', ... , CI10 INT(1) NOT NULL default'0',
après dans le formulaire d'inscription si c'est pas coché valeur par défaut 0, si c'est coché valeur 1 dans la base de donnée... vous auriez fait pareil ?!

bon j'arrête là parce que sinon je vais en faire 3 pages...
merci à ceux qui voudront bien m'éclairer sur ces quelques points déjà
-¤smack¤-

Posté : 07 janv. 2006, 15:46
par Cyrano
Je soupçonne un truc: tes données provienne à priori d'un formulaire : où sont donc récupérées les valeurs du formulaire dans le bout de code que tu nous montres ? Nulle part;

Pour le problème de date, pas besoin de trois champs, il faut reformatter la date saisie pour la faire correspondre avec le format MySQL, avec un preg_replace, ça foncitonne très bien, exemple :
<?php
$date_jour = "07/01/2006";
$date_sql = preg_replace('#(\d{2})/(\d{2})/(\d{4})#', "$3-$2-$1", $date_jour);
echo("<p>". $date_sql ."</p>");
?>
Va afficher :
2006-01-07
Enfin, pour le champs avec comme valeur possible 0 ou 1, un type INT est un tantinet exagéré : un type ENUM('0', '1') ou encore ENUM('oui', 'non') DEFAULT 'non' suffirait largement et serait beaucoup plus adapté.

Posté : 08 janv. 2006, 14:50
par - HXSS -
Oui autant pour moi j'étais parti sur la variable gateau1 et j'ai enchainé avec les autres soucis que j'ai où le bout de code n'a rien à voir :(

Bon en fait je pensais que j'avais réussi à l'adapter un peu mais en fait non.
Enfin ça marche mais à la base lors de la création des tables il créé aussi un compte root avec l'email du webmaster les droits ect.. et quand je rajoute juste une table de plus "adresse1" ça marche mais il ne créé plus le compte root je sais pas pourquoi ..
vaut-il mieux partir de rien comme sur cette adresse http://www.lephpfacile.com/howto/index.php?p=10 ou partir d'un script qu'on comprend qu'à moitié voire moins ?
:?

dans les deux cas jsuis dans la mouise les deux pieds dedans

Posté : 08 janv. 2006, 14:54
par iclo
Il vaut mieux partir de rien alors, pour pouvoir modifier un script et le maintenir par après, il est nécessaire d'en avoir une très bonne compréhension.

Posté : 08 janv. 2006, 15:08
par - HXSS -
Je pense bien mais quand je vois la complexité du script que j'ai sous les yeux c'est pas dans le courant de l'année que mon site sera disponible mais dans une décennie :(

Posté : 10 janv. 2006, 09:15
par Laap
Commence par créer un espace membre, avec le strict minimum, et ensuite tu amélioreras ton script. C'est le meilleur moyen de travailler proprement, plutôt que de reprendre un gros script qui ne correspondra jamais vraiment à ton réel besoin.

Posté : 10 janv. 2006, 13:16
par iclo
Un espace membre basique n'est vraiment pas quelque chose de compliqué:
Une page login qui après vérification d'un couple login/password crée les variables de sessions idoines.
Une page à inclure dans les pages à controler qui vérifiera si les variables de sessions existes et sont correctes et dans le cas contraire redirigera vers la page d'authentification.
Le tout ne doit pas faire plus de 20 lignes de code.. ;)

Posté : 11 janv. 2006, 00:08
par - HXSS -
Bon j'ai décidé de partir de "presque" rien j'ai repris les bases du phpfacile (y'a quand même le plus gros du travail !!)
résultat: il m'a fallut deux jours pour l'adapter afin de changer l'alerte "au moins un des champs est vide" en tel ou tel champ est vide

en même temps il m'a fallu 1 journée pour me rendre compte que j'avais oublié une parenthèse :?
par contre il vaut mieux créer une variable au tout début du genre

Code : Tout sélectionner

$login = $_POST['login']
et ensuite réutiliser juste $login ? jme demande ça juste pour l'optimisation.. rapidité des traitements etc : /

Posté : 24 janv. 2006, 00:22
par - HXSS -
Jour le peuple : x
je reposte sur ce sujet vu qu'on parlait déjà des champs ENUM ...
j'ai un petit soucis avec la valeur par défaut sur mon champ confirm
confirm enum('attente','valide') NOT NULL default 'attente',
pour l'enregistrement je laisse juste des guillemets sur mon script php pour prendre en compte la valeur par defaut sauf que là.. quand je m'enregistre je m'apperçois qu'il reste vide : /

Code : Tout sélectionner

$sql = 'INSERT INTO membre VALUES("", "'.$login.'", "'.md5($pass).'", "")';
c'est peut être le enum qui merdouille ? c'est pas le plus adapté ? : [

Posté : 24 janv. 2006, 00:30
par Truc
essaie avec une requete du type:
$sql = 'INSERT INTO membre (champ_login,champ_passe) VALUES( "'.$login.'", "'.md5($pass).'")'; 

Posté : 24 janv. 2006, 00:40
par - HXSS -
Non toujours vide : (

pourtant quand je regarde la structure de ma table j'ai bien la valeur par défaut "attente" je comprends pas : /

Posté : 24 janv. 2006, 00:53
par Truc
je comprends pas : /
moi non plus :lol:
peux tu montrer la structure et la requete que tu utilise ?

Posté : 24 janv. 2006, 01:29
par - HXSS -
la structure de ma table légèrement réduite ...
CREATE TABLE membre(
id INT NOT NULL auto_increment,
login CHAR(15) NOT NULL,
pass_md5 TEXT NOT NULL,
confirm ENUM('attente', 'valide') NOT NULL DEFAULT 'attente',
PRIMARY KEY(id)
);
et ma requete légèrement réduite ...

Code : Tout sélectionner

$sql = 'INSERT INTO membre (id, login, pass_md5, confirm) VALUES("", "'.$login.'", "'.md5($pass).'", "")';

Posté : 24 janv. 2006, 01:35
par - HXSS -
j'ai essayé avec SET pour voir et rien non plus : (

Posté : 24 janv. 2006, 01:39
par Truc
le "SET" n'a rien à voir, c'est un mot reservé pour les requetes de mise à jour. :wink:

mais je remarque surtout que tu précise le champ "confirm" dans la requete, tu peux donc l'enlever ainsi que l'id:
$sql = 'INSERT INTO membre (login, pass_md5) VALUES("'.$login.'", "'.md5($pass).'")';