creer un classement php

creer un classement php - PHP - Programmation

Marsh Posté le 10-02-2009 à 17:35:33    

Bonjour, je viens de créer un site mais je suis pas très doué en php.
Je voudrais créer 2 classements par ordre décroissant de mes membres:
le 1er, par ordre des meilleurs cliqueurs de liens
Le second, par ordre de meilleurs parrains
Les 10 premiers seraient affichés et la 11eme ligne représente mon classement
 
Sur les 2 classements, nous devons voir ceci (voir ci-dessous). 1 classement comptabilise les clics,
l'autre les filleuls (sur 2 pages différentes)
 
 
            Best clic - Best referrer
 
Nr    ----     User       ----      Clics      ----      Referrals
1    ----   Pseudo1    ----      400         ----       30
2    ----   Pseudo2    ----      390        ----       120
3    ----   Pseudo3      ----    380        ----      1900
4    ----   Pseudo4      ----    370        ----        12
5    ----   Pseudo5      ----    360        ----         1
6    ----   Pseudo6     ----     300         ----       39
7    ----   Pseudo7     ----     250         ----       79
8    ----   Pseudo8     ----     200         ----     18096
9    ----   Pseudo9     ----     150        ----        31
10   ----  Pseudo10     ----     50         ----        4
X   ----   Moi         ----          4          ----        0
 
 
            Best clic - Best referrer
 
Nr     ----    User     ----        Clics      ----      Referrals
1  ----     Pseudo1      ----     21          ----     1200
2   ----    Pseudo2      ----     90          ----     1000
3   ----    Pseudo3      ----    128        ----       900
4   ----    Pseudo4      ----     80         ----       800
5    ----   Pseudo5      ----    243         ----      700
6    ----   Pseudo6     ----      4           ----      500
7    ----   Pseudo7    ----      19        ----        300
8    ----   Pseudo8     ----    123        ----       200
9    ----   Pseudo9     ----    321        ----       100
10   ----  Pseudo10    ----   1230       ----        15
X    ----  Moi         ----         8         ----        10
 
 
Je suis allé dans mon phpmyadmin et il m'a donné ces codes:
pour le classement "visits"
 
$sql = 'SELECT DISTINCT `username`, `visits`, `referals` FROM `tb_users` ORDER BY `visits` DESC LIMIT 0, 10 ';  
 
pour le classement "referrals"
 
$sql = 'SELECT DISTINCT `username`, `visits`, `referals` FROM `tb_users` ORDER BY `referals` DESC LIMIT 0, 10 ';
 
Mais je ne sais pas comment mettre ceci sur une page pour obtenir mon classement.  
Est-ce possible de me dire exactement ce que je dois mettre dans ma page pour obtenir ces 2 classements ?  
 
Merci bcp


Message édité par tszlachter le 10-02-2009 à 17:37:24
Reply

Marsh Posté le 10-02-2009 à 17:35:33   

Reply

Marsh Posté le 10-02-2009 à 17:44:40    

où en es-tu pour l'instant ? Montre nous un peu de code stp.

Reply

Marsh Posté le 10-02-2009 à 17:59:41    

Ben en gros j'en suis nul part
 
Voila ma table : tb_users
et voila les champ qui m'intéresse dans cette table : username , visits , referals
 
et en visitant d'autre forum j'ai fait ceci:
 
$sql = 'SELECT DISTINCT `username`, `visits`, `referals` FROM `tb_users` ORDER BY `visits` DESC LIMIT 0, 10 ';  
 
$sql = 'SELECT DISTINCT `username`, `visits`, `referals` FROM `tb_users` ORDER BY `referals` DESC LIMIT 0, 10 ';  
 
Mais je ne sais pas comment faire mon tableau et y insérer les données
Je ne sais pas non plus ajouter la 11eme ligne avec les infos du membre.


Message édité par tszlachter le 10-02-2009 à 18:00:49
Reply

Marsh Posté le 10-02-2009 à 18:02:09    

en fait si tu n'y connais rien il ne faut pas demander qu'on fasse le boulot à ta place sur ce forum mais il faut que tu apprennes à l'aide de tutos ou de livres. Ensuite, si tu rencontres des difficultés tu pourras éventuellement demander de l'aide sur ce forum.

Reply

