Bien exploiter cette base !

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Bien exploiter cette base !

Re: Bien exploiter cette base !

par AB » 22 oct. 2012, 04:29

Faudrait apprendre à débugguer un peu : pour voir les erreurs, tu peux faire afficher le résultat pour regarder ce que cela donne, genre
$ar = $serverObj->getMostDistancer();
print_r($ar);
//...
Là j'ai utilisé "print_r" parce que tu attends un tableau en retour mais si tu ne sais pas trop ce que cela va retourner tu peux utiliser "var_dump" à la place.
Fais des tests à coups de print_r ou var_dump pour contrôler les valeurs !

Déjà tu appelles getMostDistancer() alors que ta fonction se nomme getMostDistancer2.
Et puis tu fais echo $rows[0]; alors que tes résultats sont normalement dans $ar, fais attention !

Re: Bien exploiter cette base !

par jycs » 20 oct. 2012, 17:38

Re, je relance donc ma question :

Comment faire pour afficher les 3 plus grands résultats de `distance_traveled`
    public function getMostDistancer2() {
        $res = mysql_query('SELECT `uuid` name, SUM(`distance_traveled`) count
                                                FROM players
                                                WHERE distance_traveled != -1
                                                GROUP BY `uuid`
                                                ORDER BY count DESC
                                                LIMIT 3');
        while($row = mysql_fetch_assoc($res)) { $rows[] = $row; }
     
        return $rows;
    }

Dans ce contexte :
          <?php
            $ar = $serverObj->getMostDistancer();
            $player = $serverObj->getPlayer($ar['name']);
            if ($player) { 
            	        echo(STRING_ALL_DISTANCER); 
            	?>
            : </h2>
           <a class="fort" href="?view=player&uuid=<?php echo($player->getUUID()); ?>"><?php echo($player->getName()); ?></a>
            <?php 
            	        echo $rows[0];
            	    ?>
            <?php } else echo(STRING_ALL_NONE); ?>
Erreurs actuelles :
NOTICE: UNDEFINED INDEX: NAME
Notice: Undefined variable: rows
Un grand merci à celui qui trouvera...

Re: Bien exploiter cette base !

par sam12 » 20 oct. 2012, 05:49

Merci à toi aussi ;)

Re: Bien exploiter cette base !

par jycs » 20 oct. 2012, 05:44

Ok merci je les attends ;) dodo pour être en forme demain bonne nuit.

Re: Bien exploiter cette base !

par sam12 » 20 oct. 2012, 05:40

Je te conseille d'attendre Mazarini (ou quelqu'un d'autre) qui s'y connaissent. Personnellement, je ne vois pas trop le but du $rows[] dans le while.

Re: Bien exploiter cette base !

par jycs » 20 oct. 2012, 05:30

Je dirais que non vu que ton $serverObj doit gérer la connexion à la bdd donc avec $ar tu appelles ta connexion à la bdd et la transmet à getMostDistancer2() pour le traiter sur la 2e page.
Donc réutiliser $ar dans le while ne servirait à rien.

Edit: ton print_r tu le fais où?
Mince, comment faire alors ?

Re: Bien exploiter cette base !

par sam12 » 20 oct. 2012, 05:28

Je dirais que non vu que ton $serverObj doit gérer la connexion à la bdd donc avec $ar tu appelles ta connexion à la bdd et la transmet à getMostDistancer2() pour le traiter sur la 2e page.
Donc réutiliser $ar dans le while ne servirait à rien.

Edit: ton print_r tu le fais où?

Re: Bien exploiter cette base !

par jycs » 20 oct. 2012, 05:23

Ne maitrisant pas l'OO, je dirais que tu es obligé de réutiliser ton $ar pour appeler getMostDistancer2()
Je ne vais pas te faire faire des conneries mais j'aurais bien fait un print_r du $rows pour voir ce qu'il y a dedans. Mais bon apparemment il n'est pas défini (surement parce-que tu ne réutilises pas ton $ar).
Aïe, c'est faisable de réutiliser le $ar avec le while ? Le

Code : Tout sélectionner

print_r($rows[0]);

Code : Tout sélectionner

print_r($rows);
ne donne rien

Re: Bien exploiter cette base !

