Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Napis czy jesteś zalogowany
Forum PHP.pl > Forum > Przedszkole
Th0e
Witam! Chciałbym by na mojej stronie jak ktoś się zaloguje i np. przegląda index.php To żeby pisało mu że jest zalogowany jako ta osoba itp.

Do tej pory stosowałem:

  1. include("config.php");//laczenie z baza
  2.  
  3. $nick = $_SESSION['nick'];
  4. $haslo = $_SESSION['haslo'];
  5. if ((!empty($nick)) AND (!empty($haslo))) {
  6. echo '<div id="jestes"><br>Jesteś zalogowany jako '. $nick .'</div><br>';
  7. echo'<div id="logowanie"><a href="wyloguj.php">wyloguj</a></div>';
  8. }


Ale zauważyłem że jak ktoś przy logowaniu wpisze zmyślone dane, np. nick który nie istnieje, to i tak jak przejdzie to takich podstron jak index to będzie mu pisać że jest zalogowany.

Napisałem Coś takiego:

  1. include("config.php");//laczenie z baza
  2.  
  3. $user = mysql_fetch_array(mysql_query("SELECT * FROM user WHERE `nick`='$nick' AND `haslo`='$haslo' LIMIT 1"));
  4.  
  5. $nick = $_SESSION['nick'];
  6. $haslo = $_SESSION['haslo'];
  7. if (!empty($user['id']) OR isset($user['id'])) {
  8. echo '<div id="jestes"><br>Jesteś zalogowany jako '. $nick .'</div><br>';
  9. echo'<div id="logowanie"><a href="wyloguj.php">wyloguj</a></div>';
  10. }


Ale teraz kompletnie nie działa. Nawet jak się zalogujemy na prawdziwe konto. Proszę o pomoc smile.gif Pozdrawiam.
nospor
Temat: Jak poprawnie zada pytanie
Zastosuj się do tego a zobaczysz parę ciekawych rzeczy
Randallmaster
Osobiście zrobiłbym to trochę inaczej natomiast z tego co widzę masz błąd z zapytaniem do bazy danych.

to:
  1. $user = mysql_fetch_array(mysql_query("SELECT * FROM user WHERE `nick`='$nick' AND `haslo`='$haslo' LIMIT 1"));


zmień na:
  1. $sql = mysql_query("SELECT * FROM user WHERE 'nick'='".$nick."' AND 'haslo'='".$haslo."' LIMIT 1") or die(mysql_error());
  2. $user = mysql_fetch_array($sql);


apostrofy były w złą stronę, sprawdź, może jeszcze coś przeoczyłem.
CuteOne
index.php
  1.  
  2. $logedIn = (!empty($_SESSION['nick'])) ? true : false;


layout.php (szablon strony)
  1. if($logedIn === true) {
  2.  
  3. echo 'Zalogowany jako'.$_SESSION['nick'];
  4. }



ps. po kiego grzyba trzymasz hasło w sesji.. ?
com
  1. include("config.php");//laczenie z baza
  2.  
  3. $nick = $_SESSION['nick'];
  4.  
  5. if ( isset($nick) ) {
  6. echo '<div id="jestes"><br>Jesteś zalogowany jako '. $nick .'</div><br>';
  7. echo'<div id="logowanie"><a href="wyloguj.php">wyloguj</a></div>';
  8. }

Zawszen w warunku sprawdzaj czy wgl zmienna istnieje, a nie od razu czy jest pusta wink.gif
CuteOne
@up zrób sobie prosty test
  1. $zmienna = '';
  2. if(isset($zmienna)) {
  3. echo "isset-Jestem zalogowany jako: ".$zmienna."<br>";
  4. }
  5. if(!empty($zmienna)) {
  6. echo "!empty-Jestem zalogowany jako: ".$zmienna."<br>";
  7. }
  8.  
  9. $zmienna2 = false;
  10. if(isset($zmienna2)) {
  11. echo "isset-Jestem zalogowany jako: ".$zmienna2."<br>";
  12. }
  13. if(!empty($zmienna2)) {
  14. echo "!empty-Jestem zalogowany jako: ".$zmienna2."<br>";
  15. }
