Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyświetlenie miejsca w rankingu
Lethys
post
Post #1





Grupa: Zarejestrowani
Postów: 642
Pomógł: 2
Dołączył: 9.03.2006

Ostrzeżenie: (30%)
XX---


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?


Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




http://nospor.pl/mysql-faq.html#faq-8
Go to the top of the page
+Quote Post
pmir13
post
Post #3





Grupa: Zarejestrowani
Postów: 282
Pomógł: 89
Dołączył: 12.04.2011

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Lethys
post
Post #4





Grupa: Zarejestrowani
Postów: 642
Pomógł: 2
Dołączył: 9.03.2006

Ostrzeżenie: (30%)
XX---


@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 (IMG:style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
pmir13
post
Post #5





Grupa: Zarejestrowani
Postów: 282
Pomógł: 89
Dołączył: 12.04.2011

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Lethys
post
Post #6





Grupa: Zarejestrowani
Postów: 642
Pomógł: 2
Dołączył: 9.03.2006

Ostrzeżenie: (30%)
XX---


Myślałem, że tak będzie dobrze (IMG:style_emoticons/default/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

Ten post edytował Lethys 18.03.2012, 14:21:24
Go to the top of the page
+Quote Post
prowseed
post
Post #7





Grupa: Zarejestrowani
Postów: 433
Pomógł: 64
Dołączył: 29.01.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Jest 1, bo zwraca Ci tylko jeden wiersz.
Po co stosujesz mysql_num_rows?
Go to the top of the page
+Quote Post
Uriziel01
post
Post #8





Grupa: Zarejestrowani
Postów: 307
Pomógł: 37
Dołączył: 9.11.2010
Skąd: Zielona Góra

Ostrzeżenie: (0%)
-----


  1. $liczba_userow =mysql_query("SELECT 1+count(*) FROM uzytkownicy WHERE punkty > $moje_punkty");
Go to the top of the page
+Quote Post
Lethys
post
Post #9





Grupa: Zarejestrowani
Postów: 642
Pomógł: 2
Dołączył: 9.03.2006

Ostrzeżenie: (30%)
XX---


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. ?>


Ten post edytował Lethys 18.03.2012, 17:52:48
Go to the top of the page
+Quote Post
prowseed
post
Post #10





Grupa: Zarejestrowani
Postów: 433
Pomógł: 64
Dołączył: 29.01.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


MANUAL się czyta!
Deprecated, to znaczy, ze funkcja jest przestarzala.
Sprawdz sobie email i pass za pomoca funkcji isset()
Go to the top of the page
+Quote Post
Lethys
post
Post #11





Grupa: Zarejestrowani
Postów: 642
Pomógł: 2
Dołączył: 9.03.2006

Ostrzeżenie: (30%)
XX---


Nie chodziło mi o przestarzałą metodę bo to nie było tematem tego topicu. Ale to też muszę poprawić swoją drogą (IMG:style_emoticons/default/smile.gif)

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

Go to the top of the page
+Quote Post
daniofantasy
post
Post #12





Grupa: Zarejestrowani
Postów: 30
Pomógł: 1
Dołączył: 14.06.2007
Skąd: Chesterfield UK

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/smile.gif)

Ten post edytował daniofantasy 19.03.2012, 12:07:28
Go to the top of the page
+Quote Post
nospor
post
Post #13





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




@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ć?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.12.2025 - 02:38