boucle while

Eléphant du PHP | 110 Messages

08 avr. 2008, 10:37

stl a toutes et a tous
j'ai un probleme avec une boucle while et mysql_fetch_array , ds ma variable je recois que la premiere ligne de ma BD , parcontre en faisant un simple echo sans var ds la boucle , je m'apercois qu'el parcour bien l'ensemble de la BD. je comprend pas pourquois je ne recois pas l'ensemble de ma BD ds ma variable .
voici le code : je me serre de la ligne echo commentée pour faire le test sur le fonctionnement de la boucle

<?php
//connexion base de donnee fetetout// 
require_once('Connections/conexion_bd_fetetout.php'); 

// retour de la base de donnée 
$result = mysql_query("SELECT * FROM liste_invites");

while ($User = mysql_fetch_array($result)) {
	$Return = $User{'nom'};
	//echo("test  ");
}

//mysql_close($BD_membre);
//print ($Return)
//echo('"<user><nom>"bruno"</nom></user>"')
echo ($Return)
?>
j'utilise pourtant ce type de code ds plusieurs projets , mais la je ne vois plus rien , ca doit etre tres con pourtant ;-)
merci de pour votre aide

ViPHP
ViPHP | 2287 Messages

08 avr. 2008, 10:41

Bonjour,

Il y a une double erreur là :
    $Return = $User{'nom'}; 
1/ On n'accède plus à un tableau avec les accolades { } , c'est déprécié ;-) Il faut utiliser les crochets [ ] .

2/ A chaque itération de la boucle tu écrases ( = ) la variable $Return, donc en sortie de boucle elle ne contient que la dernière valeur lue. Il faudrait plutôt faire de la concaténation ( .= ) ou de l'empilement ( []= ) pour obtenir une liste.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphant du PHP | 110 Messages

08 avr. 2008, 11:04

slt et merci pour tes explications

quand tu dis que {} sont depreciées tu veus dire que ca ne fonctionne plus, là je suis inquiet car j'ai des pages qui sont ecrites sur ce modèle. j'ai fait le test avec les deux :{} et [] les deux semblent fonctionner

pour la concaténation merci , en effet j'avais oublier le "." , je vois ici la limite de la méthode empirique , c'est ce qui arrive quand on ne veut pas rentré ds ls bases du code , je vais donc m'y plonger ;-)

par contre j'ai un autre petit soucis que j'ai résolue , mais je comprends pas bien pourquoi , a moins qu'on soit obligé maintenant de définir les variables avant de les utiliser. voici le soucis :
ds ce code le nav me renvois indefine variable "Return"
$result = mysql_query("SELECT * FROM liste_invites");

while ($User = mysql_fetch_array($result)) {
	$Return.=$User['nom'];
	//echo("test  ");
}
si ds le code je rajoute avant la boucle $Return="" je n'ai plus ce message
$result = mysql_query("SELECT * FROM liste_invites");
$Return="";
while ($User = mysql_fetch_array($result)) {
	$Return.=$User['nom'];
	//echo("test  ");
}
je comprend pas pourquoi ?
merci encore A+

ViPHP
ViPHP | 4674 Messages

08 avr. 2008, 11:40

Hey :),

quand on dit que quelque chose est déprécié ça veut dire qu'on ne l'aime plus pour différentes raisons : rapidité, syntaxe ambiguë etc. Donc cela fonctionne toujours à cause de la compatibilité, mais c'est à éviter. Il faudra donc revoir toutes tes pages, car le jour où PHP va supprimer cette syntaxe, tu seras coincé. C'est toujours mieux de réagir avant.

Il ne faut pas déclarer les variables en avance dans PHP car elles se déclarent à la volée (i.e. lors de la définition le plus souvent).
Mais ici c'est différent. Comme tu fais une concaténation, la première fois, il va concaténer avec quoi ? Avec une variable qui n'existe pas encore. Il faut donc déclarer ta variable comme vide ('') et ensuite faire la concaténation dessus. Assez logique :). T'as compris ?
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

08 avr. 2008, 11:43

Pour l'instant, tu peux continuer à acceder aux tableaux avec des accolades, mais c'est quelque chose de "dépassé" et qui ne devrait plus se faire. Cela risque un jour de disparaitre (avec php6 par exemple ?) et il vaut donc mieux prendre l'habitude d'utiliser l'autre syntaxe même si la première fonctionne toujours :)

Concernant la déclaration, il faut effectivement toujours déclarer une variable (ou tester son existance) avant de l'utiliser si tu ne veux pas déclencher un avertissement de php.

Ce n'est pas une nouveauté, mais ce qui est peut être nouveau c'est la configuration de ton serveur qui avant ne t'affichait pas ces messages d'avertissement (E_NOTICE) et gérait en silence ces "erreurs" en prenant l'initiative de créer lui même les variables non définies. Si les avertissement sont activés, il t'en informe, ce qui te permet de rectifier et de ne pas utiliser des variables qui n'existeraient pas, limitant également les risques d'erreur si tu te trompes de nom :)

Edit : ah.. ben.. grillé..... :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 110 Messages

08 avr. 2008, 20:24

slt
merci pour vos reponse et vos lumieres
je vais maintenant utiliser des {} pardon ;-) des []

A+