Marsh Posté le 10-02-2009 à 18:12:11    

bah dsl ... je pensais que c'était un code simple pour les connaisseurs.
Maintenant si tu appelles ca un "boulot" ca doit etre des lignes et des lignes de codages qui doivent prendre au moins 2-3h à faire.. Dans ce cas je suis d'accord pour appeler ca un boulot
 
Il y a peut etre d'autres personnes plus sympa qui voudront m'aider.
Pour moi, juste demander un classement, c'est pas faire le site à ma place :) (on peut très bien savoir mettre ses chaussures mais pas savoir les lasser).
 
Bon ben, si d'autres personnes veulent m'aider ?

Reply

Marsh Posté le 10-02-2009 à 18:20:39    

bah non parce que trier, afficher, insérer, bah çà demande des formulaires, des vérifications, plein de choses autours du code mysql.
Donc on ne fait pas à la place des gens s'ils ne s'y connaissent pas du tout, surtout s'ils se disent "j'ai la flemme d'apprendre ou d'installer un cms/blog/etc, je préfère faire faire çà à des gens sur un forum". Ici c'est un forum de programmation, on est pas là pour faire des scripts sur mesure. N'y voit pas la de la méchanceté.
 
Pour finir, quand tu dis c'est un code simple pour les connaisseurs... Je dirais en PHP c'est le contraire : le débutant ne pense pas aux contraintes de son programme, aux problèmes de sécurité, de compatibilité, etc..., alors que le connaisseur fait attention à tout cela.
:jap:

Reply

Marsh Posté le 10-02-2009 à 23:15:56    

Bon voila un codage que quelqu'un m'a proposé mais il y a encore 2 erreurs (en rouge)
 
voici le code
 

Code :
  1. <?php
  2. // on se connecte à MySQL (à remplir)  
  3. $db = mysql_connect('localhost', 'login', 'password');
  4. // on sélectionne la base (à remplir)  
  5. mysql_select_db('tb_users',$db); 
  6. // Tableau des meilleurs posteurs  
  7. $recup_posteurs =mysql_query( 'SELECT DISTINCT `username`, `visits`, `referals` FROM `tb_users` ORDER BY `visits` DESC LIMIT 0, 10 '); 
  8. $compteur = 1;
  9. while($best_posteurs = mysql_fetch_array($recup_posteurs)){
  10.      // Mise en forme des données à revoir  
  11.      echo $compteur."<br/>";     
  12.      echo $best_posteurs ["username"]."<br/>";
  13.      echo $best_posteurs ["visits"]."<br/>";
  14.      echo $best_posteurs ["referals"]."<br/>";
  15.      $compteur++;
  16. }
  17. // Tableau des meilleurs parrains  
  18. $recup_parrains =mysql_query( 'SELECT DISTINCT `username`, `visits`, `referals` FROM `tb_users` ORDER BY `referals` DESC LIMIT 0, 10 '); 
  19. $compteur = 1;
  20. while($best_parrains = mysql_fetch_array($recup_posteurs)){
  21.      // Mise en forme des données à revoir  
  22.      echo $compteur."<br/>";     
  23.      echo $best_parrains["username"]."<br/>";
  24.      echo $best_parrains["visits"]."<br/>";
  25.      echo $best_parrains["referals"]."<br/>";
  26.      $compteur++;
  27. }
  28. ?>


 
Merci pour votre aide.

Message cité 1 fois
Message édité par tszlachter le 10-02-2009 à 23:26:06
Reply

Marsh Posté le 11-02-2009 à 09:56:18    

C'est pas plutot dans les requêtes qu'il y a des erreurs?
 
'SELECT DISTINCT `username`, `visits`, `referals` FROM `tb_users` ORDER BY `visits` DESC LIMIT 0, 10 '
 
Essaye plutot
"SELECT DISTINCT `username`, `visits`, `referals` FROM `tb_users` ORDER BY `visits` DESC LIMIT 0, 10 "

Reply

Marsh Posté le 11-02-2009 à 09:59:04    

les délimiteurs de chaînes PHP n'ont rien à voir avec la requête, le problème vient sûrement du fait qu'il n'a pas adapté le code à sa base de données.

Reply

Marsh Posté le 11-02-2009 à 10:42:35    

j'ai essayé le conseil de aspirateur mais rien n'y change.
 
