[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   -
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 !


A voir également:

15 réponses

Gremy87 Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   38
 
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 ^^

0
digsaw_- Messages postés 489 Date d'inscription   Statut Membre Dernière intervention   58
 
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 !'
0
Gremy87 Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   38
 
et l'erreur arrive a quelle ligne? quelles variables il te dit qu'il ne connait pas?

lol et oui encore moi xD
0
digsaw_- Messages postés 489 Date d'inscription   Statut Membre Dernière intervention   58
 
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.
0

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

Posez votre question
Gremy87 Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   38
 
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
0
le père
 
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 == ?
0
digsaw_- Messages postés 489 Date d'inscription   Statut Membre Dernière intervention   58
 
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...
0
Gremy87 Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   38
 
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?
0
digsaw_- Messages postés 489 Date d'inscription   Statut Membre Dernière intervention   58
 
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)
0
le père
 
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
0
digsaw_- Messages postés 489 Date d'inscription   Statut Membre Dernière intervention   58
 
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 !'
0
le père
 
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.
0
Gremy87 Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   38
 
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.

$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
0
digsaw_- Messages postés 489 Date d'inscription   Statut Membre Dernière intervention   58
 
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 !
0
Gremy87 Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   38
 
De rien ;)
0