[PHP] Variables déclarées / Non déclarées ...

Résolu/Fermé
digsaw_- Messages postés 489 Date d'inscription lundi 14 septembre 2009 Statut Membre Dernière intervention 24 septembre 2013 - 27 avril 2011 à 10:28
Gremy87 Messages postés 352 Date d'inscription mercredi 19 mai 2010 Statut Membre Dernière intervention 19 mars 2014 - 28 avril 2011 à 10:17
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 mercredi 19 mai 2010 Statut Membre Dernière intervention 19 mars 2014 38
27 avril 2011 à 10:56
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 lundi 14 septembre 2009 Statut Membre Dernière intervention 24 septembre 2013 57
27 avril 2011 à 11:57
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 mercredi 19 mai 2010 Statut Membre Dernière intervention 19 mars 2014 38
27 avril 2011 à 14:06
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 lundi 14 septembre 2009 Statut Membre Dernière intervention 24 septembre 2013 57
27 avril 2011 à 14:21
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 mercredi 19 mai 2010 Statut Membre Dernière intervention 19 mars 2014 38
27 avril 2011 à 14:33
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
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 lundi 14 septembre 2009 Statut Membre Dernière intervention 24 septembre 2013 57
27 avril 2011 à 14:42
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 mercredi 19 mai 2010 Statut Membre Dernière intervention 19 mars 2014 38
27 avril 2011 à 14:46
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 lundi 14 septembre 2009 Statut Membre Dernière intervention 24 septembre 2013 57
27 avril 2011 à 14:57
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
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 lundi 14 septembre 2009 Statut Membre Dernière intervention 24 septembre 2013 57
Modifié par digsaw_- le 27/04/2011 à 15:12
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
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 mercredi 19 mai 2010 Statut Membre Dernière intervention 19 mars 2014 38
27 avril 2011 à 15:29
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 lundi 14 septembre 2009 Statut Membre Dernière intervention 24 septembre 2013 57
28 avril 2011 à 10:08
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 mercredi 19 mai 2010 Statut Membre Dernière intervention 19 mars 2014 38
28 avril 2011 à 10:17
De rien ;)
0