Erreur case à cocher en php-mysql
Résoluje fais actuellement un formulaire en php-mysql.
J'ai un problème au niveau de mes case à cocher c'est-à-dire lorsque je clique sur enregistrer (envoi des données à la base de données) une erreur s'affiche telle que :
Notice: Undefined variable: contrat in C:\Documents and Settings\Administrateur\Mes documents\site essai\traitement.php on line 93
Cette erreur s'affiche pour mes cinq cases à cocher donc en espèrant que vous puissiez m'aider je vous laisse une partie de mon code.
Code du formulaire :
<html><head></head><body>
<form method="post" action="traitement.php">
<input type="checkbox" name="NC" value="Non-Conformité">Non-Conformité
<input type="checkbox" name="HM" value="Hors maintenance">Hors Maintenance
<input type="checkbox" name="Comptabilisé" value="Comptabilisé">Comptabilisé
<input type="checkbox" name="Facturé" value="Facturé">Facturé
</form>
</body></html>
Code du traitement.php :
<?php
if (isset($_POST['Contrat']))
{
$contrat=$_POST['Contrat'];
}
if (isset($_POST['NC']))
{
$nc=$_POST['NC'];
}
if (isset($_POST['HM']))
{
$hm=$_POST['HM'];
}
if (isset($_POST['Comptabilisé']))
{
$comptabilise=$_POST['Comptabilisé'];
}
if (isset($_POST['Facturé']))
{
$facture=$_POST['Facturé'];
}
$servername='localhost';
$username='root';
$password='';
$connexion=mysql_connect($servername,$username,$password) or die('Erreur de connexion '.mysql_error());
mysql_select_db("ficheintervention", $connexion) or die('Erreur de selection '.mysql_error());
$sql5= "insert into intervention values ('', '".$contrat."', '".$nc."', '".$hm."', '".$comptabilise."', '".$facture."')";
$res5=mysql_query($sql5) or die ('Exécution de la requête impossible sql5 :'.mysql_error());
mysql_close();
}
?>
Merci d'avance pour votre aide.
Configuration: Windows XP Internet Explorer 7.0
38 réponses
Le problème central est l'erreur Notice: Undefined variable: contrat lors de l’enregistrement, due à une incohérence entre les noms des cases à cocher et ceux récupérés dans le script traitement.php. Le formulaire ne définit pas Contrat et les valeurs proviennent de NC, HM, Comptabilisé et Facturé, alors le traitement lit $_POST['Contrat'] et d'autres indices lorsque les cases ne sont pas cochées. En pratique, les cases non cochées n'envoient aucune valeur, ce qui initialise mal les variables et peut produire l'erreur; la solution consiste à aligner les noms et à initialiser chaque variable via isset. D'autres recommandations suggèrent d’utiliser des valeurs 0/1 et d’adapter le type de colonne, puis de tester sur une copie de la base avant toute modification.
-
La modification de type et de valeur de champ s'est effectué correctement.
J'ai donc adapté mon code pour les cases à cocher et tout fonctionne à merveille :
if (isset($_POST['contrat']) == 'contrat') {
$contrat='oui';
} else {
$contrat='';
}
if (isset($_POST['nc']) == 'non-conformite') {
$nc='oui';
} else {
$nc='';
}
if (isset($_POST['hm']) == 'hors maintenance') {
$hm='oui';
} else {
$hm='';
}
if (isset($_POST['comptabilise']) == 'comptabilise') {
$comptabilise='oui';
} else {
$comptabilise='';
}
if (isset($_POST['facture']) == 'facture') {
$facture='oui';
} else {
$facture='';
}
MERCI A TOUS !!!!!!! -
Il n'y a pas une personne qui pourrait m'aider svp.
Ce que je dois faire fait parti du projet pour mon stage. -
Non, ta variable Contrat n'est simplement pas initialisée parce que ton formulaire ne transmet aucune variable dont le nom est "Contrat". Je m'explique. Ton formulaire a quatre boutons : "NC", "HM", "Comptabilisé" et "Facturé". La valeur de chacun de ces boutons sera stockée dans $_POST['nom_de_ta_variable'] lors de la validation du formulaire par l'utilisateur. Le truc, c'est que comme tu n'as aucun champs dans ton formulaire que tu as appelé "Contrat", le champs $_POST['Contrat'] est vide et par conséquent, ta variable $contrat est vide aussi.
Au passage, il vaut mieux éviter en effet de nommer des variables avec des caractères spéciaux (é, è, à etc...) et, en général, on te dira que c'est plus "propre" de commencer le nom de tes variables par une lettre minuscule. -
Tout d'abord je tiens à vous remercier de votre aide.
Ensuite j'ai oublié d'indiquer dans mon code formulaire de mon premier Post que j'avais déclaré ma case à coher "Contrat".
Ayant enlevée les majuscules et les accents j'avais toujours le même problème.
Ensuite, en réfléchissant bien, je me suis dit (gràce au post de "Sri Lumpa") que j'avais assigné une valeur à ma variable que si elle était cochée et qu'il fallait donc que je lui assigne Null si ma case n'était pas cochée.
Après avoir fait cette modification mes erreurs obtenues précédemment ont disparus.
Mais malheureusement une autre erreur est apparue à la place et là j'avoue ne pas savoir pourquoi.
La voici :
Exécution de la requête impossible sql5 :Erreur de syntaxe près de '"', '09:51', '10:00', '.Contrat.', '.Non-Conformité.', '.Hors m' à la ligne 2
Pour que vous puissiez m'aider sur ce point je vous donne ma requête sql correspondante :
$sql5= "insert into intervention values ('', STR_TO_DATE('".$DateOuverture."', '%d/%m/%y'), STR_TO_DATE('".$DateCloture."', '%d/%m/%y'),
'".$TypeIntervention."','".$materiel."', '".$Tempsintervention."','".$observation."', '".$HeureOuverture."', '".$HeureCloture."',
'.$contrat.', '.$nc.', '.$hm.', '.$comptabilise.', '.$facture.', '".$operateur2."', '".$operateur3."', '".$operateur4."',
STR_TO_DATE('".$DateOuverture1."', '%d/%m/%y'), STR_TO_DATE('".$DateOuverture2."', '%d/%m/%y'), STR_TO_DATE('".$DateOuverture3."', '%d/%m/%y'),
STR_TO_DATE('".$DateOuverture4."', '%d/%m/%y'), '".$HeureOuverture1."', '".$HeureOuverture2."', '".$HeureOuverture3."','".$HeureOuverture4."',
STR_TO_DATE('".$DateCloture1."', '%d/%m/%y'), STR_TO_DATE('".$DateCloture2."', '%d/%m/%y'), STR_TO_DATE('".$DateCloture3."', '%d/%m/%y'),
STR_TO_DATE('".$DateCloture4."', '%d/%m/%y'), '".$HeureCloture1."', '".$HeureCloture2."', '".$HeureCloture3."','".$HeureCloture4."',
'".$Tpsintervention1."', '".$Tpsintervention2."', '".$Tpsintervention3."', '".$Tpsintervention4."', '".$res3."', '".$res4."')";
$res5=mysql_query($sql5) or die ('Exécution de la requête impossible sql5 :'.mysql_error());
Les autres champs que vous voyez fonctionnent normalement.
Merci d'avance de votre précieuse aide. -
Une autre chose à signaler!
En fait la base de données que j'ai pour ce formulaire a été créer à la suite d'une migration sql.
Cette base de donnée était avant cela sous access.
Je viens de remarquer que le type des champs correspondant aux cases à cocher était "bit(1)". Peut-être est-ce cela qui pose problème à mon insertion de données du formulaire dans la base de données?
Qu'en pensez vous?
De plus si c'est ca qui pose problème comment vais-je faire pour ne pas perdre les données avec ce type que j'ai déjà insérées ( en grande quantité).
Merci de votre aide. -
C'est peut-être ça le problème (le fait que le type de champs soit bit(1)). Cela signifie que tu ne peux mettre dans ces champs que 0/false ou 1/true (enfin si je ne me trompe pas).
Maintenant, à la vue du message d'erreur que tu obtiens, ça devrait résoudre ton problème. En effet, la requête essaye (apparemment) d'insérer dans un champs du type bit(1) les valeurs ".Contrat.", ".Non-Conformité.", etc... au lieu de 0 ou de 1... Tu dois toujours avoir un problème d'initialisation quelque part. -
Ok j'ai bien essayer avec 0(false) et 1(true).
Le point positif c'est que je n'ai plus d'erreur.
Le point négatif c'est que même si je ne coche pas les cases il me les met toutes à 1(true) dans la base de données.
Aurais-tu une idée du problème?
Merci de ton aide.
Ou si par hasard quelqu'un à déjà eut ce problème j'accepte volontier son aide. -
En fait mon problème,je crois, c'est que je ne sais pas utiliser la fonction "isset".
Donc est-ce que quelqu'un pourrait me fournir de l'aide. -
La fonction isset() va vérifier que tes variables sont non-vides, alors je ne sais pas d'où peut venir le problème pour toi. tu peux peut-être affiner ton test comme ça...
if(isset($_POST['variable_1'])){ if($_POST['variable_1'] == 'valeur_variable_1'){ $var1 = 1 } else { $var1 = 0; } }
Avec valeur_variable_1 la valeur que tu as mis dans le champs value pour ta checkbox variable_1 (je sais pas si je suis tr_s clair, si c'est pas le cas dis-le moi)
Par exemple, si la personne remplissant ton formulaire coche la case Hors-Maintenance, la variable $_POST['HM'] prendra la valeur "Hors Maintenance" (ce que tu as défini dans le champs value). Si ta variable $_POST['HM'] vaut bien "Hors Maintenance", tu n'as plus qu'à initialiser ta variable $hm à 1.
Je pense que ça devrait régler ton problème, j'espère ne pas me tromper ^^ -
Merci de ton aide.
J'effectué pour mes cinq champs ce que tu m'as proposés. Malheureusement j'ai les mêmes qu'au tout début c'est-à-dire :
Notice: Undefined variable: contrat in C:\Documents and Settings\Administrateur\Mes documents\site essai\traitement.php on line 104
Notice: Undefined variable: nc in C:\Documents and Settings\Administrateur\Mes documents\site essai\traitement.php on line 104
Notice: Undefined variable: hm in C:\Documents and Settings\Administrateur\Mes documents\site essai\traitement.php on line 104
Notice: Undefined variable: comptabilise in C:\Documents and Settings\Administrateur\Mes documents\site essai\traitement.php on line 104
Notice: Undefined variable: facture in C:\Documents and Settings\Administrateur\Mes documents\site essai\traitement.php on line 104
Et ce qui est bizard c'est que l'enregistrement s'effectue comme même.
Je désespère vraiment la loool.
Merci d'avance à tous ceux qui peuvent m'aider. -
As-tu vérifié que les enregistrements dans ta base de données donnaient bien les bonnes valeurs ? Si on t'indique que tes variables ne sont pas initialisées mais que tes enregistrements passent quand même, honnêtement je comprends plus ^^...
La ligne 104 correspond à quoi dans ton code ? -
L'enregistrement passe mais assigne automatiquement vrai aux cases à cocher. C'est comme si il ne prenait pas en compte qu'elles ne soient pas cochées.
-
Une autre précision c'est que lorsque je remplis mon formulaire et que je coche les cases et bien au moment de les valider je n'ai pas d'erreurs. Mais si je ne les cochent pas alors là j'ai les erreurs.
-
Je crois que c'est le moment de s'arracher les cheveux lol hihi.
Car ce que je viens de dire précédemment s'annule, je viens de refaire le test et lorsque que je ne coche pas les cases j'ai les erreurs mais les bonnes valeurs dans la base de donnée. Lorsque je les cochent il y a aussi la bonne valeur dans la base de donnée.
A vrai dire je ne sais plus où donner de la tête. -
HELP! Plus personne pour m'aider à résoudre cette énigme qui me coince depuis quelques jours déjà?
-
Modifie peut-être ton formulaire comme ça :
<html><head></head><body> <form method="post" action="traitement.php"> <input type="checkbox" name="infos[]" value="Contrat">Contrat <input type="checkbox" name="infos[]" value="Non-Conformité">Non-Conformité <input type="checkbox" name="infos[]" value="Hors maintenance">Hors Maintenance <input type="checkbox" name="infos[]" value="Comptabilisé">Comptabilisé <input type="checkbox" name="infos[]" value="Facturé">Facturé </form> </body></html>
Comme ça tu stockeras les valeurs de tes cases à cocher dans un seul tableau et se sera plus simple à gérer... Puis pour initialiser tes valeurs, tu fais ainsi :$contrat = 0; $comptabilise = 0; $hm = 0; $nc = 0; $facture = 0; if(isset($_POST['infos'])){ foreach($infos as $info){ switch($infos){ case 'Contrat': $contrat = 1; break; case 'Non-Conformité': $nc = 1; break; case 'Hors maintenance': $hm = 1; break; case 'Comptabilisé': $comptabilise = 1; break; case 'Facturé': $facture = 1 break; } } }
Je sais pas si ça réglera entièrement le problème mais ça devrait aider... -
Bonjour,
Merci d'avoir pris du temps pour m'aider.
J'ai donc testé ce que vous m'aviez recommandé.
Malheureusement que je coche la case ou non il me l'inscrit coché dans la base de données. De plus quand je coche les cases une erreur s'affiche mais l'enregistrement passe comme même.
Voici l'erreur :
Notice: Undefined variable: infos in C:\Documents and Settings\Administrateur\Mes documents\site essai\traitement.php on line 19
Warning: Invalid argument supplied for foreach() in C:\Documents and Settings\Administrateur\Mes documents\site essai\traitement.php on line 19
La ligne 19 correspond à cette partie du code :
...
foreach($infos as $info){
...
Voilà et je me demandais si le deuxième $info sans s à la fin ne devait pas justement en avoir un.
Merci de votre aide précieuse. -
pour tes case à coché je fais sa moi :
if (isset($_POST['NC']) == 'valeur_de_NC')
{
$nc=1;
}
else
{
$nc=0;
} -
Merci clem285, j'ai effectué ce que tu ma proposé en adaptant mes variables.
Je n'ai aucunes erreurs. Les enregistrements passent que les cases soient cochées ou non.
Le souci c'est que même si je ne coche pas les cases il me les met cochées dans la base de données.
Je crois que je m'en sortirais jamais lol.
Croyez vous que le problème pourrait venir d'ailleurs?
Auriez-vous une idée ?-
regarde dans la base de donnée si la valeur par défaut n'est pas 1
le problème peut venir de là.
de plus ne serait-il pas plus simple de changer le type dans la base en le passant de bit à varchar ?
cela permettrait de pouvoir enregistrer les mots correspondant aux case à cocher ( plus simple pour refaire sortir les valeurs et pas besoin de passer par une variable intermédiaire du genre : si machin = 1 alors machin = youpi )
sinon vive les stages :p -
@clem285Le problème c'est que si elle se met à modifier la structure de la base, faut modifier tout ce qui l'utilise... Selon ce qu'elle fait, ça peut prendre plus de temps de tout réadapter que de corriger ça.
Par contre l'idée que la valeur par défaut du champs soit "1" est probablement la source du problème ^^.
-
-
Effectivement dans ma base de données mon type est à bit(1) donc je suppose qu'il met 1 par défaut. Ensuite le problème si je change le type c'est que comme j'ai déjà beaucoup de données dans ma base de données et que les cases à cocher ont déjà comme valeur un petit carré qui signifit coché il serait embêtant pour moi d'avoir des valeurs différentes. Enfin une sorte de coupure dans ma base de donnée, j'espère que je suis assez clair sinon dite le moi.
Donc j'aimerai savoir si je change le type en varchar, comme vous me le proposez, si j'aurais toujours les mêmes valeurs actuelles c'est-à-dire les petits carrés ou si j'aurais des 1 et 0.
Merci beaucoup ca m'avance sur le problème. Et oui vive les stages lol.
- 1
- 2