Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Sesje i if w logowaniu
Forum PHP.pl > Forum > Przedszkole
Matjas
Witam

Mam taki problem. Od niedawna zacząłem naukę PHP, przestudiowałem kilka książkowych przykładów dotyczących logowania i postanowiłem napisać coś własnego. Sam skrypt na podstawie danych z formularza sprawdza czy w bazie są już takie dane, a jeśli są to wykonuje akcję. No i z tą akcją jest problem...

Wszystko bazuje na 3 plikach.

  • index.php
  • login.php
  • portal.php


Na stronie index znajduje sie formularz do logowania i przesylany jest do login.php

W pliku login.php jest taki skrypt
  1. <?php
  2. $loginF = $_POST['login']; // dane z formularza
  3. $hasloF = $_POST{'haslo'};
  4.  
  5. $host = "jakis host";
  6. $user = "jakis uzytkownik";
  7. $pass = "jakies haslo";
  8.  
  9. mysql_connect($host,$user,$pass)
  10. or die ("Bład połaczenia z serwerem MySQL");
  11. mysql_select_db("jakas baza");
  12.  
  13. $zapytanie = "SELECT * FROM user WHERE login='$loginF' and haslo='$hasloF'";
  14.  
  15. $rezultat = mysql_query($zapytanie) or die ("Błąd w zapytaniu");
  16.  
  17. while ($tabela = mysql_fetch_array($rezultat)) {
  18. $loginS = $tabela['login']; //dane wyciagniete z bazy
  19. $hasloS = $tabela['haslo'];
  20. }
  21. if ($loginF == $loginS and $hasloF == $hasloS) { //sprawdzenie zgodnosci danych z formularza i danych z bazy
  22. $_SESSION['zalogowany'] = 1;
  23. header("location:portal.php");
  24. } else {
  25. include "niepoprawny.php";
  26. }
  27.  
  28. $_SESSION['loginsesja'] = $loginS; //ta zmienna jest do powitania po nazwie uzytkownika.
  29. ?>


W pliku portal.php znajduje się taka treść
  1. <?php
  2. if ($_SESSION['zalogowany'] != 1) {
  3. echo "tresc wlasciwa";
  4. } else {
  5. header("location:index.php");
  6. }
  7. ?>


Problem dokladnie dotyczy funkcji if w pliku login.php po której następuje stworzenie zmiennej sesyjnej "zalogowany" z wartoscia 1.
Nie wiem dlaczego ale wartosc dla tej zmiennej przyjmuje 1 nawet jesli warunek nie zostaje spełniony. Czyli jeżeli bezpośrednio spróbuje w adresie wejść w plik login.php to bez wzgledu na to czy wpisałem jakieś dane w formularzu czy nie moja zmienna ma wartość 1. Sprawdziłem to funkcją print_r(SESSION);

Czy może ktoś z Was wie dlaczego tak się dzieje?

Z pozdrowieniami
Mateusz
krispak
W ogole nie rozumiem dlaczego dwa razy sprawdzasz wartosci? Jesli w bazie znaleziono uzytkownika o takim hasle i loginie to nie rozumiem sprawdzania tego znow po wyciagnieciu danych..
  1. $zapytanie = mysql_query("SELECT * FROM user WHERE login='$loginF' and haslo='$hasloF'") or die ("Błąd w zapytaniu");
  2. $num_rows = mysql_num_rows($zapytanie);
  3. if($num_rows == 1)
  4. {
  5. $tabela = mysql_fetch_array($zapytanie);
  6. $_SESSION['zalogowany'] = 1;
  7. $_SESSION['loginsesja'] = $loginS;
  8. header("location:portal.php");
  9. } else {
  10. include "niepoprawny.php";
  11. }

Pozdrawiam
Szymoneks12
Cytat(Matjas @ 6.08.2010, 21:51:41 ) *
Portal.php:
  1. <?php
  2. if ($_SESSION['zalogowany'] != 1) {
  3. echo "tresc wlasciwa";
  4. } else {
  5. header("location:index.php");
  6. }
  7. ?>


Nie powinno być tak?:

  1. <?php
  2. if ($_SESSION['zalogowany'] == 1) {
  3. echo "tresc wlasciwa";
  4. } else {
  5. header("location:index.php");
  6. }
  7. ?>
krispak
Dokladnie jak mowi @Szymoneks12 zmien jeszcze ten warunek bo jezeli w sesji przyjmiesz jeden za zalogoanego to zawsze bedzie wyrzucalo do header
Matjas
Hmm... Faktycznie.

Dziękuję Panowie za pomoc. smile.gif

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