Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Liczenie Użytkowników
Forum PHP.pl > Forum > Przedszkole
Matimor
Witajcie Ponownie
Jak mogę zbudować licznik zarejestrowanych osób i ostatnio zarejestrowaną osobę, aby wyświetlało mi te dane na stronie głównej. Chcę to zrobić poprzez MySql ponieważ tam robiłem wpis tabeli.

Dane Tabeli:
Nazwa: user
Hasła: password
Loginy: login
ID: user_id

I na stronie głównej poprzez połączenie MySql wyświetlać mi ma:
Mamy [liczba] Zarejestrowanych Użytkowników
Ostatnio Zarejestrowany: [username]
sadistic_son
Masz tu prawie gotowe rozwiazanie:

  1. $dbc = @mysql_connect(HOST, USER, PASSWORD) or die ('Nie moglem polaczyć się z MySQL-em: ' . mysql_error() );
  2. @mysql_select_db(DB_NAME) or die ('Nie udalo się wybrać bazy danych: ' . mysql_error() );
  3.  
  4. $query="SELECT nazwa_usera FROM tabela_uzytkownicy ORDER BY id asc";
  5.  
  6. $result = @mysql_query ($query);
  7. $num = mysql_num_rows ($result);
  8.  
  9. if($num>0){
  10. while($row = mysql_fetch_array($result, MYSQL_NUM){
  11. $last_user=$row[0];
  12. }
  13. $ostatni=$last_user;
  14. echo "Mamy $num Zarejestrowanych Użytkowników<br />
  15. Ostatnio Zarejestrowany: $ostatni ";
  16. }
  17. else{
  18. echo 'Nie ma zarejestrowanych userów';
  19. }
  20.  
#luq
sadistic_son bez sensu, po co pobierać wszystkich jak chce się tylko w tym miejscu mieć ostatniego oraz ilość wszystkich? Nie optymalne.

Matimor
Do pobrania ostatniego: ORDER BY, LIMIT
Do pobrania liczby wszystkich: COUNT
Matimor
Ok Dzięki ale mam jakiś taki błąd.

  1. Parse error: syntax error, unexpected '{' in
sadistic_son
Cytat(#luq @ 23.08.2009, 10:17:23 ) *
sadistic_son bez sensu, po co pobierać wszystkich jak chce się tylko w tym miejscu mieć ostatniego oraz ilość wszystkich? Nie optymalne.

Matimor
Do pobrania ostatniego: ORDER BY, LIMIT
Do pobrania liczby wszystkich: COUNT

No racja, Twoj jest bardziej optymalny ale moj tez dziala.

Cytat(Matimor @ 23.08.2009, 10:24:12 ) *
  1. Parse error: syntax error, unexpected '{' in

Masz gdzies za duzo o jeden '{'. Wkodzie ktory ja napisalem wszystko sie zgadza.
Matimor
Cytat(sadistic_son @ 23.08.2009, 10:29:28 ) *
No racja, Twoj jest bardziej optymalny ale moj tez dziala.


Masz gdzies za duzo o jeden '{'. Wkodzie ktory ja napisalem wszystko sie zgadza.



Klamry mam ok więc o co chodzi worriedsmiley.gif
Quantum
Cytat
Parse error: syntax error, unexpected '{' in


masz dalej napisane on line xx i w tej linii xx masz błąd, swoją drogą zaopatrz się w jakiś dobry edytor,
polecam na start notepad++, dużo łatwiej sprawdzić gdzie masz błąd winksmiley.jpg
#luq
Cytat(sadistic_son @ 23.08.2009, 10:29:28 ) *
No racja, Twoj jest bardziej optymalny ale moj tez dziala.

Jeśli oba sposoby działają, a podany przeze mnie, dodatkowo jest bardziej optymalny to niech autor pomyśli który zastosować winksmiley.jpg
thek
#luq podał najoptymalniejszy chyba sposób smile.gif
Robisz count w bazie oraz robisz ORDER BY id DESC LIMIT 1
Ja bym dodał jeszcze jedną rzecz... Wstaw w obu warunek WHERE active = 1, gdzie active oznacza, czy zarejestrowany użytkownik aktywował swoje konto. Bo na co mi wiadomość o liczbie userów, włącznie z tymi, którzy nawet nie byli na tyle inteligentni, by kliknąć w link aktywacyjny posłany do nich mailem? winksmiley.jpg Istotni są tylko CI, którzy to zrobili, bo w ten sposób można wyeliminować część botów chcących zarejestrować konta by spamować w portalu.
Matimor
Odkopie lekko temat.

Nadal mam z tym problem pisze mi, że mam za dużo {

  1. <?php
  2. mysql_connect('***','***','***')
  3. or die('Nieudane połączenie z bazą danych.');
  4. or die('Nie udało się wybrać bazy danych.');
  5.  
  6. $query = "SELECT username FROM users ORDER BY id asc";
  7.  
  8. $result = @mysql_query ($query);
  9. $num = mysql_num_rows ($result);
  10.  
  11. if($num>0)
  12. {
  13. while($row = mysql_fetch_array($result, MYSQL_NUM)
  14. {
  15. $last_user=$row[0];
  16. }
  17. $ostatni=$last_user;
  18. }
  19. ?>
Wicepsik
W 14 linijce masz za mało nawiasów.
thek
Optymalizuj to chłopie i popraw byki winksmiley.jpg
  1. SELECT username FROM users ORDER BY id DESC

DESC ma być. ASC to sortowanie od najmniejszej do największej. A Ty masz mieć najnowszego usera, czyli z największym id, a więc ma być DESC. Na dodatek po co ślesz cała tabelę userów? Masz posłać tylko liczbę userów i najnowszego więc zrób porządne zapytanie smile.gif
  1. SELECT username, count(id) AS ile FROM users GROUP BY id DESC LIMIT 1

To da Ci tylko jeden rekord wynikowy, który zawiera zarówno nazwę ostatnio zarejestrowanego użytkownika, jak i liczbę userów w bazie. Jeśli będziesz miał w bazie 500 userów to będziesz do skryptu posyłał 500 rekordów by sprawdzić wartość tylko jednego z nich? Szczerze wątpię smile.gif
Matimor
Ok zrobiłem to tak, ale teraz mi nie pokazuje tego w index.php, użyłem require.

  1. <?php
  2. mysql_connect('***','***','***')
  3. or die('Nieudane połączenie z bazą danych.');
  4. or die('Nie udało się wybrać bazy danych.');
  5.  
  6. $query = "SELECT username, count(id) AS ile FROM users GROUP BY id DESC LIMIT 1";
  7.  
  8. $result = @mysql_query ($query);
  9. $num = @mysql_num_rows ($result);
  10.  
  11. if($num>0)
  12. {
  13. while($row = mysql_fetch_array($result, MYSQL_NUM))
  14. {
  15. $last_user=$row[0];
  16. }
  17. $ostatni=$last_user;
  18. }
  19. ?>
Kszyhuu
$zapytanie = mysql_query("SELECT login FROM user");
$ilosc_wierszy = mysql_num_rows($zapytanie);
$last= mysql_query("SELECT * FROM user ORDER BY user_id DESC LIMIT 1");


echo 'Mamy <b>'.$ilosc_wierszy.'</b> zarejestrowanych użytkowników.<br>
Ostatnio zarejestrowany:<b>' .$last['user'].'</b>.';
Matimor
Dalej to samo...

Cały czas mam błąd w tym $last['user']
  1. Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
thek
Po co uruchamiać pętle blinksmiley.gif Moje zapytanie zwraca maksymalnie 1 (słownie jeden) rekord. Jeśli sprawdzisz czy zwróciło cokolwiek to już tylko wyciągasz dane.
  1. $result = mysql_query( "SELECT username, count(id) AS ile FROM users GROUP BY id DESC LIMIT 1" );
  2. if( $result )
  3. $answer = mysql_fetch_array( $result );
  4.  
  5. $ile = $answer['ile'];
  6. $last = $answer['username'];

Czy to naprawdę takie trudne? I zobaczcie o ile sobie w porównaniu do innych skróciłem kod. Myślenie nie boli smile.gif

@Kszyhuu:
  1. mysql_query("SELECT login FROM user");
?
Czy jeśli baza miałaby 10000 userów to zwracałbyś 10000 loginów by je sobie potem w php funkcją num_rows policzyć? Od tego masz gotowe funkcje w bazie danych więc używaj ich. Po to masz właśnie count() w bazie.

@Matimor: masz błąd bo masz spację wewnątrz echo. nazwa => T_ENCAPSED_AND_WHITESPACE o tym mówi. Zaraz po b a przed kropką.
Matimor
thek Wielkie dzięki działa poprawnie.

Temat do wygaszenia.
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.