Erreur case à cocher en php-mysql

Résolu/Fermé
lauraM - 19 juin 2008 à 10:36
 lauraM - 25 juin 2008 à 18:04
Bonjour,
je 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.

38 réponses

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 !!!!!!!
3
clem285 Messages postés 280 Date d'inscription samedi 29 septembre 2007 Statut Membre Dernière intervention 22 octobre 2021 83
25 juin 2008 à 10:25
pour tes case à coché je fais sa moi :

if (isset($_POST['NC']) == 'valeur_de_NC')
{
$nc=1;
}
else
{
$nc=0;
}
1
Sri Lumpa Messages postés 177 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 1 juin 2010 69
25 juin 2008 à 12:04
Le problème comme j'ai dit plus haut c'est que si tu te mets à changer la structure de la base de données, ça signifie modifier tout ce qui peut y avoir accès, aussi bien en lecture qu'en écriture. Tu pourrais par exemple avoir des scripts d'insertion qui reposent sur le fait que justement la valeur par défaut est NULL et ça signifie devoir les recoder... De toute manière, ça ne changerait rien à ton problème, donc ce n'est pas la solution.

Quelles erreurs as-tu lorssque tu coches des cases ?

voici un bout de code que j'utilise avec des checkbox, peut-être tu verras mieux que moi où pourrais ce situer ton problème

if(is_dir($imagesDir)){
	if($dir = opendir($imagesDir)){
		echo "<form action=\"\" method=\"post\" /><fieldset>";
		echo "<legend>Liste des images disponibles</legend>";
		while($filename =readdir($dir)){
			// Création des checkbox... La valeur sera stockée dans $_POST['images']
			echo "<input type=\"checkbox\" name=\"images[]\" value=\"$filename\"/>";
		}
		echo "<input type=\"submit\" name=\"go\" value=\"Go!\" />";
		echo "&nbsp&nbsp&nbsp&nbsp&nbsp ";
		echo "<input type=\"submit\" name=\"kill\" value=\"Terminer le serveur\"/>";
		echo "</fieldset></form>";
		closedir($dir);
	} else {
		echo "Erreur lors de l'ouverture du répertoire $imagesDir";
	}
} else {
	echo "$imagesDir n'est pas un répertoir valide<br />";
}

// Si on a valider le formulaire....
if(isset($_POST['go'])){
	// Pour chaque image contenu dans $_POST['images']
	foreach($_POST['images'] as $image){
		// traitement ....
	}
}


Ce code marche sans problème pour moi. Je n'ai juste pas régler le cas ou aucune checkbox n'est cochée et il me met alors un warning mais n'entre de toute manière pas dans la boucle.
1
Et après lorsque j'ai modifier les valeurs présentes dans ma base de données et que j'ai attribué le type VARCHAR j'utilise cette structure (qui ne me donne aucunes erreurs et qui devrait fonctionner) :

if (isset($_POST['contrat']) == 'contrat') {
$contrat='';
} else {
$contrat=;
}
if (isset($_POST['nc']) == 'non-conformite') {
$nc=1;
} else {
$nc=0;
}
if (isset($_POST['hm']) == 'hors maintenance') {
$hm=1;
} else {
$hm=0;
}
if (isset($_POST['comptabilise']) == 'comptabilise') {
$comptabilise=1;
} else {
$comptabilise=0;
}
if (isset($_POST['facture']) == 'facture') {
$facture=1;
} else {
$facture=0;
}

Je remplace à la place du 1 la valeur Null et à la place du 0 la valeur de ma checkbox.
Qu'en pensez-vous? Le problème c'est ma requête pour modifier toutes les valeurs déjà existantes.
1

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

Posez votre question
clem285 Messages postés 280 Date d'inscription samedi 29 septembre 2007 Statut Membre Dernière intervention 22 octobre 2021 83
25 juin 2008 à 14:48
update nom_de_ta_table
set nom_du_champ1 = 'valeur de ta checkbox1'
where nom_du_champ1 = '1';
requete pour modifier les valeur (fais un essai sur une copie de ta table, c'est plus prudent)
1
Il n'y a pas une personne qui pourrait m'aider svp.
Ce que je dois faire fait parti du projet pour mon stage.
0
Andre13 Messages postés 28 Date d'inscription jeudi 6 septembre 2007 Statut Membre Dernière intervention 22 juillet 2010 2
20 juin 2008 à 19:33
Les valeurs name de tes formulaires ou case à coher je suppose(je 'ai jamais travaillé avec) ne doivent pas avoir d'accent, d'autant plus que tes variables $name sont sans accent, je suis moi aussi débutant et j'ai déjà eu ce soucis
0
Sri Lumpa Messages postés 177 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 1 juin 2010 69
21 juin 2008 à 10:01
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.
0
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.
0
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.
0
Sri Lumpa Messages postés 177 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 1 juin 2010 69
23 juin 2008 à 12:16
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.
0
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.
0
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.
0
Sri Lumpa Messages postés 177 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 1 juin 2010 69
23 juin 2008 à 16:19
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 ^^
0
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.
0
Sri Lumpa Messages postés 177 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 1 juin 2010 69
23 juin 2008 à 16:59
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 ?
0
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.
0
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.
0
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.
0
HELP! Plus personne pour m'aider à résoudre cette énigme qui me coince depuis quelques jours déjà?
0
Sri Lumpa Messages postés 177 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 1 juin 2010 69
25 juin 2008 à 07:29
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...
0