Problème de boucle et variable

Eléphant du PHP | 79 Messages

21 oct. 2012, 01:57

Salut,


Voici ma requète :

Code : Tout sélectionner

public function getMostDistancer2() { $res = mysql_query('SELECT `uuid` AS name, SUM(`distance_traveled`) AS sum_distance FROM players WHERE distance_traveled != -1 GROUP BY `uuid` ORDER BY sum_distance DESC LIMIT 3') or die(mysql_error()); while($row = mysql_fetch_assoc($res)) { $rows[] = $row; } return $rows; }
Que j'appelle ainsi :

Code : Tout sélectionner

<?php $ar = $serverObj->getMostDistancer2(); $player = $serverObj->getPlayer($ar['name']); if ($player) { echo(STRING_ALL_DISTANCER); ?> : </h2> <h3 class="ca-sub"> <a class="fort" href="?view=player&uuid=<?php echo($player->getUUID()); ?>"><?php echo($player->getName()); ?></a> <?php print_r($ar); foreach ($ar as $row) { echo '<div style=" display: block;">'; echo '<a class="fort" href="?view=player&uuid=<?php echo($player->getUUID()); ?>"><?php echo($player->getName()); ?></a>'; echo $row['sum_distance']; echo '</div>'; } ?> <?php echo(STRING_ALL_DISTANCER_UNIT); ?> <?php } else echo(STRING_ALL_NONE); ?>
Mon problème, c'est que je souhaiterais afficher $ar[0]['name'] dans la 1ere boucle $ar[1]['name'] dans la 2eme et $ar[2]['name'] dans la 3eme.

Une aide serait bienvenue
Mon site dédié à Minecraft : http://www.orminecraft.com
Et celui dédié à ses serveurs multijoueur ;) http://www.serveurs-minecraft.net

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

21 oct. 2012, 02:28

Salut,

Le parcourt d'un tableau se fait avec foreach ou un for.

Plus d'info dans la doc.


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 79 Messages

21 oct. 2012, 02:56

Je le sais, c'est dans le code, le problème c'est que je ne sais pas faire ce que j'ai demandé...
Mon site dédié à Minecraft : http://www.orminecraft.com
Et celui dédié à ses serveurs multijoueur ;) http://www.serveurs-minecraft.net

Eléphant du PHP | 79 Messages

21 oct. 2012, 03:48

Omg j'ai quasiment réussi, mais gros pb :

Code : Tout sélectionner

<?php $ar = $serverObj->getMostDistancer2(); $player = $serverObj->getPlayer($ar['name']); if ($player) { echo 'Les plus grands coursiers'; ?> : </h2> <h3 class="ca-sub"> <a class="fort" href="?view=player&uuid=<?php echo($player->getUUID()); ?>"><?php echo($player->getName()); ?></a> <?php for ($numero = 0; $numero < 3; $numero++) { echo $ar[$numero]['name'] . '<br />'; echo '<a class="fort" href="?view=player&uuid='; echo $ar[$numero]['name']; echo '">'; echo ($ar[$numero]['name']->getName()); echo "?></a>"; } foreach ($ar as $row) { echo '<div style=" display: block;">'; echo (QueryUtils::formatDistance($row['sum_distance'])); echo '</div>'; } ?>
Le echo ($ar[$numero]['name']->getName()); me retourne un
Fatal error: Call to a member function getName() on a non-object
Mon site dédié à Minecraft : http://www.orminecraft.com
Et celui dédié à ses serveurs multijoueur ;) http://www.serveurs-minecraft.net

Mammouth du PHP | 2278 Messages

21 oct. 2012, 07:23

Salut,

Le parcours d'un tableau se fait avec foreach ou un for.

Plus d'info dans la doc

@+
qui, justement, utilise un while... Sachant que toutes les boucles peuvent se traiter avec un while (for , foreach, do until ne sont que des faciliés)....
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 79 Messages

21 oct. 2012, 17:13

Sur un autre forum, on me dit que mon code est pourri, je trouve ce comportement débile, peut être ici quelqu'un voudra bien m'aider ?
Mon site dédié à Minecraft : http://www.orminecraft.com
Et celui dédié à ses serveurs multijoueur ;) http://www.serveurs-minecraft.net

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

