[PHP] Variables déclarées / Non déclarées ...
Résolu
digsaw_-
Messages postés
489
Date d'inscription
Statut
Membre
Dernière intervention
-
Gremy87 Messages postés 352 Date d'inscription Statut Membre Dernière intervention -
Gremy87 Messages postés 352 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis en train de faire un tableau de bord en PHP avec un énorme nombre d'INPUT à l'intérieur. Chaques lignes allant de 1 à 12, avec un INPUT de nom exemple : ligne_
cela fait : ligne_1 , ligne_2 , ligne_3 ... ligne_12.
Je récupère ces variables pour faire des calculs, mais lorsque je fait ceci, j'ai autant de messages d'erreur des INPUT de 1 à 12 qui s'affichent disant que les variables ne sont pas définies. Donc cela veux dire que je les écris mal ??? FAUX !!! Car j'arrive à faire un echo des variables et chaqunes ont une valeur... donc mes variables sont bien définies..
Je suis totalement perdu ! Ame sensible svp aidez moi !
Je suis en train de faire un tableau de bord en PHP avec un énorme nombre d'INPUT à l'intérieur. Chaques lignes allant de 1 à 12, avec un INPUT de nom exemple : ligne_
cela fait : ligne_1 , ligne_2 , ligne_3 ... ligne_12.
Je récupère ces variables pour faire des calculs, mais lorsque je fait ceci, j'ai autant de messages d'erreur des INPUT de 1 à 12 qui s'affichent disant que les variables ne sont pas définies. Donc cela veux dire que je les écris mal ??? FAUX !!! Car j'arrive à faire un echo des variables et chaqunes ont une valeur... donc mes variables sont bien définies..
Je suis totalement perdu ! Ame sensible svp aidez moi !
A voir également:
- [PHP] Variables déclarées / Non déclarées ...
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Retour a la ligne php - Forum Webmastering
- Alert php - Forum PHP
- Variable objet ou variable de bloc with non définie - Forum VB / VBA
15 réponses
Bonjour,
du code, du code, du code!! scande-t-il au milieu de la foule.
montre-nous comment tu déclares tes variables, comment tu remplis ton tableau, les "calculs que tu fait, la ou ca plante enfin tout quoi ^^
du code, du code, du code!! scande-t-il au milieu de la foule.
montre-nous comment tu déclares tes variables, comment tu remplis ton tableau, les "calculs que tu fait, la ou ca plante enfin tout quoi ^^
Encore toi ! ^^
Code :
Dans un formulaire : // Ecriture d'une ligne d'INPUT - $type_ligne[$l]."_".$m étant un tableau ne mémoire donc admettons 3 INPUT de nom : [0] = A-[1] = B - [2] = C
for ($m=1;$m<13;$m++)
{
echo "<td><INPUT size=6 name='".$type_ligne[$l]."_".$m."' value='".$row99["mois_".$m]."' ></td>\n";
}
//Vérification des variables moyennes => Si pas validé = NULL / Si validé = valeur de la variable
if (isset (${'moyenne2_'.$l})==true)
{
echo "<td><INPUT readonly name='moyenne2_".$l."' value='".${'moyenne2_'.$l}."' size=6></td>";
}
else
{
echo "<td><INPUT readonly name='moyenne2_".$l."' value='NULL' size=6></td>";
}
Calcul :
$nbdiv=0;
for ($l=1;$l<13;$l++)
{
${'mois_'.$l} = $row99["mois_".$l];
${'nbrdir_'.$l} = $_POST["nbrdir_".$l];
${'nbrindir_'.$l} = $_POST["nbrindir_".$l];
${'nbrstruc_'.$l} = $_POST["nbrstruc_".$l];
${'moyenne2_'.$l} = ${'nbrdir_'.$l} + ${'nbrindir_'.$l} + ${'nbrstruc_'.$l};
for ($i=0;$i<sizeof($type_ligne[$i]."_".$l);$i++)
{
if (${'moyenne2_'.$l}>0)
{
$nbdiv++;
}
if ($type_ligne[$i]="nbrdir")
{
$moyenne2_4 = ($nbrdir_1 + $nbrdir_2 + $nbrdir_3 + $nbrdir_4 + $nbrdir_5 + $nbrdir_6 + $nbrdir_7 + $nbrdir_8 + $nbrdir_9 + $nbrdir_10 + $nbrdir_11 + $nbrdir_12) / $nbdiv;
}
if ($type_ligne[$i]="nbrindir")
{
${'moyenne2_5'} = ($nbrindir_1 + $nbrindir_2 + $nbrindir_3 + $nbrindir_4 + $nbrindir_5 + $nbrindir_6 + $nbrindir_7 + $nbrindir_8 + $nbrindir_9 + $nbrindir_10 + $nbrindir_11 + $nbrindir_12) / $nbdiv;
}
if ($type_ligne[$i]="nbrstruc")
{
${'moyenne2_6'} = ($nbrstruc_1 + $nbrstruc_2 + $nbrstruc_3 + $nbrstruc_4 + $nbrstruc_5 + $nbrstruc_6 + $nbrstruc_7 + $nbrstruc_8 + $nbrstruc_9 + $nbrstruc_10 + $nbrstruc_11 + $nbrstruc_12) / $nbdiv;
}
--
Digsaw
'Avoir une section fumer dans un restaurant, c'est comme avoir une section pisseur dans une piscine !'
Code :
Dans un formulaire : // Ecriture d'une ligne d'INPUT - $type_ligne[$l]."_".$m étant un tableau ne mémoire donc admettons 3 INPUT de nom : [0] = A-[1] = B - [2] = C
for ($m=1;$m<13;$m++)
{
echo "<td><INPUT size=6 name='".$type_ligne[$l]."_".$m."' value='".$row99["mois_".$m]."' ></td>\n";
}
//Vérification des variables moyennes => Si pas validé = NULL / Si validé = valeur de la variable
if (isset (${'moyenne2_'.$l})==true)
{
echo "<td><INPUT readonly name='moyenne2_".$l."' value='".${'moyenne2_'.$l}."' size=6></td>";
}
else
{
echo "<td><INPUT readonly name='moyenne2_".$l."' value='NULL' size=6></td>";
}
Calcul :
$nbdiv=0;
for ($l=1;$l<13;$l++)
{
${'mois_'.$l} = $row99["mois_".$l];
${'nbrdir_'.$l} = $_POST["nbrdir_".$l];
${'nbrindir_'.$l} = $_POST["nbrindir_".$l];
${'nbrstruc_'.$l} = $_POST["nbrstruc_".$l];
${'moyenne2_'.$l} = ${'nbrdir_'.$l} + ${'nbrindir_'.$l} + ${'nbrstruc_'.$l};
for ($i=0;$i<sizeof($type_ligne[$i]."_".$l);$i++)
{
if (${'moyenne2_'.$l}>0)
{
$nbdiv++;
}
if ($type_ligne[$i]="nbrdir")
{
$moyenne2_4 = ($nbrdir_1 + $nbrdir_2 + $nbrdir_3 + $nbrdir_4 + $nbrdir_5 + $nbrdir_6 + $nbrdir_7 + $nbrdir_8 + $nbrdir_9 + $nbrdir_10 + $nbrdir_11 + $nbrdir_12) / $nbdiv;
}
if ($type_ligne[$i]="nbrindir")
{
${'moyenne2_5'} = ($nbrindir_1 + $nbrindir_2 + $nbrindir_3 + $nbrindir_4 + $nbrindir_5 + $nbrindir_6 + $nbrindir_7 + $nbrindir_8 + $nbrindir_9 + $nbrindir_10 + $nbrindir_11 + $nbrindir_12) / $nbdiv;
}
if ($type_ligne[$i]="nbrstruc")
{
${'moyenne2_6'} = ($nbrstruc_1 + $nbrstruc_2 + $nbrstruc_3 + $nbrstruc_4 + $nbrstruc_5 + $nbrstruc_6 + $nbrstruc_7 + $nbrstruc_8 + $nbrstruc_9 + $nbrstruc_10 + $nbrstruc_11 + $nbrstruc_12) / $nbdiv;
}
--
Digsaw
'Avoir une section fumer dans un restaurant, c'est comme avoir une section pisseur dans une piscine !'
et l'erreur arrive a quelle ligne? quelles variables il te dit qu'il ne connait pas?
lol et oui encore moi xD
lol et oui encore moi xD
Bah la je n'ai mis que 3 variables mais il y en a beaucoup plus.
C'est la :
if ($type_ligne[$i]="nbrstruc")
{
${'moyenne2_6'} = ($nbrstruc_1 + $nbrstruc_2 + $nbrstruc_3 + $nbrstruc_4 + $nbrstruc_5 + $nbrstruc_6 + $nbrstruc_7 + $nbrstruc_8 + $nbrstruc_9 + $nbrstruc_10 + $nbrstruc_11 + $nbrstruc_12) / $nbdiv;
}
bah il marque $nbrstruc_2 à 12 ( pas la 1 ) dont le svariables ne sont pas définies.
C'est la :
if ($type_ligne[$i]="nbrstruc")
{
${'moyenne2_6'} = ($nbrstruc_1 + $nbrstruc_2 + $nbrstruc_3 + $nbrstruc_4 + $nbrstruc_5 + $nbrstruc_6 + $nbrstruc_7 + $nbrstruc_8 + $nbrstruc_9 + $nbrstruc_10 + $nbrstruc_11 + $nbrstruc_12) / $nbdiv;
}
bah il marque $nbrstruc_2 à 12 ( pas la 1 ) dont le svariables ne sont pas définies.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
t'es sur que tes $_POST["nbrstruc_".$l] sont tous définis et remplis?
au debut de ta page fait un print_r($_POST); tu vera toutes les variables qui arrivent et surtout si il en manque ou pas
au debut de ta page fait un print_r($_POST); tu vera toutes les variables qui arrivent et surtout si il en manque ou pas
Bonjour
Je pense que l'accolade de fin de ton for ($l=1;$l<13;$l++) n'est pas au bon endroit.
Elle devrait être après ${'moyenne2_'.$l} = ...
Comme tu ne refermes pas ton for, seule laes variables avec _1 sont définies quand tu abordes tes autres boucles
De plus, es-tu bien sûr que tu voulais faire if ($type_ligne[$i]="nbrdir") ? ce ne serait pas plutôt == ?
Je pense que l'accolade de fin de ton for ($l=1;$l<13;$l++) n'est pas au bon endroit.
Elle devrait être après ${'moyenne2_'.$l} = ...
Comme tu ne refermes pas ton for, seule laes variables avec _1 sont définies quand tu abordes tes autres boucles
De plus, es-tu bien sûr que tu voulais faire if ($type_ligne[$i]="nbrdir") ? ce ne serait pas plutôt == ?
Je vien de faire le print_r($_POST) et je vien de vérifier et elles y sont bien toutes sans exeptions avec des valeurs...
effectivement je pense que le père à (une fois de plus) raison ^^
sans le double égale ton test sera toujours vrai (il me semble) car il test si l affectation s'est bien passée
et effectivement, ou est la fin de ta boucle for?
sans le double égale ton test sera toujours vrai (il me semble) car il test si l affectation s'est bien passée
et effectivement, ou est la fin de ta boucle for?
Oups j'ai oublier de la mettre sur ce code mais dans le mien la fin y est bien ( c'est qu'il y avait d'autre calculs je n'ai pas tout pri)
Alors c'est qu'elle n'est pas au bon endroit. Si elle était au bon endroit, tes variables seraient définies; si elle est trop loin, On a exactement l'erreur que tu décris.
S'il y a une accolade fermante entre
${'moyenne2_'.$l} = ${'nbrdir_'.$l} + ${'nbrindir_'.$l} + ${'nbrstruc_'.$l}; et
et
for ($i=0;$i<sizeof($type_ligne[$i]."_".$l);$i++)
alors ce n'est pas le for qu'elle referme, mais un autre bloc
S'il y a une accolade fermante entre
${'moyenne2_'.$l} = ${'nbrdir_'.$l} + ${'nbrindir_'.$l} + ${'nbrstruc_'.$l}; et
et
for ($i=0;$i<sizeof($type_ligne[$i]."_".$l);$i++)
alors ce n'est pas le for qu'elle referme, mais un autre bloc
Ben regarde du coup en vérifiant elel ferme bien ce bloc :
$nbdiv=0;
for ($l=1;$l<13;$l++)
{
${'mois_'.$l} = $row99["mois_".$l];
${'dcadres_'.$l} = $_POST["dcadres_".$l];
${'detam_'.$l} = $_POST["detam_".$l];
${'douvriers_'.$l} = $_POST["douvriers_".$l];
${'nbrdir_'.$l} = $_POST["nbrdir_".$l];
${'nbrindir_'.$l} = $_POST["nbrindir_".$l];
${'nbrstruc_'.$l} = $_POST["nbrstruc_".$l];
${'dnbrcdd_'.$l} = $_POST["dnbrcdd_".$l];
${'dnbrtmppar_'.$l} = $_POST["dnbrtmppar_".$l];
${'nbrapqua_'.$l} = $_POST["nbrapqua_".$l];
${'nbrdetache_'.$l} = $_POST["nbrdetache_".$l];
${'mallgdur_'.$l} = $_POST["mallgdur_".$l];
${'nbrcongema_'.$l} = $_POST["nbrcongema_".$l];
${'nbrpreanon_'.$l} = $_POST["nbrpreanon_".$l];
${'moyenne2_'.$l} = ${'detam_'.$l} + ${'douvriers_'.$l} + ${'dcadres_'.$l} + ${'nbrdir_'.$l} + ${'nbrindir_'.$l} + ${'nbrstruc_'.$l} + ${'dnbrcdd_'.$l} + ${'dnbrtmppar_'.$l} + ${'nbrapqua_'.$l} + ${'nbrdetache_'.$l} + ${'mallgdur_'.$l} + ${'nbrcongema_'.$l} + ${'nbrpreanon_'.$l};
for ($i=0;$i<sizeof($type_ligne[$i]."_".$l);$i++)
{
if (${'moyenne2_'.$l}>0)
{
$nbdiv++;
}
if ($type_ligne[$i]="dcadres")
{
${'moyenne2_1'} = ($dcadres_1 + $dcadres_2 + $dcadres_3 + $dcadres_4 + $dcadres_5 + $dcadres_6 + $dcadres_7 + $dcadres_8 + $dcadres_9 + $dcadres_10 + $dcadres_11 + $dcadres_12) / $nbdiv;
}
if ($type_ligne[$i]="detam")
{
${'moyenne2_2'} = ($detam_1 + $detam_2 + $detam_3 + $detam_4 + $detam_5 + $detam_6 + $detam_7 + $detam_8 + $detam_9 + $detam_10 + $detam_11 + $detam_12) / $nbdiv;
}
}
}
Digsaw
'Avoir une section fumer dans un restaurant, c'est comme avoir une section pisseur dans une piscine !'
$nbdiv=0;
for ($l=1;$l<13;$l++)
{
${'mois_'.$l} = $row99["mois_".$l];
${'dcadres_'.$l} = $_POST["dcadres_".$l];
${'detam_'.$l} = $_POST["detam_".$l];
${'douvriers_'.$l} = $_POST["douvriers_".$l];
${'nbrdir_'.$l} = $_POST["nbrdir_".$l];
${'nbrindir_'.$l} = $_POST["nbrindir_".$l];
${'nbrstruc_'.$l} = $_POST["nbrstruc_".$l];
${'dnbrcdd_'.$l} = $_POST["dnbrcdd_".$l];
${'dnbrtmppar_'.$l} = $_POST["dnbrtmppar_".$l];
${'nbrapqua_'.$l} = $_POST["nbrapqua_".$l];
${'nbrdetache_'.$l} = $_POST["nbrdetache_".$l];
${'mallgdur_'.$l} = $_POST["mallgdur_".$l];
${'nbrcongema_'.$l} = $_POST["nbrcongema_".$l];
${'nbrpreanon_'.$l} = $_POST["nbrpreanon_".$l];
${'moyenne2_'.$l} = ${'detam_'.$l} + ${'douvriers_'.$l} + ${'dcadres_'.$l} + ${'nbrdir_'.$l} + ${'nbrindir_'.$l} + ${'nbrstruc_'.$l} + ${'dnbrcdd_'.$l} + ${'dnbrtmppar_'.$l} + ${'nbrapqua_'.$l} + ${'nbrdetache_'.$l} + ${'mallgdur_'.$l} + ${'nbrcongema_'.$l} + ${'nbrpreanon_'.$l};
for ($i=0;$i<sizeof($type_ligne[$i]."_".$l);$i++)
{
if (${'moyenne2_'.$l}>0)
{
$nbdiv++;
}
if ($type_ligne[$i]="dcadres")
{
${'moyenne2_1'} = ($dcadres_1 + $dcadres_2 + $dcadres_3 + $dcadres_4 + $dcadres_5 + $dcadres_6 + $dcadres_7 + $dcadres_8 + $dcadres_9 + $dcadres_10 + $dcadres_11 + $dcadres_12) / $nbdiv;
}
if ($type_ligne[$i]="detam")
{
${'moyenne2_2'} = ($detam_1 + $detam_2 + $detam_3 + $detam_4 + $detam_5 + $detam_6 + $detam_7 + $detam_8 + $detam_9 + $detam_10 + $detam_11 + $detam_12) / $nbdiv;
}
}
}
Digsaw
'Avoir une section fumer dans un restaurant, c'est comme avoir une section pisseur dans une piscine !'
Tu confirmes ce que je dis depuis le début. Ton for ($l=1;$l<13;$l++) n'est pas refermé au bon endroit.
Il me semble (sans trop chercher à comprendre la logique de ton programme) qu'il devrait l'être entre
${'moyenne2_'.$l} = ${'nbrdir_'.$l} + ${'nbrindir_'.$l} + ${'nbrstruc_'.$l}; et
et
for ($i=0;$i<sizeof($type_ligne[$i]."_".$l);$i++)
Tu n'as pas tenu compte non plus de ma remarque sur le test d'égalité (== et non pas =)
Autre remarque : l'expression sizeof($type_ligne[$i]."_".$l) vaut toujours 1, car sizeof ne donne pas la taille d'une variable (le PHP n'est pas le C) mais le nombre d'éléments d'un tableau. or ce que tu lui donne à digérer est une simple chaîne, pas un tableau.
Il me semble (sans trop chercher à comprendre la logique de ton programme) qu'il devrait l'être entre
${'moyenne2_'.$l} = ${'nbrdir_'.$l} + ${'nbrindir_'.$l} + ${'nbrstruc_'.$l}; et
et
for ($i=0;$i<sizeof($type_ligne[$i]."_".$l);$i++)
Tu n'as pas tenu compte non plus de ma remarque sur le test d'égalité (== et non pas =)
Autre remarque : l'expression sizeof($type_ligne[$i]."_".$l) vaut toujours 1, car sizeof ne donne pas la taille d'une variable (le PHP n'est pas le C) mais le nombre d'éléments d'un tableau. or ce que tu lui donne à digérer est une simple chaîne, pas un tableau.
je suis pas sur d'avoir tout tout compris a ton prg mais il me semble que j'ai une solution.
je pense que tu devrais donc instancier toutes tes variables au debut et faire ton traitement apres et non pas faire tout d'un coup ce qui est impossible.
tu instancie toutes les variables que tu aura besoin et tu traite ensuite
je pense que tu devrais donc instancier toutes tes variables au debut et faire ton traitement apres et non pas faire tout d'un coup ce qui est impossible.
$nbdiv=0; for ($l=1;$l<13;$l++) { ${'mois_'.$l} = $row99["mois_".$l]; ${'dcadres_'.$l} = $_POST["dcadres_".$l]; ${'detam_'.$l} = $_POST["detam_".$l]; ${'douvriers_'.$l} = $_POST["douvriers_".$l]; ${'nbrdir_'.$l} = $_POST["nbrdir_".$l]; ${'nbrindir_'.$l} = $_POST["nbrindir_".$l]; ${'nbrstruc_'.$l} = $_POST["nbrstruc_".$l]; ${'dnbrcdd_'.$l} = $_POST["dnbrcdd_".$l]; ${'dnbrtmppar_'.$l} = $_POST["dnbrtmppar_".$l]; ${'nbrapqua_'.$l} = $_POST["nbrapqua_".$l]; ${'nbrdetache_'.$l} = $_POST["nbrdetache_".$l]; ${'mallgdur_'.$l} = $_POST["mallgdur_".$l]; ${'nbrcongema_'.$l} = $_POST["nbrcongema_".$l]; ${'nbrpreanon_'.$l} = $_POST["nbrpreanon_".$l]; ${'moyenne2_'.$l} = ${'detam_'.$l} + ${'douvriers_'.$l} + ${'dcadres_'.$l} + ${'nbrdir_'.$l} + ${'nbrindir_'.$l} + ${'nbrstruc_'.$l} + ${'dnbrcdd_'.$l} + ${'dnbrtmppar_'.$l} + ${'nbrapqua_'.$l} + ${'nbrdetache_'.$l} + ${'mallgdur_'.$l} + ${'nbrcongema_'.$l} + ${'nbrpreanon_'.$l}; } for ($l=1;$l<13;$l++) { for ($i=0;$i<sizeof($type_ligne[$i]."_".$l);$i++) { if (${'moyenne2_'.$l}>0) { $nbdiv++; } if ($type_ligne[$i]="dcadres") { ${'moyenne2_1'} = ($dcadres_1 + $dcadres_2 + $dcadres_3 + $dcadres_4 + $dcadres_5 + $dcadres_6 + $dcadres_7 + $dcadres_8 + $dcadres_9 + $dcadres_10 + $dcadres_11 + $dcadres_12) / $nbdiv; } if ($type_ligne[$i]="detam") { ${'moyenne2_2'} = ($detam_1 + $detam_2 + $detam_3 + $detam_4 + $detam_5 + $detam_6 + $detam_7 + $detam_8 + $detam_9 + $detam_10 + $detam_11 + $detam_12) / $nbdiv; } } }
tu instancie toutes les variables que tu aura besoin et tu traite ensuite
Bonjour a vous deux !
je bvien de remettre en place toutes les accolades et c'était donc bien sa.. autant pour moi, sans vouloir me défendre je pense avoir trop vu de PHP depuis 2 mois je me sens un peu dépassé !
En tout cas merci à vous deux pour votre temps et votre aide !
Pour résumé : C'était bien un problème d'accolades qui était placé torp loin ! en faisant comme vous m'avez dis ! Tout marche.. Pour le moment ^^ !
Merci encore !
je bvien de remettre en place toutes les accolades et c'était donc bien sa.. autant pour moi, sans vouloir me défendre je pense avoir trop vu de PHP depuis 2 mois je me sens un peu dépassé !
En tout cas merci à vous deux pour votre temps et votre aide !
Pour résumé : C'était bien un problème d'accolades qui était placé torp loin ! en faisant comme vous m'avez dis ! Tout marche.. Pour le moment ^^ !
Merci encore !