nospor
A ty @up zrób sobie taki test:
  1. $zmienna = null;
  2.  
  3. if(isset($zmienna)) {
  4.  
  5. echo "isset-Jestem zalogowany jako: ".$zmienna."<br>";
  6.  
  7. }
  8.  
  9. if(!empty($zmienna)) {
  10.  
  11. echo "!empty-Jestem zalogowany jako: ".$zmienna."<br>";
  12.  
  13. }

wink.gif Jeśli w sesji nie było zmiennej nick, to zwracało właśnie null.

Co nie zmienia faktu, że zdecydowanie lepszym pomysłem jest tu empty i nie wiem czemu koleś wyskoczył z issetem. Pewnie chciał nabić posta wink.gif
CuteOne
  1. $zmienna = '';
  2. if(isset($zmienna)) {
  3. echo "isset-Jestem zalogowany jako: ".$zmienna."<br>";
  4. }
  5. if(!empty($zmienna)) {
  6. echo "!empty-Jestem zalogowany jako: ".$zmienna."<br>";
  7. }
  8.  
  9. $zmienna2 = false;
  10. if(isset($zmienna2)) {
  11. echo "isset-Jestem zalogowany jako: ".$zmienna2."<br>";
  12. }
  13. if(!empty($zmienna2)) {
  14. echo "!empty-Jestem zalogowany jako: ".$zmienna2."<br>";
  15. }
  16.  
  17. $zmienna3 = null;
  18. if(isset($zmienna3)) {
  19. echo "isset-Jestem zalogowany jako: ".$zmienna3."<br>";
  20. }
  21. if(!empty($zmienna3)) {
  22. echo "!empty-Jestem zalogowany jako: ".$zmienna3."<br>";
  23. }

Zrobiłem. I w każdym z powyższych przypadków użycie !empty() jest lepsze od isset() (null to w końcu "niebyły"(fajne tłumaczenie) a więc pusty) smile.gif
nospor
A czy ja napisałem, że jest gorsze? Nie, napisałem, że też uważam że post z issetem był bezsensu. Chciałem ci jednak pokazać, że dla pewnych wartosci isset zachowuje się inaczej niż mogło by wynikać z Twojego pierwszego kodu. Paniał?
Th0e
Cytat(CuteOne @ 15.01.2013, 10:51:14 ) *
index.php
  1.  
  2. $logedIn = (!empty($_SESSION['nick'])) ? true : false;


layout.php (szablon strony)
  1. if($logedIn === true) {
  2.  
  3. echo 'Zalogowany jako'.$_SESSION['nick'];
  4. }



ps. po kiego grzyba trzymasz hasło w sesji.. ?


przecież tym sposobem nadal będzie można zalogować się na nie istniejące konto bo to też sprawdza czy zmienna jest pusta, a nie sprawdza czy coś jest w bazie.

CuteOne
Chcesz zalogować użytkownika, który już jest zalogowany.. ? może inaczej

login.php
  1. if(!empty($_POST)) {
  2.  
  3. // walidacja POST $login to $_POST['login'], $pass to $_POST['pass']
  4.  
  5. $query = mysql_query("SELECT id_user, nick FROM users WHERE login = '".$login."' AND pass = '".$pass."'");
  6.  
  7. if(mysql_num_rows($query)) {
  8.  
  9. $row = mysql_fetch_asssoc($query);
  10.  
  11. $_SESSION['id_user'] = $row['id_user'];
  12. $_SESSION['nick'] = $row['nick'];
  13.  
  14. header('Location: index.php');
  15. }
  16. else { komunikat o bledzie }
  17. }
  18.  
  19. //wyswietlenie formularza


index.php
  1. $logedIn = (!empty($_SESSION['nick'])) ? true : false;
  2.  
  3.  
  4. // chcemy pobrać jakieś dane o użytkowniku
  5. if($logedIn === true) {
  6. $query = mysql_query("SELECT * FROM users WHERE id_user = '".$_SESSION['id_user']."'"); // $_SESSION['id_user'] po walidacji
  7. $user = mysql_fetch_assoc($query);
  8. }
  9.  


layout.php
  1. if($logedIn === true) {
  2. echo 'Zalogowany jako'.$_SESSION['nick'];
  3. }
Th0e
dobra do zamknięcia.
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.