J'ai adapté le code à ma base (localhost login et password ont bien évidemment été changé,ainsi que ma table...).
 
Il y a tjrs le problème sur les 2 même lignes
 
Les requêtes je les avaient créées avec phpmyadmin donc il ne peut pas y avoir d'erreur à ce niveau.

Reply

Marsh Posté le 11-02-2009 à 10:42:35   

Reply

Marsh Posté le 11-02-2009 à 10:51:48    

Tu dis que ca marche pas, peux on avoir le message d'erreur?

Reply

Marsh Posté le 11-02-2009 à 11:09:49    

Oui biensur
 
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /homez.38/showbux/test/classement.php on line 33
 
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /homez.38/showbux/test/classement.php on line 46

Reply

Marsh Posté le 11-02-2009 à 11:17:15    

ok, on s'en doutais un peu en fait :D
ce qui nous intéresse c'est le message d'erreur retourné par mysql. (echo mysql_error(); après la requête).

Reply

Marsh Posté le 11-02-2009 à 11:24:42    

Heu, je trouve ou ce message d'erreur ?  
 
Voila ma page (en test):
http://test.showbux.net/classement.php

Reply

Marsh Posté le 11-02-2009 à 11:51:02    

tszlachter a écrit :

Bon voila un codage que quelqu'un m'a proposé mais il y a encore 2 erreurs (en rouge)


 

tszlachter a écrit :

Heu, je trouve ou ce message d'erreur ?


 :heink:  
Comment sais-tu qu'il y a deux erreurs ?

Reply

Marsh Posté le 11-02-2009 à 11:53:06    

tszlachter a écrit :

Heu, je trouve ou ce message d'erreur ?  
 
Voila ma page (en test):
http://test.showbux.net/classement.php


non mais tu lis mes messages  [:massys]  
Je viens te de le dire !
echo mysql_error(); arpès l'appel de mysql_query !  :o

Reply

Marsh Posté le 11-02-2009 à 12:05:11    

macgawel:
Je le sais car j'ai testé le code en ligne
 
Luc@s:
J'ai fais l'appel de la requete SQL:
SELECT DISTINCT `username` , `visits` , `referals`  
FROM `tb_users`  
ORDER BY `visits` DESC  
LIMIT 0 , 10  
 
sur phpmyadmin, et il n'y a pas d'erreur, ca me classe les membres par ordre

Reply

Marsh Posté le 11-02-2009 à 12:06:33    


Reply

Marsh Posté le 11-02-2009 à 12:16:24    

Tiens, faut que je me le note dans les bonnes escuses ça :
"C'est pas la peine de débugguer ici par ce que ça marche ailleurs." Je me demande ce que mon chef dirait si je là lui sortais celle là.
 
Entre nous, si tu ne veux pas savoir ce qui se passe, continu comme ça mais ne t'attend alors pas à obtenir des solutions miraculeuses sur ce forum. Par contre, si tu veux savoir pourquoi ça ne marche pas, fait ce que luc@s t'as dit.
 
En passant, je suis étonné que Luc@s continue d'insister pour t'aider. Après une réponse comme la tienne j'aurais laissé tomber. [:airforceone]

Reply

Marsh Posté le 11-02-2009 à 12:24:45    

J'ai dit dans mon premier message que je n'étais pas du tout un as du php/mysql
 
on me demande de trouver echo mysql_error(); arpès l'appel de mysql_query.
 
J'ai demandé ou trouver cela, on me répond : Je viens te de le dire !
 
Moi je ne sais pas si je dois aller dans phpmyadmin, regarder dans le codage, ou aller sur ma page d'erreur sur le site... J'essaye de faire ce que vous me dites, je suis de bonne volonté, je vous remercie pour votre aide, mais bon il faut aussi comprendre qu'un débutant peu pas comprendre tout ce que vous dites
 
Alors tanpis ... C'est pas grave. Ca fera une option de moins sur mon site.

Message cité 1 fois
Message édité par tszlachter le 11-02-2009 à 12:29:02
Reply

Marsh Posté le 11-02-2009 à 12:31:49    

tszlachter a écrit :

J'ai dit dans mon premier message que je n'étais pas du tout un as du php/mysql
 
on me demande de trouver echo mysql_error(); arpès l'appel de mysql_query.
 
