Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyświetlenie miejsca w rankingu
Forum PHP.pl > Forum > PHP
Lethys
Witam,

Posiadam na swojej stronie ranking userów, który działa na podstawie punktów.

Chciałbym w szybki, łatwy sposób wyświetlić aktualne moje miejsce w rankingu.

Obecnie to wygląda tak:

  1.  
  2. $liczba_userow = @mysql_num_rows(mysql_query("select * from uzytkownicy"));
  3.  
  4. $tsel = mysql_query("select * from uzytkownicy order by punkty desc limit $liczba_userow");
  5. while ($top = mysql_fetch_array($tsel)){
  6.  
  7. $miejsce = $miejsce+1;
  8. $twoja_pozycja = 0;
  9.  
  10. $stat = mysql_fetch_array(mysql_query("select * from uzytkownicy where email='$email' and pass='$haslo'"));
  11.  
  12.  
  13. if ($stat[nazwisko] == $top[nazwisko]){
  14.  
  15.  
  16. $twoja_pozycja = $miejsce;
  17.  
  18. }
  19.  
  20. //wyświetlenie pozycji
  21. print "$twoja_pozycja";
  22.  


Nie da się tego zrobić w jakiś prostszy sposób?


nospor
http://nospor.pl/mysql-faq.html#faq-8
pmir13
Skoro masz dane użytkownika, czyli również jego punkty to może po prostu wystarczyłoby:
  1. SELECT 1+count(*) FROM uzytkownicy WHERE punkty > $twoje_punkty
Lethys
@pmir13

Zrobiłem wdł. Twojego sposobu ale nie działa.

Kod wygląda następująco:

  1.  
  2.  
  3. <?php
  4. // Dane
  5. include ("config.php");
  6. include ("sesja.php");
  7.  
  8. $moje_punkty = $stat[punkty];
  9.  
  10.  
  11. $moje_miejsce = mysql_num_rows(mysql_query("SELECT 1+count(*) FROM uzytkownicy WHERE punkty < $moje_punkty"));
  12.  
  13. print "$moje_miejsce";
  14. ?>
  15.  
  16.  


Kod powinien zliczyć osoby które mają mniej punktów niż ja, czyli powinno mi pokazać numer pozycji przed moją pozycją w rankingu a skrypt wyświetla 1 i tyle sad.gif
pmir13
Liczenie osób, które mają mniej punktów daje pozycję w rankingu od końca, trzeba liczyć tych, którzy mają więcej, dlaczego zmieniłeś znak? Skrypt wyświetla 1, bo jesteś ostatni.
Lethys
Myślałem, że tak będzie dobrze smile.gif ale probowałem również z Twoim znakiem i wynik nadal jest ten sam czyli 1.

Z Twoim znakiem kod wygląda tak:

  1. include ("config.php");
  2. include ("sesja.php");
  3.  
  4. $stat = mysql_fetch_array(mysql_query("select * from uzytkownicy where email='$email' and pass='$haslo'"));
  5.  
  6.  
  7. $moje_punkty = $stat[punkty];
  8.  
  9.  
  10. $liczba_userow = mysql_num_rows(mysql_query("SELECT 1+count(*) FROM uzytkownicy WHERE punkty > $moje_punkty"));
  11.  
  12. print "$liczba_userow";


Wyświetla: 1
prowseed
Jest 1, bo zwraca Ci tylko jeden wiersz.
Po co stosujesz mysql_num_rows?
Uriziel01
  1. $liczba_userow =mysql_query("SELECT 1+count(*) FROM uzytkownicy WHERE punkty > $moje_punkty");
Lethys
Usunąłem mysql_num_rows i kod wygląda obecnie tak:

  1.  
  2. <?php
  3. ini_set('display_errors', 1);
  4.  
  5. // Dane do statystyk
  6. include ("sesja.php");
  7.  
  8. $moje_punkty = $stat['punkty'];
  9.  
  10.  
  11. $liczba_userow = mysql_query("SELECT 1+count(*) FROM uzytkownicy WHERE punkty > $moje_punkty") or die(mysql_error());
  12.  
  13. print "$liczba_userow";
  14. ?>
  15.  


a zwraca mi błędy:

Cytat
Deprecated: Function session_is_registered() is deprecated in /var/www/vhosts/badzlepszy.pl/httpdocs/test/sesja.php on line 7
Resource id #7


Plik sesja.php wygląda tak:

  1. <?php
  2.  
  3.  
  4. include("config.php");
  5.  
  6. if (!session_is_registered("email") || !session_is_registered("pass")) {
  7.  
  8. print "Sesja wygasła!";
  9. }
  10.  
  11. $email = $_SESSION['email'];
  12. $pass = $_SESSION['pass'];
  13.  
  14. $haslo = md5($pass);
  15. $stat = mysql_fetch_array(mysql_query("select * from uzytkownicy where email='$email' and pass='$haslo'"));
  16. if (empty ($stat['id'])) {
  17. print "Niepoprawny login";
  18. }
  19.  
  20. ?>
prowseed
MANUAL się czyta!
Deprecated, to znaczy, ze funkcja jest przestarzala.
Sprawdz sobie email i pass za pomoca funkcji isset()
Lethys
Nie chodziło mi o przestarzałą metodę bo to nie było tematem tego topicu. Ale to też muszę poprawić swoją drogą smile.gif

Skrypt zrobiłem, trzeba było zastosować: mysql_fetch_array żeby wyciagnąć dane z zapytania.

daniofantasy
bo masz odpowiedz z mysql w postaci resource i powinienes przypisac ja do tablicy zeby cos z tego powyciagac

wrzuc zapytanie w te sprytna funkcyjke (ale najpierw sie polacz z db biggrin.gif) :

  1. /**
  2.  * Returns db query as an assoc array
  3.  *
  4.  * @param String $query
  5.  * @return array
  6.  */
  7.  
  8. function dbSelectAssoc($sQuery) {
  9. $rResult = mysql_query($sQuery);
  10. if (sizeof($rResult) > 0 && !empty($rResult) && @mysql_num_rows($rResult) != 0)
  11. while($aResult = mysql_fetch_assoc($rResult))
  12. $aResults[] = $aResult;
  13. return $aResults;
  14. }


i zwroci Ci tablice asocjacyjna

potem odpal na niej foreach:

  1. $moje punkty = 10 # zmienna testowa - w nia pakujesz swoje punkty
  2. $x = 0;
  3.  
  4. if (sizeof($aResults) > 0)
  5. foreach ($aResults as $aCurrRes)
  6. if ($aCurrRes['punkty'] < $moje_punkty) $x++;


i pod zmienna $x masz ilosc osob z mniejsza iloscia punktow smile.gif
nospor
@daniofantasy nie dość ze piszesz odpowiedź po tym, jak problem jest już rozwiązany, to na dodatek podajesz zdecydowanie gorsze rozwiązanie niż te, które użyto.
Czemu to ma służyć?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.