Valeur par défaut dans une bdd

Fermé
Mr.White Messages postés 251 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 17 juillet 2012 - 16 juil. 2003 à 10:35
Mr.White Messages postés 251 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 17 juillet 2012 - 17 juil. 2003 à 16:45
Salut tout le monde !!!

Jusqu'à présent j'avais mis certaine valeur de ma basse de donne part défaut, comme ceci lorsque je cré un enregistrement certain champ ne son pas à renseigné. J'utilise mysql et je code en php.

Mais seulement, maintenant, et je ne sais pourquoi, ca ne fonctionne plus. Lorsque je rentre mes donné avec mon formulaire, il mets zero dans les champ où je n'est rien mis et je ne comprend pas pourquoi. J'ai sans dout changé des chosesmias les qu'elles ???

Mais même la requête que j'envoy à la bdd est bonné donc tout devrai normalemment bien ce passé, mais non, tout ce passe mal!!!

Si vous avez des idées sur ce problème ...

8 réponses

Faudrait un peu plus d'infos pour te répondre ^^

Modèle de la table ou tu essais d'insérer tes données et quelle est ta requette sql ainsi que le message d'erreur que tu as.

Après se sera plus facile de répondre à ton soucis ^^
0
Mr.White Messages postés 251 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 17 juillet 2012 53
17 juil. 2003 à 10:49
Voici la structure de la table en question :

Champ Type Null Défaut
num_projet int(4) Non
nom_projet varchar(32) Non
num_client int(4) Non 0
actif int(1) Oui 1


Index : Nom de la clé Type Cardinalité Champ
PRIMARY PRIMARY 54 num_projet
nom_projet UNIQUE 54 nom_projet




La requête est contruite par un algorithme. Le programe donne ceci :

$requette_insert = "insert into $nom_table values('".$id_table."'";


for($i=1;$i<$nb_colonnes;$i++)
{


$nom='nom'.$i; // Les variable renvoyé par un form on des nom de ce genre : nom0, nom1, nom2,...
$valeur_nom =$_GET[$nom]; // on récupère le contenu de ces variables.
$requette_insert=$requette_insert.",'".( ($nom_table=='dt' && $nom==nom4) ? $num_projet : $valeur_nom )."'";
echo $nom.': '.$valeur_nom.'<br>';

}
$requette_insert=$requette_insert.')';


Et je n'ai pas de message d'erreur. Je pense en faite que c'est plutôt un problème au niveau du formulaire qui met '0' dans les champ nom renseigné. De ce faite, pour l'instant je renseign moi même ce champ avec la valeur que JE souhaite et l'utilisateur ne vois pas apparaitre ce champ.


Vous me demanderai peut-être pourquoi le form envoye des variable avec ce genre de nom, et bien c'est parceque j'ai certaine table comportant des nom de champ composé qui ne passe pas par un form.

Si vous avez besoin d'enore plus d'explication, je me ferai une joie de vous répondre, mais comme mon problème est à moitié résolut je ne vous en voudrez pas de ne pas me répondre. ;o)
0
bon bon ... je suis pas expert en bdd mais selon les infos que tu donnes. Tu ne peux pas avoir un champ dans ta table de type "int" avec comme propriété "not null" sans avoir de valeur par defaut.
Si tu la renseignes pas, le bdd mettra '0' par defaut puisque le null est refusé.

En ce qui concerne ta requette ya un truc qui me choque un ptit peu.( peut être que je me trompe ^^ )

