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 !!!!!!! -
Comment dois-je marquer le POSt en résolu ? Désolé je suis nouvelle ici
-
C'est bon pour la requête je me suis trompé. Je vous tiens au courant. MERCI encore de toute votre aide.
-
J'ai essayé la requête proposé par clem285 mais ca ne marche pas. Mysql me dit qu'il y a une erreur de syntaxe.
Moi en fait ce que j'ai comme vakleur dans ma base de données c'est ca :
Donc c'est ca que je voudrais changer par un 'oui' par exemple et la je pourrais mieux y arriver avec mes cases à cocher je pense. -
Et bien en fait là je suis en train d'essayer de refaire la mifration SQL et je voudrais juste savoir quel est le type dans mysql pour un booleen. Est ce que c'est bien TINYINT ???
MERCI -
Là je suis désolé mais j'avoue que je reste sec, je ne sais plus comment t'aider.... :s
-
moi j'ai un petit carré à cause de la migration sql et jsais pas d'où sort ce caractère! En tout cas il me pose problème. Quelqu'un serait comment modifier une migration sql.
Est ce que le type TINYINT est bien le type d'un booleen en mysql??? -
Quand je coche une case de ma checkbox s'affiche la valeur contenue dans l'attribut "valeur" de la balise HTML correspondante à la checkbox.
-
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) -
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. -
Quand vous cochez votre case dans votre formulaire qu'est ce qui s'affiche habituellement dans votre base de données si ce n'est pas les valeurs car moi j'ai des petits carrés et c'est pas top!
Quel caractère avez-vous? Moi j'aimerai bien mettre les valeurs de mes checkbox ms quel requête faut-il faire pour changer le caractères par la valeur. -
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 "      "; 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. -
Je pense que ca serait plus facile si je met les cases à cocher en VARCHAR et que je laisse Null par défaut non?
Ca changerai mon code. Pouvez vous m'aider et me dire ce que vous en pensez? -
J'ai modifier le code à l'endroit ou vous m'aviez dit qu'il y avait une erreur.
Donc ensuite j'ai refait un test et j'ai vu que quand je cochais les cases plusieurs erreurs apparaissaient plusieurs fois. En clair le code a un problème.
Si j'essai de mettre 1 au lieu de Null dans ma base de donnée croyez vous que ca pourrait fonctionner? -
OK, donc par défaut, la valeur est NULL... ça nous arrange pas ça :s. Juste avant de faire la requete, fais un echo de toutes les variables que tu vas insérer histoire de vérifier quelles sont les valeurs que tu transmets.
-
Normal qu'il te sorte une erreur quand tu veux modifier la taille de ce champs, ce n'est pas permis de le laisser vide...
Le VARCHAR correspond à quel champs tu dis ?
(PS : je ne sais pas si tu as vu, je n'aurais pas du mettre le message à cet endroit : j'avais fait une petite erreur dans la dernière solution que je t'avais proposée, il faut remplacer dans le foreach $infos par $_POST['infos'].) -
En fait quand je veux modifier les attributs de mon champ j'ai un attribut qui s'appelle défaut. Et dans cet attribut la valeur est : Null.
C'est ca dont vous parliez? -
ba j'ai voulu enlever le 1 qui est dans (taille/valeurs) mais il me pose une erreur comme quoi ce n'est pas un nombre si je ne veux rien mettre. De plus le type est VARCHAR quand je veux modifier des choses d'une case à cocher. Alors que sur la structure c'est bit(1).
Que dois-je faire? -
Non, il me semble que le fait qu'il soit marqué bit(1) signifie que ton champs est de type bit (un 0 ou un 1) et qu'il est de taille 1. Oui je sais c'est hyper-redondant comme info.
Si tu as une vision de ta table avec PhPMyAdmin ou tout autre gestionnaire de base de données avec une interface graphique, tu dois avoir un moyen de vérifier dans la structure de la base la valeur par défaut. -
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