Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Liczenie Użytkowników, Budowa?
Matimor
post
Post #1





Grupa: Zarejestrowani
Postów: 287
Pomógł: 10
Dołączył: 22.08.2009

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


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]
Go to the top of the page
+Quote Post
sadistic_son
post
Post #2





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

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


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.  


Ten post edytował sadistic_son 23.08.2009, 09:11:07
Go to the top of the page
+Quote Post
#luq
post
Post #3





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

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


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





Grupa: Zarejestrowani
Postów: 287
Pomógł: 10
Dołączył: 22.08.2009

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


Ok Dzięki ale mam jakiś taki błąd.

  1. Parse error: syntax error, unexpected '{' in
Go to the top of the page
+Quote Post
sadistic_son
post
Post #5





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

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


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





Grupa: Zarejestrowani
Postów: 287
Pomógł: 10
Dołączył: 22.08.2009

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


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





Grupa: Zarejestrowani
Postów: 450
Pomógł: 84
Dołączył: 27.11.2008
Skąd: Warszawa

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


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

Ten post edytował sniffer32 23.08.2009, 09:52:27
Go to the top of the page
+Quote Post
#luq
post
Post #8





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

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


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ć (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
thek
post
Post #9





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




#luq podał najoptymalniejszy chyba sposób (IMG:style_emoticons/default/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? (IMG:style_emoticons/default/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.
Go to the top of the page
+Quote Post
Matimor
post
Post #10





Grupa: Zarejestrowani
Postów: 287
Pomógł: 10
Dołączył: 22.08.2009

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


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





Grupa: Zarejestrowani
Postów: 1 575
Pomógł: 299
Dołączył: 26.03.2009

Ostrzeżenie: (20%)
X----


W 14 linijce masz za mało nawiasów.
Go to the top of the page
+Quote Post
thek
post
Post #12





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Optymalizuj to chłopie i popraw byki (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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ę (IMG:style_emoticons/default/smile.gif)

Ten post edytował thek 25.08.2009, 21:56:04
Go to the top of the page
+Quote Post
Matimor
post
Post #13





Grupa: Zarejestrowani
Postów: 287
Pomógł: 10
Dołączył: 22.08.2009

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


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





Grupa: Zarejestrowani
Postów: 157
Pomógł: 32
Dołączył: 24.08.2009

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


$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>.';

Ten post edytował Kszyhuu 26.08.2009, 13:44:03
Go to the top of the page
+Quote Post
Matimor
post
Post #15





Grupa: Zarejestrowani
Postów: 287
Pomógł: 10
Dołączył: 22.08.2009

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


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





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Po co uruchamiać pętle (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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ą.
Go to the top of the page
+Quote Post
Matimor
post
Post #17





Grupa: Zarejestrowani
Postów: 287
Pomógł: 10
Dołączył: 22.08.2009

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


thek Wielkie dzięki działa poprawnie.

Temat do wygaszenia.
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: 22.08.2025 - 14:59