JeuWeb - Crée ton jeu par navigateur
probleme pour mes statistiques ... - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : probleme pour mes statistiques ... (/showthread.php?tid=1720)

Pages : 1 2


probleme pour mes statistiques ... - leni - 06-09-2007

bonjours tout le monde, j'ai une petite erreur que voici :
Citation :You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1','2'' at line 1


avec mes statistiques que voici :


Code PHP :
<?php 
$retour
= mysql_query("SELECT COUNT(*) AS ppl FROM user") or die(mysql_error());
$count = mysql_fetch_array($retour) or die(mysql_error());
$nb_page0 = $count['ppl']/15;
$nb_page = ceil($nb_page0);


if (empty(
$_GET['order'])) // on recupère l'ordre dans lequelle les donnés doivent etre classés si elles sont vide
{
$order = "points";
}
else
{
$order = mysql_real_escape_string($_GET['oder']); // on recupère la demande d'odre du joueur
}
if (empty(
$_GET['page'])) // la page que demande le joueur
{
$page = 1;
}
else
{
$order = intval($_GET['page']); //lz numero de la page
}


$limit2 = $page*15; // seulement 15 membres par page
$limit1 = $limit2-15; // le premier membre dans la requete sql

if ($page >= $nb_page)
{
$diff = $count['ppl']%15; // la difference si $limit2 ne tombe pas sur un multiple de 15
$limit1 = ($page*15)-$diff;
$limit2 = $limit1+$count['ppl'];
}
if (
$count['ppl'] <=15)
{
$limit1 = 1;
$limit2 = $count['ppl'];
}

$reponse = mysql_query("SELECT pseudo, points, alliance, ptsoff, ptsdef FROM user ORDER BY '".$order."' LIMIT '".$limit1."','".$limit2."'") or die(mysql_error()); // la requette saoulante ...
// le tableau qui presente les donnéés
?>
<table align="center" width="90%" border="1">
<tr>
<td width="15%"><p align="center">pseudo</p></td>
<td width="10%"><p align="center">alliance</p></td>
<td width="25%"><p align="center">points</p></td>
<td width="25%"><p align="center">points offenssifs</p></td>
<td width="25%"><p align="center">points deffenssifs</p></td>
</tr>
<?php
while ($donnees = mysql_fetch_array($reponse))// les donnés
{
?>
<tr>
<td width="15%"><p align="center"><?
if ($donnees['pseudo'] == $_SESSION['pseudo']){
echo
'<a href="statistique.php?id=profil&amp;player="'.$donnees['pseudo'].'""><strong>';
echo
$donnees['pseudo'];
echo
'<\strong></a>';
}
else {
echo
'<a href="statistique.php?id=profil&amp;player="'.$donnees['pseudo'].'"">';
echo
$donnees['pseudo'];
echo
'</a>';
}
?></p></td>
<td width="10%"><p align="center"><?
if ($donnees['alliance'] == $_SESSION['alliance']){
echo
'<a href="alliance.php"><strong>';
echo
$donnees['alliance'];
echo
'<\strong></a>';
}
else {
echo
'<a href="statistique.php?id=profil&amp;alliance="'.$donnees['alliance'].'"">';
echo
$donnees['alliance'];
echo
'</a>';
}
?></p></td>
<td width="25%"><p align="center"><? echo $donnees['points']; ?></p></td>
<td width="25%"><p align="center"><? echo $donnees['ptsoff']; ?></p></td>
<td width="25%"><p align="center"><? echo $donnees['ptsdef']; ?></p></td>
</tr>
<?php
}
?> </table>
<?php
$nb0
= 1;
while (
$nb0 = $nb_page) // les autres page de statistiques.
{
echo
' ';
echo
"<a href=\"statistique.php?id=stat&amp;order=pts&amp;page=$nb0\">page $nb0</a>";
echo
' ';
}
}
mysql_close(); ?>

c'est de cette ligne que provient l'erreur :
Code PHP :
<?php 
$reponse
= mysql_query("SELECT pseudo, points, alliance, ptsoff, ptsdef FROM user ORDER BY '".$order."' LIMIT '".$limit1."','".$limit2."'") or die(mysql_error());

quelqu'un comprend le probleme ? personelement, pas moi ...

Aussi, jevoudrais l'ameliorer, et fair en sorte que le joueur quand il ouvre la page tombe direct sur lapage ou il se doit d'etre.


quelqu'un serai m'aider a fair sa ?

j'espère que mes commentraires vous ont aider a comprendre mon code, sin vous avez des questions, demandez moi, je suis dispo 7/7 mdr !