ta requette commence toujours par "insert into $nom_table values('id_table'" ensuite tu rajoutes à la requete dans ta boucle for suivant une condition soit avec 'num_projet' ou 'valeur_nom'
Donc au premier passage dans ta boucle ta requete ressemble à un truc du genre : insert into $nom_table values('id_table','valeur_nom1'
Pour le 2eme et 3eme passage ça se passe a priori pareil.
A la fin du 3eme passage, ça ressemble à : insert into $nom_table values('id_table','valeur_nom1'",'valeur_nom2', 'valeur_nom3'
Au 4ème ta confition est rempli et ta requette ressemble à : insert into $nom_table values('id_table','valeur_nom1'",'valeur_nom2', 'valeur_nom3','num_projet'
la je c pas trop si ta boucle s'arrete ou pas mais si tu testes nom4, le contenu de ta boucle est exécutée au moins 4 fois.
4 fois plus le $id_table renseigné avant la boucle fait donc 5 champs pour une table en contenant 4.
Doit y avoir des erreurs sql de temp à autres non ? ^^



Sinon pour éviter de mettre des valeurs vide ou null dans ta requete :

je remplacerai
$valeur_nom =$_GET[$nom]; 


par quelquechose du genre :

if( isset($_GET[$nom]) ) { $valeur_nom =$_GET[$nom]; }
else { /* Je traite le cas */ }




J'espère t'avoir répondu ^^
Bon courage :)
0
Mr.White Messages postés 251 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 17 juillet 2012 53
17 juil. 2003 à 12:21
Pour ce qui est du not null, je dois avouher que je n'y faisais pas vraiment attention, je m'assuerais surtout qu'il y avait une valeur par défaut pour que quand je ne mette rien, et bien lui lette la valeur par défaut choisi.

Ensuite, pour ce qui est de ma boucle, je te ferai remarquer (le plus gentillement du monde) que le compteur commence non pas à 0 mais à un, donc l'id_table n'est pas pris en compte dans la boucle qui elle fait pile poil la bonne taille (et je n'est donc pas d'erreur sql, mais ce n'est peut-être que de la chance : j'en doute!)

Pour ta proposition de code, elle est interressant mais je pense qu'il vaut mieux faire ce test au niveau du form comme ceci l'utilisateur sera averti de sa mauvaise saisi et pourra sur le champ corriger son erreur mais je ne sais pas trop si c'est possible de faire se genre de test au moment de la validation d'un formulaire (il faut dire que je n'est pas encore beaucoup oeuvré dans ce sens).

PS: Ca fait plaisir de voir des gens qui aide vraiment et qui s'interresse. (en ce moment les 2/3 de mes message sont presque ignorai, mais on popurrai peut-être me faire le même reproche)

DONC MERCI !!!!!!!!!
0

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

Posez votre question
Pour ce qui est de la boucle si $i valait 0 au démarrage de ta boucle cela ferait un élément de plus :)
Enfin bref le principal c'est que toi tu t'y retrouves :)

Pour ce qui est de controler les saisis du formulaire, perso je connais pas énormément de soluces.

Pour ma part le mieux que j'ai trouvé :
Mon premier test je le fais au niveau du form ( en javascript ) soit via l'évent onSubmit dans le <Form .. onSubmit="return controle();">
soit via le bouton de validation "submit" ce qui donne <INPUT type=submit ... onClick="return controle();">

la fonction controle()
return true ou false selon les conditions, peut afficher un message etc...

Maintenant cette soluce fonctione que si ton javascript est executé et malheuresement c'est pas toujours le cas. Très souvent la version du navigateur pose des soucis sans compter la désactivation du javascript possible par l'utlisateur.

En deuxième, je controle en php comme l'exemple que je t'ai donné qui lui est toujours traité quelquesoit la config client. donc plus sure.

Pour ce qui est des réponses aux messages, la première étape est déjà d'avoir un texte lisible et clair et de donner tous les éléments necessaires.
Le problème sont de base pas toujours simple, si en plus il faut déchiffrer le texte car mal écris, normal que beaucoup soit découragés ^^
Améliore ton texte pour qu'il soit plus lisible et je suis sure que beaucoup se feront un plaisir de te répondre ^^ Enfin c'est juste un conseil amical :)

bon courage :)
0
Mr.White Messages postés 251 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 17 juillet 2012 53
17 juil. 2003 à 13:54
Je te remerci pour tout ces conseils, je m'emploirai donc à les apliquer de mon mieux.

Pour ce qui est du test en php. Ce test ne peut avoir lieu qu'aprés la validation du formulaire (corrige moi si je me trompe). Il faut donc, je pense, boucler sur la même page en testant si le formulaire est valide avec une variable.

Mais je ne sais pas vraiment comment m'y prendre.



Mais de toute facon je ne vais pas me pencher tout de suite sur ce sujet et je pense qu'en me prennant un peu la tête je sorrai m'en sortire tout seul.

Je laisse donc ce message en suspen, d'autant plus que le problème initiale n'était point celui du form.
0
Bien évidement ton test php tu le fais après la validation puisque c'est la validation de ton formalaire qui va envoyé les informations à ton serveur.
Dans ton cas la validation du formulaire va renseigner $_POST.
A toi de faire les controle necessaire sur $_POST et de traiter les différents cas.

Pour en revenir à ton soucis initial, il faut que tu choisisses entre avoir des champs non null dans ce cas une valeur par défaut est necessaire ou sinon tu acceptes la valeur null dans certains champs et dans ce dernier cas, il n'y aurra pas de valeur par défaut tel que '0'

voila voila :)
0
Mr.White Messages postés 251 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 17 juillet 2012 53
17 juil. 2003 à 16:45
En faite, pour ce qui est de la valeur par défaut je suis un peu coincé.

Généralement je passe par des formulaires avant de faire un requête d'insertion et donc si l'utilisateur ne renseigne pas un champ, le formulaire le remplis apparemment de rien et donc lors de la requette ca ne va pas.
Enfin, je ne sais pas exactement comment ca se passe mais le résultat est que la valeur par défaut de la bdd ne me sert à rien.


Ce qui relance le sujet des test pour les forms mais je préfère attendre un peu avant de le relancer car en ce moment je suis dans autres choses.


Alors A+++

PS: je relancerai un de ces quatre cette discution.
0