J'ai demandé ou trouver cela, on me répond : Je viens te de le dire !
 
Alors tanpis ... C'est pas grave. Ca fera une option de moins sur mon site.


EUh, non, tu as dit, je cite :

tszlachter a écrit :

Heu, je trouve ou ce message d'erreur ?


Et pour çà il faut faire :
echo mysql_error();
Ce qui va afficher l'erreur retournée par mysql.
 
Mais bon je devine que tu t'es très mal exprimé et que tu voulais dire "Bah ouais mais je le mets où çà  [:julm3]"
Dans ce cas la réponse est : après l'appel de la fonction mysql_query().
Et si tu ne comprends pas çà, alors je ne peux plus rien pour toi.

Reply

Marsh Posté le 11-02-2009 à 12:43:31    

macgawel a écrit :

 


 :heink:
Comment sais-tu qu'il y a deux erreurs ?

 
tszlachter a écrit :

macgawel:
Je le sais car j'ai testé le code en ligne


[:domen1]
Et quand tu l'as testé en ligne, comment as-tu découvert qu'il y avait deux erreurs ?

 

C'était marqué "Vous avez deux erreurs" ? Tu as eu une révélation ? Autre - précisez ?

 

Avant de t'énerver parce qu'on ne t'aide pas, essaye d'expliquer clairement le problème, merci.


Message édité par macgawel le 11-02-2009 à 12:45:54
Reply

Marsh Posté le 11-02-2009 à 12:45:36    

Merci luc@s j'ai compris.
J'ai trouvé le problème et l'affichage du classement est ok.
Mais bon, comme à mon habitude... il y a un problème.
 
Ca affiche le classement avec comme score pour le premier 99 ensuite 98 97 ...
Et ça classe les membres avec plus de 100 clics dans le fond du classement
 
Idem pour les meilleurs parrains
 
Voir ici:
http://test.showbux.net/classement.php

Message cité 1 fois
Message édité par tszlachter le 11-02-2009 à 12:48:28
Reply

Marsh Posté le 11-02-2009 à 12:49:49    

tszlachter a écrit :

Merci luc@s j'ai compris.
J'ai trouvé le problème et l'affichage du classement est ok.
Mais bon, comme à mon habitude... il y a un problème.
 
Ca affiche le classement avec comme score pour le premier 99 ensuite 98 97 ...
Et ça classe les membres avec plus de 100 clics dans le fond du classement
 
Voir ici:
http://test.showbux.net/classement.php


Si tu vas voir ta table dans phpmyadmin, quel est le type du champ sur lequel tu fais le tri ?

Reply

Marsh Posté le 11-02-2009 à 12:58:56    


table : tb_users
champ :visits  
type: varchar(150)  
 

Reply

Marsh Posté le 11-02-2009 à 13:07:02    

"type: varchar" donc du texte. Il est donc normal qu'une chaine qui commence par le caractère '9' soit considéré comme supérieur à une chaine qui commence par le caractère '1' (les comparaisons de chaines se font caractère par caractère)
 
Change le type de cette zone en TyniInt si le plus grand nombre possible est 100 (ou en integer si t'as besoin de plus grand) et avec avec "unsigned" (nombres positif uniquement) si tu ne veux pas avoir de nombre négatif.

Reply

Marsh Posté le 11-02-2009 à 13:23:23    

Disons que pour le moment les 1er sont à 127 clics mais par le futur il n'y aura pas de limite.
J'ai changé le type en TyniInt (attributs unsigned) et ca marche bien
Mais je n'ai pas compris, comment faire pour mettre une plus grande valeur ?

Reply

Marsh Posté le 11-02-2009 à 14:13:23    

tszlachter a écrit :

Disons que pour le moment les 1er sont à 127 clics mais par le futur il n'y aura pas de limite.
J'ai changé le type en TyniInt (attributs unsigned) et ca marche bien
Mais je n'ai pas compris, comment faire pour mettre une plus grande valeur ?


[:rtfm]
TinyInt = Tiny Int(eger) = Petit Entier.
Int = Int(eger) = Entier.
Etc.

Reply

Marsh Posté le 11-02-2009 à 15:51:21    

ah ok !
 
Merci bcp à vous tous pour votre aide et votre GRANDE patience avec moi ^^
 
Très cordialement.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed