Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Skrypt logowania php + mysql - jak przerobic

unleashed 05 Sty 2012 16:48 2924 14
  • #1 05 Sty 2012 16:48
    unleashed
    Poziom 12  

    Witam, chce zrobić logowanie na stronie w php + mysql. Mam skrypt działający, znaleziony w internecie, ale potrzebuje go przerobić w taki sposób żeby każdy użytkownik po zalogowaniu zostawał przekierowany na inną (swoją) podstronę. Czy w ogóle jest możliwe takie przerobienie z tego skryptu?

    plik login.php

    Code:
    <?
    

    session_start();

    session_destroy();
        $message="";
       
    // Sekcja logowania
    $login=$_POST[‘login’];
    if($login) {
     
      $uzytkownik=$_POST[‘uzytkownik’];
      $md5_haslo=md5($_POST[‘haslo’]);
      // Koduje hasło funkcją md5().
     


      $host="localhost";
      $db_user="";
      $db_password="";
      $database="db";
        mysql_connect($host,$db_user,$db_password);
        mysql_select_db($database);

      $rezultat=mysql_query("select * FROM logowanie WHERE uzytkownik=’$uzytkownik’ AND haslo=’$md5_haslo’");
        if(@mysql_num_rows($rezultat)){
       session_register("uzytkownik");
        header("location:home.php");
      exit;
      }else {
      $message="Nieprawidłowa nazwa użytkownika lub hasło";
      }
    }
    ?>
    <head>

    <title>Dokument</title>
    </head>
      <body>
    <? echo $message; ?>
    <form id="form1" name="form1" method="post" action="<? echo $PHP_SELF; ?>">
      <table>
        <tr>
          <td>Użytkownik: </td>
          <td><input name="uzytkownik" type="text" id="uzytkownik" /></td>
        </tr>
        <tr>
          <td>Hasło: </td>
          <td><input name="haslo" type="password" id="haslo" /></td>
        </tr>
      </table>
    <input name="login" type="submit" id="login" value="login" />
    </form>
    </body>
    </html>


    oraz plik home.php do którego przekierowany zostaj użytkownik po prawidłowym zalogowaniu
    Code:

    <?

    session_start();
      if(!session_is_registered("uzytkownik")){
      header("location:login.php");
    }
    ?>

    <head>

    <title>zalogowany</title>
    </head>
        <body>
    <p>Witaj <? echo $_SESSION[‘uzytkownik’]; ?>! Jesteś zalogowany.</p>
    <p><a href="login.php">Wyloguj</a></p>
    </body>
    </html>

    0 14
  • #2 05 Sty 2012 17:02
    marcinj12
    Poziom 40  

    unleashed napisał:
    Czy w ogóle jest możliwe takie przerobienie z tego skryptu
    Pewnie.
    Zakładając że ten skrypt działa (nie weryfikowałem), wystarczy zmienić fragment który przekierowuje każdego użytkownika na stronę główną:
    Kod: php
    Zaloguj się, aby zobaczyć kod

    tak, aby przekierowywał go na wybraną podstronę:
    Kod: php
    Zaloguj się, aby zobaczyć kod
    , gdzie w zmiennej $strona będziesz trzymał nazwę podstrony, na którą chcesz przekierować użytkownika. Możesz trzymać ją w bazie jako zwykły string, i odczytać po dokonaniu weryfikacji użytkownika/hasła.

    0
  • #3 05 Sty 2012 17:42
    unleashed
    Poziom 12  

    czyli w bazie danych oprócz id, uzytkownika i hasła dodaje jeszcze strona i tam w wartości wpisuje moja_podstrona.php ? dobrze rozumie ?

    0
  • #4 05 Sty 2012 17:54
    marcinj12
    Poziom 40  

    A, to już zależy od Ciebie.
    Jeżeli chcesz, żeby "każdy użytkownik po zalogowaniu zostawał przekierowany na inną (swoją) podstronę", o różnych nazwach - to tak. Pytanie skąd będziesz brał lub jak będziesz te podstrony tworzył??

    Jeżeli zaś istnieje jakiś wzór nazwy takiej podstrony (np. home_nazwa_uzytkownika.php), to można i bez bazy, wystarczy wtedy skleić ciąg znaków z odczytaną z bazy nazwę użytkownika.

    0
  • #5 05 Sty 2012 19:08
    unleashed
    Poziom 12  

    Przy dodaniu nowego użytkownika będzie tworzona nowa podstrona z informacjami dla niego. Jeszcze jedno pytanie czy kod który podałeś muszę wkleić w login.php tyle razy ile będę miał użytkowników? tylko z innymi podstronami.

    0
  • #6 05 Sty 2012 19:36
    marcinj12
    Poziom 40  

    Nie, kod wklejasz tylko raz - oczywiście to co podałem to przykład jak to ma działać, nie gotowe rozwiązanie.
    Zrób to tak jak pisałeś - do bazy danych dodaj sobie dodatkową kolumnę z adresem podstrony, którą wypełnisz sobie przy zakładaniu konta użytkownikowi.
    Potem, przy zapytaniu SELECT wybieraj to pole (nie potrzebujesz w tym kodzie SELECT *, wystarczy to jedno pole), a do zmiennej $strona przypisz to, co wybrałeś z bazy - np. za pomocą mysql_fetch_row wyłuskaj wiersz z uchwytu $rezultat i pobierz pole z podstroną.

    0
  • #7 06 Sty 2012 10:13
    unleashed
    Poziom 12  

    Zrobiłem coś takiego ale nie działa :

    Code:

    $rezultat=mysql_query("select * FROM logowanie WHERE uzytkownik='$uzytkownik' AND haslo='$md5_haslo' AND strona='$strona'");
        if(@mysql_num_rows($rezultat))
    {
        $strona =$_POST['strona'];
        session_register("uzytkownik");
        header("location:$strona");
        exit;



    co zrobiłem nie tak?

    0
  • #8 06 Sty 2012 10:33
    marcinj12
    Poziom 40  

    A wytłumacz mi, jak myślisz, co ten fragment kodu robi?
    Wiesz w ogóle jak konstruować zapytania SQL, co to jest tablica $_POST i w jaki sposób odebrać wynik z zapytania? (to ostatnie akurat jest w linku który podałem, niestety, nie zastosowałeś się do tej wskazówki, dlatego nie działa)

    0
  • #9 06 Sty 2012 11:22
    unleashed
    Poziom 12  

    No teraz to nic bo nie działa, jestem zielony w php, od paru dni się tym bawię jutro wyśle żonę do empiku po książkę, ale puki jest dzień wolnego to bym chciał coś zrobić z tym logowaniem

    0
  • Pomocny post
    #10 06 Sty 2012 11:43
    marcinj12
    Poziom 40  

    Kod: php
    Zaloguj się, aby zobaczyć kod


    PS. W celu uniknięcie ryzyka SQL Injection, należało by użyć zapytania z paraterami i biblioteki mysqli, ewentualnie wykorzystać taki sposób odczytu użytkownika (hasła nie trzeba, bo jest kodowane md5, ale też można):
    Kod: php
    Zaloguj się, aby zobaczyć kod

    0
  • #11 06 Sty 2012 12:16
    unleashed
    Poziom 12  

    Wielkie dzięki masz u mnie duże piwo. A co do uniknięcia ryzyka sql injection musiałem kod połączenia z bazą przenieść do góry nad sekcje logowania i wszystko działa:D Pozdrawiam

    0
  • #12 06 Sty 2012 15:12
    marcinj12
    Poziom 40  

    unleashed napisał:
    A co do uniknięcia ryzyka sql injection musiałem kod połączenia z bazą przenieść do góry nad sekcje logowania i wszystko działa
    A, że tak z ciekawości zapytam, w jaki sposób to ma zapobiec SQL Injection?? Możesz wkleić ten cały kod?

    0
  • #13 06 Sty 2012 16:12
    unleashed
    Poziom 12  

    Code:
    <?
    

    session_start();

    session_destroy();
        $message="";
       
        $host="";
      $db_user="";
      $db_password="";
      $database="";
        mysql_connect($host,$db_user,$db_password);
        mysql_select_db($database);
       
    // Sekcja logowania
    $login=$_POST['login'];
    if($login) {
      $uzytkownik=mysql_real_escape_string($_POST['uzytkownik']);
      $md5_haslo=md5(mysql_real_escape_string($_POST['haslo'])); 

      // Koduje hasło funkcją md5().
     


     

      $rezultat=mysql_query("select strona FROM logowanie WHERE uzytkownik='$uzytkownik' AND haslo='$md5_haslo'");
     
    if(@mysql_num_rows($rezultat))
    {
        $row = mysql_fetch_row($rezultat);
        $strona = $row[0];
        session_register("uzytkownik");
        header("location:$strona");
        exit;
      }else {
      $message="Nieprawidłowa nazwa użytkownika lub hasło";
      }
    }
    ?>
    <head>

    <title>Dokument</title>
    </head>
      <body>
    <? echo $message; ?>
    <form id="form1" name="form1" method="post" action="<? echo $PHP_SELF; ?>">
      <table>
        <tr>
          <td>Użytkownik: </td>
          <td><input name="uzytkownik" type="text" id="uzytkownik" /></td>
        </tr>
        <tr>
          <td>Hasło: </td>
          <td><input name="haslo" type="password" id="haslo" /></td>
        </tr>
      </table>
    <input name="login" type="submit" id="login" value="login" />
    </form>
    </body>
    </html>


    chodzi mi o to ze jak użyłem mysql_real_escape_string musiałem łączenie z baza dac powyżej logowania bo inaczej nie działało

    0
  • #14 06 Sty 2012 16:37
    marcinj12
    Poziom 40  

    A, to ok, nie było tematu, źle to zrozumiałem... ;)
    PS. Zdaje mi się czy brakuje tam znacznika <html>, a przed nim całego nagłówka DOCTYPE ?

    0
  • #15 06 Sty 2012 18:45
    unleashed
    Poziom 12  

    W pliku nie brakuje, po prostu za dużo wkleiłem na forum :D

    0