21 oct. 2012, 17:20

Salut,

Le parcours d'un tableau se fait avec foreach ou un for.

Plus d'info dans la doc

@+
qui, justement, utilise un while... Sachant que toutes les boucles peuvent se traiter avec un while (for , foreach, do until ne sont que des faciliés)....
ben oui mais justement la facilité c'est bien aussi des fois :)

@+
Sur un autre forum, on me dit que mon code est pourri, je trouve ça odieux comme comportement, peut être ici quelqu'un voudra bien m'aider ?
ben sur que c'est pas du boulot de pro mais en même temps tu ne demanderais pas d'aide sinon ^^

donc ton message d'erreur est du soit :
- au fait que tu tente d'utiliser un index qui n'existe pas dans $ar
- soit que que ce qui existe dans $ar[numero] n'est pas un objet

la c'est la seconde solution qui prime, tu n'as pas d'objet dans $ar juste du texte.

pour affiche le "name" courant c'est juste echo $ar[$numero]['name'].

revois un peu les bases, tu ne devrais pas mélanger poo et procédurale, dans un premier temps, tu te mélange trop les piceaux

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 79 Messages

21 oct. 2012, 17:30


ben sur que c'est pas du boulot de pro mais en même temps tu ne demanderais pas d'aide sinon ^^

donc ton message d'erreur est du soit :
- au fait que tu tente d'utiliser un index qui n'existe pas dans $ar
- soit que que ce qui existe dans $ar[numero] n'est pas un objet

la c'est la seconde solution qui prime, tu n'as pas d'objet dans $ar juste du texte.

pour affiche le "name" courant c'est juste echo $ar[$numero]['name'].

Code : Tout sélectionner

<?php $ar = $serverObj->getMostDistancer2(); $player = $serverObj->getPlayer($ar['name']); if ($player) { echo 'Les plus grands coursiers'; ?> <?php for ($numero = 0; $numero < 3; $numero++) { echo '<a class="fort" href="?view=player&uuid='; echo $ar[$numero]['name']; echo '">'; echo ($ar[$numero]['name']->getName()); echo "?></a>"; } foreach ($ar as $row) { echo '<div style=" display: block;">'; echo (QueryUtils::formatDistance($row['sum_distance'])); echo '</div>'; } ?>
C'est ce que j'ai fait echo $ar[$numero]['name'] ?!
Mon site dédié à Minecraft : http://www.orminecraft.com
Et celui dédié à ses serveurs multijoueur ;) http://www.serveurs-minecraft.net

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

21 oct. 2012, 17:43

non pas deux lignes en dessous : echo ($ar[$numero]['name']->getName());

Dans les messages d'erreur il y a aussi les numéros de liges tu peux te gourer.

si ton éditeur de texte ne sais pas afficher les numéros de lignes changes pour un mieux (notepad ++, eclipse, netbeans, ou beaucoup d'autre, perso j'ai pas tous testé mais je préfère zend studio qui est payant ^^)


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 79 Messages

21 oct. 2012, 18:10

non pas deux lignes en dessous : echo ($ar[$numero]['name']->getName());

Dans les messages d'erreur il y a aussi les numéros de liges tu peux te gourer.

si ton éditeur de texte ne sais pas afficher les numéros de lignes changes pour un mieux (notepad ++, eclipse, netbeans, ou beaucoup d'autre, perso j'ai pas tous testé mais je préfère zend studio qui est payant ^^)


@+
Le problème c'est que j'ai besoin du getName() pour convertir l'ID en pseudo.
Mon site dédié à Minecraft : http://www.orminecraft.com
Et celui dédié à ses serveurs multijoueur ;) http://www.serveurs-minecraft.net

Eléphant du PHP | 343 Messages

21 oct. 2012, 18:22

Il te retourne quoi le $ar[$numero]['name'] alors?
Développeur web

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

21 oct. 2012, 19:35

Un string, simplement parce que c'est le retour d'une requête SQL (cf 1er post)

Donc pas de getName qui tiens le nom tu l'a déjà avec ce que je t'ai donné tu le passe (sans le echo) comme ça en paraître de ta seconde méthode et c'est bon.



@+
Il en faut peu pour être heureux ......