RE: probleme pour mes statistiques ... - Roworll - 06-09-2007

Après un ORDER BY, ce qui doit apparaître c'est le nom d'un champ.

D'après le code de ta requête SQL, tu encadres ce nom avec des guillemets (ORDER BY '".$order."')

Du coup, MySQL essaye de faire: ORDER BY 'points'
Essayes de mettre plutôt ORDER BY ".$order." pour obtenir ORDER BY points

Au pire, si tu veux encadrer le nom de ton champ pour des raisons de sécurité, utilises le caractère `.
Cela donnerai ORDER BY `".$order."` dans ton code et sera évalué comme
ORDER BY `points`


RE: probleme pour mes statistiques ... - NicoMSEvent - 06-09-2007

[mode schtroumph a lunette on]
je dirais même plus, c'est pareil pour le LIMIT, il ne faut pas de ' , mais des ` si tu veux absolument entourer tes champs ^^
[mode schtroumph a lunette off]


RE: probleme pour mes statistiques ... - leni - 06-09-2007

j'ai tester votre idée, roworll, j'ai virer les apostrophes et c'était presque sa Smile par comtpe sa a tout planter firefox xD. il y a 2 beg : un qui est chaint : j'ai 2 membres, et il n'y en as qu'un seul qui aparait :'( aucune idée de pk, vu que j'ai que 2 membres, donc c'est se code la qui devait etre utiliser :

f ($count['ppl'] <=15)
{
$limit1 = 1;
$limit2 = $count['ppl'];
}

.........

l'autre pbm vient de ma boucle, c'est sa qui as tout fait planter firefox ^^ elle est infinie xD

si vous avez des idés a propos de cette boucle et de se membre invisible, faites en moi part, je vais fair des tests, je doute que le pbm soit bien grave Smile

merci en tout cas Smile


RE: probleme pour mes statistiques ... - NicoMSEvent - 06-09-2007

ça viendrait pas du LIMIT 1, ... ? essaye de remplacer ça par LIMIT 0,...


RE: probleme pour mes statistiques ... - joshua - 06-09-2007

essaie de taper tes requetes directement dans un editeur mysql, tu verras si elles fonctionnent. C'est la meilleure manière que 'jai trouvée pour les debuguer ^^


RE: probleme pour mes statistiques ... - Plume - 06-09-2007

Je penche pour la remarque de Nico. Le LIMIT 1 fait passer à la trappe un résultat d'office. Tu aurais pu t'en rendre compte en remarquant que le membre qui apparait est le deuxième de la liste. Je pense que c'est le cas en tout cas, sinon, au temps pour moi Smile


RE: probleme pour mes statistiques ... - Roworll - 06-09-2007

Pareil pour le LIMIT.
Il faut commencer à 0 et pas à 1 afin d'avoir le premier dans la liste.

Sinon, pour la boucle infinie, à mon avis, rien à voir avec la requête mais plutôt avec la boucle placée après :
Code PHP :
<?php 
$nb0
= 1;
while (
$nb0 = $nb_page) // les autres page de statistiques.
{
echo
' ';
echo
"<a href=\"statistique.php?id=stat&order=pts&page=$nb0\">page $nb0</a>";
echo
' ';
}

Si on entre dans cette boucle (avec $nb0 = $nb_page) on en sortira jamais car aucune des variables ne change à l'intérieur.


RE: probleme pour mes statistiques ... - Byleth - 07-09-2007

Encore pire :
Citation :while ($nb0 = $nb_page) // les autres page de statistiques
.

Là tu ne fais pas de comparaison, tu assignes à $nb0 une valeur. Hors cette action te rendra toujours true, ta requête est donc infinie ...


RE: probleme pour mes statistiques ... - leni - 07-09-2007

en effet, c'était ça ... il fallait un '0' a la limite

pour la boucle, j'avais corriger sa, dsl de ne pas avoir editer Big Grin mais merci en tout cas Smile

il rest qu'un seul petit detail : l'ordre... voyez par vous même ! http://www.crusades.fr/statest.php

Tant qu'on y est, il serai bien de fair en sorte que lz page s'ouvre direct sur celle de l'utilisateur ...
pour sa, j'ai pensser a 2 solutions :
-fair une moyenne, c'est sur que le code soit simple, mais c'est pas dit qu'il tombre dessus
-fair un truc compliquer, mais je suis pas sur que mysql soit content...
je voudrais fair une query coomme sa :
Code PHP :
<?php 
$req
= mysql_query("COUNT(*) AS plusfort FROM user WHERE points>".$_session['points']."");
$F = mysql_fetch_array($req);
$page = ceil($F)
c'est faisable ou pas ?