par sam12 » 20 oct. 2012, 05:20

Ne maitrisant pas l'OO, je dirais que tu es obligé de réutiliser ton $ar pour appeler getMostDistancer2()
Je ne vais pas te faire faire des conneries mais j'aurais bien fait un print_r du $rows pour voir ce qu'il y a dedans. Mais bon apparemment il n'est pas défini (surement parce-que tu ne réutilises pas ton $ar).

Re: Bien exploiter cette base !

par jycs » 20 oct. 2012, 05:05

Edit : ça tombe bien je vais répondre à ta question :
    public function getMostDistancer2() {
        $res = mysql_query('SELECT `uuid` name, SUM(`distance_traveled`) count
                                                FROM players
                                                WHERE distance_traveled != -1
                                                GROUP BY `uuid`
                                                ORDER BY count DESC
                                                LIMIT 3');
        while($row = mysql_fetch_assoc($res)) { $rows[] = $row; }
     
        return $rows;
    }
Test :
          <?php
            $ar = $serverObj->getMostDistancer2();
            $player = $serverObj->getPlayer($ar['name']);
            if ($player) { 
            	        echo(STRING_ALL_DISTANCER); 
            	?>
            : </h2>
           <a class="fort" href="?view=player&uuid=<?php echo($player->getUUID()); ?>"><?php echo($player->getName()); ?></a>
            <?php 
            	        echo $rows[0];
            	    ?>
            <?php } else echo(STRING_ALL_NONE); ?>
J'ai donc changé le
<?php
echo $rows[0];
?>
Erreurs :
NOTICE: UNDEFINED INDEX: NAME
Notice: Undefined variable: rows
Je ne cerne pas encore le truc

Re: Bien exploiter cette base !

par sam12 » 20 oct. 2012, 05:02

Et dans le contexte ça donne quoi (comment tu utilises ce code)?

Re: Bien exploiter cette base !

par jycs » 20 oct. 2012, 04:54

Non mais
while($row = mysql_fetch_assoc($res)) { $rows[] = row; }
et je dirais même
while($row = mysql_fetch_assoc($res)) { $rows[] = $row; }
while() c'est nouveau? :D
xD je me doutais qu'il y avait une arnaque

Par contre j'ai encore une erreur
Fatal error: Cannot redeclare SERVER::getMostDistancer()
    public function getMostDistancer() {
        $res = mysql_query('SELECT `uuid` name, SUM(`distance_traveled`) count
                                                FROM players
                                                WHERE distance_traveled != -1
                                                GROUP BY `uuid`
                                                ORDER BY count DESC
                                                LIMIT 3');
        while($row = mysql_fetch_assoc($res)) { $rows[] = $row; }
     
        return $rows;
    }
Edit :: Rien dit ! doublon de fonction dsl ^^

Re: Bien exploiter cette base !

par sam12 » 20 oct. 2012, 04:50

Non mais
while($row = mysql_fetch_assoc($res)) { $rows[] = row; }
et je dirais même
while($row = mysql_fetch_assoc($res)) { $rows[] = $row; }
while() c'est nouveau? :D

Re: Bien exploiter cette base !

par jycs » 20 oct. 2012, 04:46


Et si tu remplaces $rows[] = row; par ce que j'ai proposé précédemment?

Edit: Et puis il manque les () autour du while non?

J'aurais plutôt fait
$rows[] = $row;
Et attention en testant, c'est while et non wihle ;)
Je n'arrive pas à comprendre ce que tu veux dire (relis toi).

Pour le while j'ai donc rajouté les "()" :
    public function getMostDistancer() {
        $res = mysql_query('SELECT `uuid` name, SUM(`distance_traveled`) count
                                                FROM players
                                                WHERE distance_traveled != -1
                                                GROUP BY `uuid`
                                                ORDER BY count DESC
                                                LIMIT 3');
        while() $row = mysql_fetch_assoc($res) {$rows[] = row;}
     
        return $rows;
    }
L'erreur devient :
Parse error: syntax error, unexpected ')'

Re: Bien exploiter cette base !

par sam12 » 20 oct. 2012, 04:35

Et si tu remplaces $rows[] = row; par ce que j'ai proposé précédemment?

Edit: Et puis il manque les () autour du while non?