[RESOLU] Variables définies et indéfinies.

Mammouth du PHP | 702 Messages

14 mars 2012, 09:43

Bonjour à tous. j'affiche des variables qui sont issues de requêtes. exemple:
 <?php $sql7 = 'SELECT SUM(montant) as montant FROM factures WHERE n_doss=' . $_GET['n_doss'] . '';

$req7 = mysql_query ($sql7) or die ('Erreur SQL !<br>'.$sql7.'<br>'.mysql_error ()); 

while($data9 = mysql_fetch_assoc ($req7)) 

{ ?>
                      <?php if (empty($data9['montant'])) {

echo '0,00'; }

else { 
 $pp = $data9['montant'] ; $nbr2 = $pp;

// Notation française
$pp = number_format($number, 2, ',', ' ');
// 1 234,56
echo $pp; }

 ?>
                      <?php } ?>             
ou encore:
  <?php $sql2 = 'SELECT SUM(montant) as montant FROM versements WHERE n_doss=' . $_GET['n_doss'] . '';

$req2 = mysql_query ($sql2) or die ('Erreur SQL !<br>'.$sql2.'<br>'.mysql_error ()); 

while($data = mysql_fetch_assoc ($req2)) 

{ ?>
                      <?php if (empty($data['montant'])) {

echo '0,00'; }

else { echo $data['montant']; }

 ?>
                      <?php } ?>
le soucis étant que lorsque je souhaite en faire usage un peu plus bas, on me dit qu'elles ne sont plus définies. est-ce normal?

voici le code:
       <?php $solde = $pp - $data['montant'] ; $number = $solde;

// Notation française
$solde1 = number_format($number, 2, ',', ' ');
// 1 234,56
echo $solde1 ; ?> &euro;
et le message d'erreur:

Code : Tout sélectionner

notice: Undefined variable: pp in C:\wamp\w
la ligne qui renvoit ce message d'erreur est celle du dernier code que j'affiches qui fait la synthèse des deux requêtes. d'avance merci pour votre aide.
Modifié en dernier par piotrowski-s le 14 mars 2012, 10:58, modifié 1 fois.

ViPHP
ViPHP | 2577 Messages

14 mars 2012, 10:22

De ce que j'ai vu, $pp est initialisé dans un "else". Donc si tu ne passe pas dans le "else", elle n'est pas initialisé.

Mammouth du PHP | 702 Messages

14 mars 2012, 10:27

mais comment faire dans ce cas?

Mammouth du PHP | 702 Messages

14 mars 2012, 10:29

puisque je n'ai pas mis de mysql free result() ?

ViPHP
ViPHP | 2577 Messages

14 mars 2012, 10:32

mettre $pp = 0 dans le bloc "if" ?

Mammouth du PHP | 702 Messages

14 mars 2012, 10:35

j'ai mis cela à la place et ça ne fonctionne pas
  <?php $data9['montant']=$pp ;
					  if (empty($data9['montant'])) {

echo '0,00'; }

else { 
 $pp = $data9['montant'] ; $nbr2 = $pp;

// Notation française
$pp = number_format($number, 2, ',', ' ');
// 1 234,56
echo $pp; }

 ?>

ViPHP
ViPHP | 2577 Messages

14 mars 2012, 10:51

Si ca ne fonctionne pas, je ne peux pas t'aider sans un message d'erreur ou une description de ce qui se passe et de ce qui devrait se passer.

Sur le code que j'ai vu, essaye de limiter les variables que tu utilises et donnes leur des noms plus explicite. Il me semble que tu utilises beaucoup de variables intermédiaires sans grandes utilité. De plus essayes d'indenter ton code pour qu'il soit lisible facilement.
if ('a' == 'b')
{
   $a = 'toto'; // on ne passe pas la
}
else
{
   $b = 'titi'; // on passe la
} 
echo $a; // provoque un message erreur
echo $b: // fonction bien et affiche titi  
Cette exemple doit te permettre de résoudre ton problème.

Mammouth du PHP | 702 Messages

14 mars 2012, 10:57

le premier message d'erreur est Notice: Undefined variable: pp in C:\wamp\www\NEOGETCASH\GESTIONNAIRE\creance.php on line 537 à priori la variable pp ne serait pas défini. et j'ai trouvé pourquoi. en suivant l'exemple j'avais mis $data9['montant']=$pp et c'est pas comme en math, ici les égalités ne sont pas réciproques j'ai donc fais $pp=$data9['montant'] et la ça fonctionne à merveille. Merci pour ton aide.

Mammouth du PHP | 2278 Messages

14 mars 2012, 11:38

le premier message d'erreur est Notice: Undefined variable: pp in C:\wamp\www\NEOGETCASH\GESTIONNAIRE\creance.php on line 537 à priori la variable pp ne serait pas défini. et j'ai trouvé pourquoi. en suivant l'exemple j'avais mis $data9['montant']=$pp et c'est pas comme en math, ici les égalités ne sont pas réciproques j'ai donc fais $pp=$data9['montant'] et la ça fonctionne à merveille. Merci pour ton aide.
Tout d'abord, un point essentiel:
Affectation
--------------
= ne marque pas une égalité mais une affectation:
$a = $b sitgnifie la variable a prend la même valeur que la variable b; on affecte à la variable $a la valeurt de la variable $b.
et cette opération va toujours de droite à gauche, c'est-à-dire que, si en partie droite se trouve une opération, celle-ci est faite avant que le résultat de l'opération soit addecté à la variable à gauche de =.
exemple
<?PHP
$a = 2;
print "<br />a vaut $a";
$b = $a;
print "<br />a vaut $a et b vaut $b";
$a = ($a*3);
print "<br />a vaut $a et b vaut $b";
?>
L'égalité au sens mathématique se teste par l'opérateur == ou ===.
----------
Le code lui-même:
sauf si j'ai mauvaise vue, ce code crée un erreur car number n'est pas défini.
$pp = number_format($number, 2, ',', ' '); //d'où sort ce number ?
et une proposition dépouillée de moul <?PHP ?> inutiles
while ()
{
if (empty($data9['montant']))
{
$nb_org= '0,00';
}
else
{
$nb_org = $data9['montant'] ; // pour avoir des noms de variables signifiants
//$nbr2 = $pp; à quoi sert cette affectation
// Notation française
//$pp = number_format($number, 2, ',', ' '); d'où sort ce number ?
// 1 234,56
}
$nb_converti = number_format($nb_org, 2, ',', ' ');
// exloitation du résultat
print "<p>$nb_org devient $nb_converti</p>";
}
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD