pb comparaison valeur

Invité
Invité n'ayant pas de compte PHPfrance

26 sept. 2008, 12:02

Bonjour
j'ai un problème avec ce code, au niveau de la comparaison il y a un disfonctionnement.
<?php
$vil=0;
$req = mysql_query("SELECT ville, date_e, rep
FROM table");
while ($tab = mysql_fetch_row($req)) {
?>
<?php if ($tab[0]!=$vil) {
$vil=$tab[0]; ?>
</tr><tr><td><?php echo $tab[0]; ?></td><td><?php echo $tab[2]; ?></td>
<?php } else { ?><td><?php echo $tab[2]; ?></td><?php } ?>
<?php } ?>
j'ai fait un echo $tab[0] et $vil après la requête et cela m'affiche bien les bonne valeur.
J'ai essayé ($tab[0]!=$vil) avec des cotes, sans, j'ai essayé en faisant == ou <> ou !=, rien ne fonctionne.
Ai-je oublié quelque chose ?
merci d'avance

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

26 sept. 2008, 12:08

Bonjour,
j'ai un problème avec ce code, au niveau de la comparaison il y a un disfonctionnement.
[...]
Ai-je oublié quelque chose ?
Peut être de nous dire, quel est le dysfonctionnement que tu rencontres? :lol:
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 169 Messages

26 sept. 2008, 12:09

Salut,

Ton code est une horreur, essaye déjà en le nettoyant :

<?php 
$vil=0; 
$req = mysql_query("SELECT ville, date_e, rep FROM table"); 
while ($tab = mysql_fetch_row($req)) { 
 	if ($tab[0]!=$vil) { 
		$vil=$tab[0]; 
		echo "</tr><tr><td>".$tabl[0]."</td><td>".$tab[2];
	}
	else {
		echo "<td>".$tab[2]."</td>";	
	}
}
?>

En y voyant plus clair, peut être pourras tu identifier ton problème. A mon avis c'est un problème d'analyse.

Invité
Invité n'ayant pas de compte PHPfrance

26 sept. 2008, 13:20

en faite par exemple avec la comparaison if ($tab[0]!=$vil) { et bien même si $tab[0] et $vil sont différent et bien il ne rentre pas dans cette boucle. De même que lorsque je fais ($tab[0]==$vil) même si les valeur sont identique il ne rentre pas dans la boucle.

Invité
Invité n'ayant pas de compte PHPfrance

26 sept. 2008, 13:37

j'ai "nettoyé" mon code et j'ai modifié pour voir si il rentrait dans la boucle en mettant else if. Il se trouve qu'il rentre bien dans cette boucle alors que quand je fais afficher $tab[0] et $vil il m'affiche des valeurs différentes ! je comprend vraiment pas
while ($tab = mysql_fetch_row($req)) {
     if ($tab[0] != $vil) { 
        $vil=$tab[0]; 
        echo "</tr><tr><td>".$tabl[0]."</td><td>".$tab[2];
    }
    else if ($tab[0] == $vil) {
	echo $tab[0].' '.$vil;
        echo "<td>".$tab[2]."</td>";    
    }
}

Mammouth du PHP | 1353 Messages

26 sept. 2008, 14:01

Il faudrait peut etre initialisé $vil comme une chaine de caractere et non pas un entier si il s'agit d'une comparaison avec une ville en chaine de caractère (ou est ce un nombre ?)
$vil = "";
Si il s'agit de chaines de caractères, utilise sinon la fonction strcmp() pour etre tranquil...

Il se trouve qu'il rentre bien dans cette boucle alors que quand je fais afficher $tab[0] et $vil il m'affiche des valeurs différentes ! je comprend vraiment pas
C'est ce que tu lui demandes non ? Tu lui dit de rentrer dans le if si les valeurs sont différentes... :shock:
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Invité
Invité n'ayant pas de compte PHPfrance

26 sept. 2008, 14:09

en faite quand je dis qu'il est rentrer dans la boucle c'etait dans la else if, qui normalement est pour les valeur identique.

Mammouth du PHP | 1353 Messages

26 sept. 2008, 14:21

Pas besoin de else if, un else suffit. Aussi il manque un </td>
while ($tab = mysql_fetch_row($req)) { 
if ($tab[0] != $vil) { 
$vil=$tab[0]; 
echo "</tr><tr><td>".$tabl[0]."</td><td>".$tab[2]."</td>"; 
} 
else { 
echo $tab[0].' '.$vil; 
echo "<td>".$tab[2]."</td>"; 
} 
}
Peux tu aussi nous dire ce qu'affiche le code suivant (à la place du while actuel):
while ($tab = mysql_fetch_row($req)) { 
print_r($tab);
}
Et surtout au final ce que tu veux faire... Parce que quand meme tu modifies la valeur de $vil si elle n'est pas la meme que $tab[0], mais donc dès la deuxieme itération $vil vaut le $tab[0] du 1er enregistrement et tu le compares avec celui du deuxieme, ce n'est plus le 0 que tu compares...
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Invité
Invité n'ayant pas de compte PHPfrance

26 sept. 2008, 14:53

le print_r m'affiche (extrait)

Code : Tout sélectionner

Array ( [0] => AGEN [1] => Novembre 2008 [2] => 1 ) Array ( [0] => AGEN [1] => Octobre 2008 [2] => 20) Array ( [0] => AGEN [1] => Septembre 2008 [2] => 12 ) Array ( [0] => AIGURANDE [1] => Novembre 2008 [2] => 3 ) Array ( [0] => AIGURANDE [1] => Octobre 2008 [2] => 12 ) Array ( [0] => AIGURANDE [1] => Septembre 2008 [2] => 4) Array ( [0] => AMBOISE [1] => Novembre 2008 [2] => 4 ) Array ( [0] => AMBOISE [1] => Octobre 2008 [2] => 12) Array ( [0] => AMBOISE [1] => Septembre 2008 [2] => 1) Array ( [0] => ANGOULEME [1] => Novembre 2008 [2] => 34) Array ( [0] => ANGOULEME [1] => Octobre 2008 [2] => 23) Array ( [0] => ANGOULEME [1] => Septembre 2008 [2] => 4)
et je veux essayé de faire afficher

Code : Tout sélectionner

AGEN 1 20 12 AIGURANDE 3 12 4 AMBOISE 4 12 1 ANGOULEME 34 23 4

donc j'initialise $vil a 0, ensuite je compare ma ville de ma base avec ma variable, si différente cela veux dire que c'est le début d'un ligne, donc je mets ma ville de ma base dans ma variable pour pouvoir ensuite comparé a nouveau et donc ensuite si ma ville est identique cela ajoute une colonne et non une ligne. (pas facile d'expliquer).

Mammouth du PHP | 1353 Messages

26 sept. 2008, 15:32

Il y a déjà un problème avec une variable $tabl qui n'existe pas...

En théorie le code suivant :
$vil ="";
while ($tab = mysql_fetch_row($req)) {  
if ($tab[0] != $vil) {  
	$vil=$tab[0];  
	echo "</tr><tr><td>".$tab[0]."</td><td>".$tab[2]."</td>";  
	}  
else {  
	echo "<td>".$tab[2]."</td>";  
	}  
} 
doit fonctionner. Sinon le probleme vient d'ailleurs.

Code qui fonctionne parfaitement chez moi :

//reproduction de tes données
$tab = array(array());
$tab[0][0] = "AGEN";
$tab[1][0] = "AGEN";
$tab[2][0] = "AGEN";
$tab[3][0] = "AIGURANDE";
$tab[4][0] = "AIGURANDE";
$tab[5][0] = "AIGURANDE";
$tab[6][0] = "ANGOULEME";
$tab[7][0] = "ANGOULEME";
$tab[8][0] = "ANGOULEME";
$tab[0][2] = "1";
$tab[1][2] = "20";
$tab[2][2] = "12";
$tab[3][2] = "3";
$tab[4][2] = "12";
$tab[5][2] = "4";
$tab[6][2] = "34";
$tab[7][2] = "23";
$tab[8][2] = "4";

//code
$vil ="";

echo "<table><tr>";

foreach($tab as $element) {  
if ($element[0] != $vil) {  
	$vil=$element[0];  
	echo "</tr><tr><td>".$element[0]."</td><td>".$element[2]."</td>";  
	}  
else {  
	echo "<td>".$element[2]."</td>";  
	}  
}

echo "</tr></table>";
 
Cela m'affiche ce que tu veux, donc le code donné plus haut devrait faire de meme.
Tell me and I forget. Teach me and I remember. Involve me and I learn.