Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]zalogowani użytkownicy - jak to zrobić?
Forum PHP.pl > Forum > PHP
sweter
Chciałem zrobić skrypt, dzięki któremu na stronie głównej mojego serwisu byłyby wyświetlane loginy i zdjęcia 12 ostatnio zalogowanych osób.
Jednak nie mam pomysłu jak to zrobić. Możecie mnie jakoś naprowadzić?
Spawnm
jesli prowadzisz tablicę sesji to z niej wyciągasz 12 danych w formie DESC .
skoro chcesz jeszcze foto to aby zaoszczedzić czasu na zapytania sql daj w tablicy sesji oprócz nazwy usera , link do jego foto.
odczytujesz sqlem nazwe , obrazek i wyświetlasz smile.gif
johny_s
Przy logowaniu każdego usera ustawiasz mu w bazie odpowiednie pole z data. Następnie na stronie głównej pobierasz te dane i odpowiadające im zdjęcia.
michal_robak
Nie powinieś dodwać daty bo to jest w sumie niepotrzebne. Spawnm ma rację. Przy logowaniu powinieneś robić taką prosta rzecz. masz powiedzmy tabelke logowania.
Krok 1.
Sprawdzasz czy tabela posiada 12 rekordów.
Jeżeli ma to:

krok 2.
sprawdzasz czy ta osoba nie istnieje juz wśród tych 12 osób. Jeżęli istnieje to usuwasz ten rekord z tą osobą i dodajesz ją na nowo (czyli będzie jako pierwsza).

krok 3. jeżeli krok 2 to niewypał czyli danej osoby nie ma to usuwasz ostatni rekord i dodajesz ten nowy. (nie ma co trzymać tabelki większej niż 12 rekordów bo tylko ci bedzie miejsce zapychać a starych danych i tak nie bedziesz uzywać).

Jeżeli tabela nie ma 12 rekordów:
krok2 taki sam kroku 3 nie ma.
sweter
Posłużyłem się wskazówkami michal_robak, ale coś mi nie wychodzi, bo do tabeli zalogowani nie wpisuje się login użytkownika i obecna data (w tabeli nie ma 12 użytkowników). Oto fragment kodu:
Kod
/*zmienna login jest już zadeklarowana i osiada nawę uzytkownika*/

   $zap2 = "SELECT * FROM `zalogowani`";
   $wyn2=@mysql_query($zap2);
   $ile_uzytkownikow=@mysql_num_rows($wyn2);
  
   $data = date("Y-N-d");
   $czas = date("H:i:s");
  
   if($ile_uzytkownikow=="12"){
     $zap3 = "SELECT * FROM `zalogowani` WHERE login='$login'";
     $wyn3=@mysql_query($zap3);
     $czy_jest=@mysql_num_rows($wyn3);
    
     if($czy_jest=="1"){
       $zap4="DELETE FROM `zalogowani` WHERE `login`='$login'";
       $wyn4=@mysql_query($zap4);
       /*usuwanie ostatniego rekordu z tabeli i wstawianie nowego*/
       $zap5="INSERT INTO `zalogowani` ( `id` , `login` , `img` , `data` , `czas` ) VALUES ('', '$login', 'obrazek', '$data' , '$czas')";
     }else{
      
     }
  
   }else{
     $zap3 = "INSERT INTO `zalogowani` (`id`,`login`,`img`,`data`,`czas`) VALUES ('','$login','','$data','$czas')";
     $wyn3 = @mysql_query($zap3);
   }
Rafal Filipek
Strasznie zamieszales smile.gif wywalilem te daty itp, i moim zdaniem takie cos powinno dzialac juz ladnie.
  1. <?php
  2. $q = mysql_query('select * from zalogowani;');
  3. if(mysql_num_rows($q)==12){
  4.    $q = mysql_query('delete from zalogowani where login = "'.$login.'";');
  5.    if(mysql_affected_rows($q)==0){
  6.        $q = mysql_query('delete from zalogowani order by id ASC limit 1');
  7.    }
  8. }
  9. $q = mysql_query('insert into zalogowani(login, img) VALUES("'.$login.'","");');
  10. ?>
cichy380
a jeszcze ambitniejszą metodą jest stworzyć własny mechanizm sesji - napisać własne funkcje przechowujące np. dane sesyjne w twojej bazie danych php.net: session_set_save_handler()
sweter
Cytat
$q = mysql_query('insert into zalogowani(login, img) VALUES("'.$login.'","");');

Niestety, ale to mi nie działa. Są dodawane puste wiersze
Rafal Filipek
Cytat(sweter @ 8.01.2009, 16:13:26 ) *
Niestety, ale to mi nie działa. Są dodawane puste wiersze

no to znaczy ze masz cos nie tak ze zeminna $login.
sweter
Oto mój plik login.php odpowiadający za logowanie:
Kod
       <?php
       session_start();
       $_POST['$login'] = strip_tags($_POST['$login']);
       $_POST['$haslo'] = strip_tags($_POST['$haslo']);
       $_POST['$login'] = trim($_POST['$login']);
       $_POST['$haslo'] = trim($_POST['$haslo']);
       $_POST['$login'] = addslashes($_POST['$login']);
       $_POST['$haslo'] = addslashes($_POST['$haslo']);
       $_POST['$login'] = htmlspecialchars($_POST['$login']);
       $_POST['$haslo'] = htmlspecialchars($_POST['$haslo']);
         echo $login;
       $pol = mysql_connect($host,$login,$haslo);
         if (!$pol) {
           echo "nie można się połączyć z bazą danych!";
           exit;
         }
       $wyb = mysql_select_db("siedlczanin");
         if (!$wyb) {
           echo "nie można wybrać bazy danych!";
           exit;
         };
      
       $haslo = sha1($haslo);
         $zap = "SELECT * FROM `users` WHERE login='$login' AND haslo='$haslo'";
         $wyn = mysql_query($zap);
       ?>

Jak widać w 10 linijce (po filtrowaniu danych) jest "echo $login;", które nic mi nie wyświetla, mimo że późniejsze zapytanie do bazy danych jest możliwe.
Co jest nie tak??
Rafal Filipek
zaaaraz, zaaaraz
1) jak sie laczysz z baza nie majac ustawionego, loginu, hasla i hosta ?
2) czemu tu uzywasz tego samego ( pomijam fakt ze niezdefiniowanego loginu ) do łączenia się z bazą i do profili uzytkownika ( no chyba ze piszesz aplikacje gdzie kazdy uzytkownik twojego serwisu ma nadane uprawnienia do bazy )
sweter
Cytat
1) jak sie laczysz z baza nie majac ustawionego, loginu, hasla i hosta ?

$host, $login i $haslo jest zamiast prawdziwych danych, które naprędce szybko podmieniłem przy wstawianiu tutaj skryptu.

Cytat
( pomijam fakt ze niezdefiniowanego loginu )

Login jest przesyłany w formularzu.

Cytat
czemu tu uzywasz tego samego (...) do łączenia się z bazą i do profili uzytkownika

Czego samego?
Rafal Filipek
ok, inaczej. czy patrzac na moj post mozesz powiedziec ze zmienna $login jezeli ja sprawdzisz po 2 wierszu cos przechowuje i jest to prawidłowe?
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.