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

Résolu/Fermé
Signaler
Messages postés
489
Date d'inscription
lundi 14 septembre 2009
Statut
Membre
Dernière intervention
24 septembre 2013
-
Messages postés
352
Date d'inscription
mercredi 19 mai 2010
Statut
Membre
Dernière intervention
19 mars 2014
-
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 !


15 réponses

Messages postés
352
Date d'inscription
mercredi 19 mai 2010
Statut
Membre
Dernière intervention
19 mars 2014
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 ^^

Messages postés
489
Date d'inscription
lundi 14 septembre 2009
Statut
Membre
Dernière intervention
24 septembre 2013
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 !'
Messages postés
352
Date d'inscription
mercredi 19 mai 2010
Statut
Membre
Dernière intervention
19 mars 2014
38
et l'erreur arrive a quelle ligne? quelles variables il te dit qu'il ne connait pas?

lol et oui encore moi xD
Messages postés
489
Date d'inscription
lundi 14 septembre 2009
Statut
Membre
Dernière intervention
24 septembre 2013
57
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.
Messages postés
352
Date d'inscription
mercredi 19 mai 2010
Statut
Membre
Dernière intervention
19 mars 2014
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
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 == ?
Messages postés
489
Date d'inscription
lundi 14 septembre 2009
Statut
Membre
Dernière intervention
24 septembre 2013
57
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...
Messages postés
352
Date d'inscription
mercredi 19 mai 2010
Statut
Membre
Dernière intervention
19 mars 2014
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?
Messages postés
489
Date d'inscription
lundi 14 septembre 2009
Statut
Membre
Dernière intervention
24 septembre 2013
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)
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
Messages postés
489
Date d'inscription
lundi 14 septembre 2009
Statut
Membre
Dernière intervention
24 septembre 2013
57
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 !'
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.
Messages postés
352
Date d'inscription
mercredi 19 mai 2010
Statut
Membre
Dernière intervention
19 mars 2014
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
Messages postés
489
Date d'inscription
lundi 14 septembre 2009
Statut
Membre
Dernière intervention
24 septembre 2013
57
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 !
Messages postés
352
Date d'inscription
mercredi 19 mai 2010
Statut
Membre
Dernière intervention
19 mars 2014
38
De rien ;)