Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Logowanie - problem z przesyłaniem danych z formularza
Forum PHP.pl > Forum > PHP
ciasteczko
Witam.
Jestem nowym użytkownikiem forum a zarazem i raczkującym w PHP. Chciałbym stworzyć na swojej stronce rejestrację i logowanie użytkowników tak aby mieli dostęp do swoich opcji. Rejestrację z trudem ale mam już z głowy. Problem natomist mam wielki z logowaniem. Znalazłem w takiej "mądrej" książce skrypt do logowania oparty na bazie danycch MySQL. Wygląda to tak.

Plik login.php
Kod
       <?php
    
       session_start();
       if (isset($_POST["submit"])) {
         $login = $_POST["login"];
         $passwd = $_POST["passwd"];
         $auth = false;
         $pwdb = mysql_connect("localhost", "user_do_bazy", "password");
         mysql_select_db("baza", $pwdb);
         $rows = mysql_query("SELECT login, passwd FROM baza", $pwdb);
         while ($row = mysql_fetch_array($rows)) {
           if ($login == $row["login"] && $passwd == $row["passwd"]) {
             $auth = true;
             break;
           }
         }
      
         if ($auth) {
           $_SESSION["username"] = $login;
           if (isset($_GET["url"])) {
             $url = $_GET["url"];
           } else {
             $url = "panel.php";
           }
          
           if (!isset($_COOKIE[session_name()])) {
             if (strstr($url, "?")) {
               header("Location: " . $url .
                 "&" . session_name() . "=" . session_id());
             } else {
               header("Location: " . $url .
                 "?" . session_name() . "=" . session_id());
             }
           } else {
             header("Location: " . $url);
           }
         }
       }
       ?>
       <html>
       <head>
       <title>Uwierzytelnianie użytkowników</title>
       </head>
       <body>
      
       <form method="post">
       <input type="text" name="login" />
       <input type="password" name="passwd" />
       <input type="submit" name="submit" value="Login" />
       </form>
      
       </body>
       </html>

No i po poprawnym zalogowaniu się przechodzi mi do pliku panel.php, który wygląda tak:
Kod
   <html>
   <head>
   </head>
   <body>
   <?
  
       session_start();
       if (!isset($_SESSION["username"])) {
           header("Location: /protected3/login.php?url=" .
           urlencode($_SERVER["SCRIPT_NAME"]));
       } else {    
         echo "<B>Nazwa istniejacej sesji:</B>&nbsp;".$_SESSION["username"];
             echo "&nbsp;<A href=\"logout.php?\"" . SID . "\">";
             echo "[Wyloguj]</A><BR>";    
         echo "<B>Twoj login:</B>&nbsp;".$_GET['login'];
         echo "<B>Twoje haslo:</B>&nbsp;".$_GET['passwd'];
      }
   ?>
  
   </body>
   </html>


No i problem jest taki że kiedy już po zalogowaniu się przechodzi mi do pliku panel.php nie mam tam dostępu do zmiennych $login oraz &passwd tzn po wpisaniu żeby wyświetlił login i hasło widzę coś takiego:
Kod
Notice:  Undefined index:  login in /usr/account/ftp/scoute/panel.php on line 19
Notice:  Undefined index:  passwd in /usr/account/ftp/scoute/panel.php on line 20
   [\code]
   Co ciekwae kiedy wpiszę:
   [code]
   echo $_SESSION["username"];


pokazuje mi nazwę sesji więc uważam że jakieś tam dane przekazuje do panel.php. nie przekazuje jednak loginu i hasla. <B>W czym zatem tkwi problem. Co jest nie tak w tym skrypcie ?</B>
krowal
Baaardzo mądra ta książka, naprawde... Pierwsza głupota: przechowywanie loginu i hasła w sesji. Druga głupota wyciąganie wszystkich haseł i loginów z bazy danych po to by sprawdzić czy jeden z nich się zgadza... w pętli. Tragedia. Wyrzuć tą książkę smile.gif

W sesji powinno sie przechowywać najwyżej id użytkownika, a z bazy wybiera sie jeden login i haslo i tylko po to by sprawdzić czy taki istnieje, jeśli istnieje to ustawiasz $_SESSION['user_id'] = id_sprawdzonego_uzytkownika i potem za każdym razem sprawdzasz czy w sesji istnieje zmienna user_id, jeśli tak to użytkownik zalogowany, jeśli nie to niezalogowany. Ot cała filozofia. Poza tym było już parę razy na forum.

Edit: sorry hasło nie jest przechowywane (dlatego nie możesz go wyświetlić), a {echo $_SESSION["username"];} nie zwraca ci nazwy sesji, tylko właśnie login, który wg ciebie nie może być wyświetlony
ciasteczko
Hmm... No czy ta książka "mądra" - pojęcie względne. Tak jak pisałem ja się nie za bardzo jeszcze w PHP czuje dlatego znalazłem taki skrypt i kombinuje. A co w takim razie myślisz o takim skrypcie 77857 Czy jest on bezpieczny itp. I jak ma zatem wyglądać zapytanie do bazy. No bo w sumie masz rację, że wyciąganie wszystkich loginów i haseł to głupota. W końcu jak baza urośnie będzie to trochę trwało. A może poradzicie jakiś skrypt logowania oparty na bazie MySQL. jakiś link mile widziany. Nie jestem biegły w PHP i szukam jakiegoś fajnego, porządnego skryptu. Na co zwrócić uwagę. Pomoże mi ktoś sciana.gif
michu2510
Przechowywanie hasla w sesji przeciez nie jest chyba glupie z tego co wiem. to nie jest ciastechko a sesja i widzi ja tylko serwer tylko ze to zasmieca serwer.
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.