Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Logowanie użytkownika przez sesję - Pomocy
Forum PHP.pl > Forum > Przedszkole
stein
Witam. Mam napisany skrypt ktory ma za zadanie utworzyć sesję logowania użytkownika i taki problem, że nie do konca działa, sprawdzałem go dokładnie pod względem literówek i zgodności z bazą wszyskto jest ok, zresztą wszystko jakby działa do momentu trzeciej częsci skryptu gdzie sprawdza się czy istnieje sesja i nawet do mometu sprawdzenia użytkownika i zgodnosci hasła, jakby wszyskto jest ok a jednak nie do konca bo gdyby była sesja to powinny być widoczne odpowienie linki a wygląda to tak :

  1. <?php
  2.        
  3.   require("konfiguracja.php");
  4.         if($_POST['submitted'])
  5.         {
  6.           $sql = "SELECT * FROM loginy WHERE nazwa_uzytkownika = '" .
  7.            $_POST['nazwa_uzytkownika'] . "' AND haslo = '" . $_POST['haslo'] . "'";
  8.            
  9.           $result = mysql_query($sql);
  10.           $numrows = mysql_num_rows($result);  
  11.        
  12.           if($numrows == 1)
  13.           {
  14.             $row = mysql_fetch_assoc($result);
  15.             session_register("USERNAME");
  16.             session_register("USERID");
  17.            
  18.             $_SESSION['USERNAME'] = $row['nazwa_uzytkowika'];
  19.             $_SESSION['USERID'] = $row['id'];
  20.            
  21.             header("location: sprawdz.php");
  22.           }
  23.           else
  24.              {
  25.                header("location: sprawdz.php?error=1");
  26.              }
  27.         }
  28.         else
  29.            {
  30.              require("naglowek.php");
  31.              
  32.              if($_GET['error'])
  33.               {
  34.                 echo "Nieudana operacja logowania. Proszę spróbować podobnie!";
  35.               }
  36.            }
  37. ?>


  1. <form action="<?php echo $SCRIPT_NAME ?>" method="post">
  2. <tr>
  3. <td>Nazwa użytkownika</td>
  4. <td><input type="text" name="nazwa_uzytkownika"></td>
  5. </tr>
  6. <tr>
  7. <td>Hasło</td>
  8. <td><input type="password" name="haslo"></td>
  9. </tr>
  10. <tr>
  11. <td></td>
  12. <td><input type="hidden" name="submitted" value="TRUE">
  13. <input type="submit" name="submit" value="Zaloguj"></td>
  14. </tr>
  15. </table>
  16. </form>


I od tego momentu poniższe liniki kodu nie działają odpowiednio :

  1. <?php
  2.     if(isset($_SESSION['USERNAME']) == TRUE)
  3.     {
  4.       echo "<a href='wylogowanie.php'>Wylogowanie</a>";
  5.     }
  6.     else
  7.        {
  8.          echo "<a href='logowanie.php'>Logowanie</a>";
  9.        }
  10.     if(isset($_SESSION['USERNAME']) == TRUE)
  11.     {
  12.       echo " - ";
  13.       echo "<a href='dodawanie_wpisu.php'>Dodaj wpis</a>";
  14.       echo "<a href='dodawanie_kategorii.php'>Dodaj kategorie</a>";
  15.     }      
  16.       require("stopka.php");
  17. ?>


Mianowicie wygląda to tak, że jesli użytkownik do pola formularza wpisze nieodpowienie hasło to zgodnie z warunkiem wyświetlany jest komunikat o nieudanej operacji logowania oraz link "logowanie.php" i w tym momencie wszyskto jest dobrze, natomiast jeśli użytkownik wpisze w formularz prawidłowy login i hasło to po przetworzeniu formularza komunikat o nieudanej operacji nie wyskakuje ale tez nie ma sesji ponieważ wyswietlany jest link "logowanie.php" a powinien być w wypadku sesji "Wylogowanie.php" oraz dwa ostatnie linki. NIestety tego nie ma. Proszę o pomoc gdzie tkwi błąd, dlaczego nie ma sesji $_SESSION['USERNAME'] ?
Pilsener
  1. <?php
  2. if(isset($_SESSION['USERNAME']) == TRUE)
  3. ?>
- a nie lepiej tak:
  1. <?php
  2. if(isset($_SESSION['USERNAME']))
  3. ?>
-?

1. Daj wszędzie print_r($_SESSION) i zobacz, jak zachowują się zmienne sesyjne
2. Nie widzę nigdzie wylogowania ani niszczenia sesji
3. Polecam jakiś tutek o logowaniu
4. I oczywiście o zabezpieczeniu sesji
5. A potem własny mechanizm sesji itp.
Suh
Ten fragment kodu można (i nawet trzeba) skrócić.
  1. <?php
  2. $row = mysql_fetch_assoc($result);
  3.             session_register("USERNAME");
  4.             session_register("USERID");
  5.            
  6.             $_SESSION['USERNAME'] = $row['nazwa_uzytkowika'];
  7.             $_SESSION['USERID'] = $row['id'];
  8.            
  9.             header("location: sprawdz.php");
  10. ?>


Na taki :

  1. <?php
  2. $row = mysql_fetch_assoc($result);
  3.            
  4.             $_SESSION['USERNAME'] = $row['nazwa_uzytkowika'];
  5.             $_SESSION['USERID'] = $row['id'];
  6.            
  7.             header("location: sprawdz.php");
  8. ?>


Powodem jest to, że funkcja session_register" title="Zobacz w manualu PHP" target="_manual jest "przestarzała", a w najnowszej wersji PHP - w ogóle usunięta.
Być może to jest powodem ?

I druga uwaga. W ostatnim Twoim listingu masz 2 takie same warunki wykonywane jeden po drugim, co jest rzeczą nieelegancką winksmiley.jpg Wstaw wywołania z drugiego if'a do pierwszego w odpowiednie miejsce i od razu kod będzie bardziej czytelniejszy.
stein
Co do IFa racja. Niestety usuniecie session_register("USERNAME"); nic nie dało nadal nie chce wykonac pierwszego warunki gdy sesja jest chyba, że jej niema lecz nie moge znalesc dlaczego sadsmiley02.gif

Już mam przyczynę niesamowite i przerażające jak niewiele trzeba blinksmiley.gif w ostatniej czesci listingu zamieniłem $_SESSION['USERNAME'] na $_SESSION['USERID'] teraz działa skrypt tak jak chciałem pole " id " mam w tabeli jako klucz główny może to był błąd, że trzeba wywołać własnie klucz podstawowy.
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.