Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP/MySQL] Prosty panel logowania
Forum PHP.pl > Forum > Gotowe rozwiązania
sleedz
Witam.
Stworzyłem prosty panel logowania. Może komuś się przyda. Piszcie co w nim można zmienić...

index.php
  1. <?php
  2.  
  3.    session_start();
  4.    
  5.    include "config.php";
  6.    
  7.    if (isset($_SESSION['user_id'])) {
  8.        echo "zalogowałeś się jako <b>".$user_name."</b><br />";
  9.        echo "E-mail: ".$user_email."<br>
  10.                Data dołączenia: ".$user_date."<br>";
  11.        echo "<a href=\"logout.php\">[LOGOUT]</a>";
  12.    }
  13.    else {
  14.        
  15.        echo "<form method=\"GET\" action=\"login.php\">
  16.                <input type=\"text\" name=\"login\"><br>
  17.                <input type=\"password\" name=\"pass\"><br>
  18.                <input type=\"submit\" name=\"log\" value=\"Login\">
  19.              </form>";
  20.            
  21.    }
  22.            
  23. ?>


config.php
  1. <?php
  2.  
  3.    session_start();
  4.  
  5.    $db_host = "localhost";
  6.    $db_user = "root";
  7.    $db_pass = "root";
  8.    $db_base = "baza";
  9.    
  10.    $db = mysql_connect($db_host, $db_user, $db_pass);
  11.    mysql_select_db($db_base, $db);
  12.    
  13.    if (isset($_SESSION['user_id'])) {
  14.        $user_id     = $_SESSION['user_id'];
  15.        $user_name   = $_SESSION['user_name'];
  16.        $user_email  = $_SESSION['user_email'];
  17.        $user_rights = $_SESSION['user_rights'];
  18.        $user_date   = $_SESSION['user_date'];
  19.    }
  20.  
  21. ?>


login.php
  1. <?php
  2.  
  3.    session_start();
  4.    
  5.    include "config.php";
  6.  
  7.    $user_login = $_GET['login'];
  8.    $user_pass  = $_GET['pass'];
  9.    
  10.    $sql = "SELECT * FROM user WHERE user_name = '".$user_login."' AND user_pass = '".$user_pass."';";
  11.    $result = mysql_query($sql)
  12.        or die("Podałeś błędny login lub hasło");
  13.        
  14.    $rows = mysql_num_rows($result);
  15.    
  16.    if ($rows == 1) {
  17.        
  18.        $r = mysql_fetch_assoc($result);
  19.        session_register("user_id");
  20.        session_register("user_name");
  21.        session_register("user_email");
  22.        session_register("user_rights");
  23.        session_register("user_date");
  24.        
  25.        $_SESSION['user_id']     = $r['user_id'];
  26.        $_SESSION['user_name']   = $r['user_name'];
  27.        $_SESSION['user_email']  = $r['user_email'];
  28.        $_SESSION['user_rights'] = $r['user_rights'];
  29.        $_SESSION['user_date']   = $r['user_date'];
  30.        
  31.        header("Location: index.php");
  32.    }
  33.    else {
  34.        echo "Podałeś błędny login lub hasło... <br> <a href=\"index.php\">Powrót</a>";
  35.    }
  36.  
  37. ?>


logout.php
  1. <?php
  2.  
  3.    session_start();
  4.    
  5.    header("Location: index.php");
  6.  
  7. ?>


No i oczywiście trzeba stworzyć odpowiednią tabelę w bazie:
  1. CREATE TABLE `user` (
  2. `user_id` int(30) NOT NULL AUTO_INCREMENT,
  3. `user_name` varchar(50) collate latin2_bin DEFAULT NULL,
  4. `user_pass` varchar(50) collate latin2_bin DEFAULT NULL,
  5. `user_email` varchar(50) collate latin2_bin DEFAULT NULL,
  6. `user_date` date DEFAULT NULL,
  7. PRIMARY KEY (`user_id`)
  8. );
erix
Cytat
echo "<form method=\"GET\" action=\"login.php\">

Via GET? :| A jak ktoś Ci się gapi przez ramię na pasek adresu przeglądarki, to co wtedy?

Cytat
  1. <?php
  2. $sql = "SELECT * FROM user WHERE user_name = '".$user_login."' AND user_pass = '".
  3. ?>

Podatne na SQL Injection.

Taka dygresja:
  1. <?php
  2. if (isset($_SESSION['user_id'])) {
  3.       $user_id     = $_SESSION['user_id'];
  4.       $user_name   = $_SESSION['user_name'];
  5.       $user_email  = $_SESSION['user_email'];
  6.       $user_rights = $_SESSION['user_rights'];
  7.       $user_date   = $_SESSION['user_date'];
  8.   }
  9. ?>


Po co powielać parę razy to samo?
sleedz
Oj sorki. Zapomniałem zmienić z GET na POST...
A co do powielania: Żeby było przejrzystsze tongue.gif
erix
Tak też może być przejrzyście. Albo chociaż rób referencje. Wiem, że się czepiam pierdół, ale zapytałeś, co można zmienić, to odpowiadam. Ale skoro nie używasz obiektów, to nie rób sobie takich aliasów, bo potem się nie połapiesz. winksmiley.jpg
pyro
takie dwie dygresje:
1. w polu login mozna podac nick_admina'/* i juz jestesmy zalogowani jako admin
2. wywal w config.php session_start() bo prawdopodobnie wywoła on notice'a o podwójnym starcie sesji.

// edit

kolejna rzecz:

  1. <?php
  2. session_register("user_id");
  3.       session_register("user_name");
  4.       session_register("user_email");
  5.       session_register("user_rights");
  6.       session_register("user_date");
  7. ?>
harleyzbro
witajcie,
ten kod jest jak dla mnie czymś idealnym. Rozwiązaniem moich problemów przy osobistej witrynie. Mam jednak problem. Pobrałem kody, dodałem baze i wchodze na stronę. Formularz logowania ukazał się...ale ja nie wiem jak dodać login i hasło. Jestem początkujący. Proszę pomóżcie. Zwracam się głownie do kolegi pyro i erix. Wierzę że potraficie mi pomóc. Pozdrawiam
erix
Użyj np. phpMyAdmina i dodaj sobie odpowiedni rekord do tabeli...
harleyzbro
Powiem tak dodaje rekordy:
user_name: Funkcja USER wartość 123
user_pass: Funkcja PASSWORD wartość kkk

Na stronie wyświetla sie : podałeś zły login lub hasło. Szukałem po googlach i nic. Może ktoś to wytłumaczyć łopatologicznie?questionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gif?
erix
Jaka funkcja? :|

Jakiego zapytania używasz w celu dodania nowego usera?
harleyzbro
Ja chce żeby było tak że tylko ja jako admin moge sie logować. Skopiowałem poniższy kod i to tyle. Dodałem baze i tyle.
KomputeromaniaK
A rejestracja?
harleyzbro
hmm...racja.Jestem początkujący...macie może jakiś kodzik, który da się zaadoptować.Bede wdzieczny.
debian
Cytat(erix @ 3.12.2008, 22:02:12 ) *
Via GET? :| A jak ktoś Ci się gapi przez ramię na pasek adresu przeglądarki, to co wtedy?


Podatne na SQL Injection.

Taka dygresja:
  1. <?php
  2. if (isset($_SESSION['user_id'])) {
  3.       $user_id     = $_SESSION['user_id'];
  4.       $user_name   = $_SESSION['user_name'];
  5.       $user_email  = $_SESSION['user_email'];
  6.       $user_rights = $_SESSION['user_rights'];
  7.       $user_date   = $_SESSION['user_date'];
  8.   }
  9. ?>


Po co powielać parę razy to samo?


A jaką masz propozycję erix żeby to nie było podatne na sql injection? smile.gif
vaverix
Mam pytanie...

Znam sie troche na jezyku HTML ale na PHP nie wiec mozecie mi powiedziec jak dodac nowych uzytkownikow/userow ?

Bo jak normalnie zainstalowalem skrypta to wiadomo ze bedzie napisane "nieprawidlowy login lub haslo" bo nie ma zadnego w bazie, wiec jak go dodac ?

W myAdmin dodalem rekord z moimi danymi a i tak nie dziala///
Otto
Temat trochę stary ale skoro ja go znalazłem szukając panelu logowania to i inni mogą znaleść

Zrobiłem rejestracje do tego panelu logowania

Kilka plików jest do edycji:

index.php
  1. <?php
  2.  
  3.  
  4. include "config.php";
  5.  
  6. if (isset($_SESSION['user_id'])) {
  7. echo "zalogowałeś się jako <b>".$user_name."</b><br />";
  8. echo "E-mail: ".$user_email."<br>
  9. Data dołączenia: ".$user_date."<br>";
  10. echo "<a href=\"logout.php\">[LOGOUT]</a>";
  11. }
  12. else {
  13.  
  14. if(isset($_GET['wykonano'])) {
  15. echo "Konto zostało utworzone! Możesz teraz sie zalogować.";
  16. }
  17. echo "<form method=\"POST\" action=\"login.php\">
  18. <input type=\"text\" name=\"login\"><br>
  19. <input type=\"password\" name=\"pass\"><br>
  20. <input type=\"submit\" name=\"log\" value=\"Login\">
  21. </form>";
  22. echo "<a href=\"register.php\">Rejestracja</a>";
  23.  
  24. }
  25.  
  26. ?>


register.php
  1. <?php
  2. if(isset($error)) {
  3. $ul =<<<EOD
  4. <ul>
  5. $error
  6. </ul>
  7. EOD;
  8. echo $ul;
  9. }
  10. ?>
  11. <form method="post" action="trans.php">
  12. <table>
  13. <tr>
  14. <td width="100px">Nick</td>
  15. <td>
  16. <input type="text" name="name">
  17. </td>
  18. </tr>
  19. <tr>
  20. <td>Hasło</td>
  21. <td>
  22. <input type="password" name="pass1">
  23. </td>
  24. </tr>
  25. <tr>
  26. <td>Powtórz hasło</td>
  27. <td>
  28. <input type="password" name="pass2">
  29. </td>
  30. </tr>
  31. <tr>
  32. <td>Adres email</td>
  33. <td>
  34. <input type="text" name="mail">
  35. </td>
  36. </tr>
  37. <tr>
  38. <td colspan="2" align="center">
  39. <input type="submit" name="submit" value="Rejestruj">
  40. </td>
  41. </tr>
  42. </table>
  43. </form>


trans.php
  1. <?php
  2. require("config.php");
  3.  
  4.  
  5.  
  6. $name = strtolower($_POST['name']);
  7. $pass1 = $_POST['pass1'];
  8. $pass2 = $_POST['pass2'];
  9. $mail = strtolower($_POST['mail']);
  10. $date = date('Y-m-d');
  11. $error = "";
  12.  
  13.  
  14. if (empty($name)) {
  15. $error .= "<li>Podaj nick</li>";
  16. }
  17. if (empty($pass1)) {
  18. $error .= "<li>Podaj hasło</li>";
  19. }
  20. if (empty($pass2)) {
  21. $error .= "<li>Powtórz hasło</li>";
  22. }
  23. if (empty($mail)) {
  24. $error .= "<li>Podaj adres e-mail</li>";
  25. }
  26.  
  27. $sql = "SELECT user_id FROM user WHERE user_name = '" . $name . "'";
  28. $result = mysql_query($sql) or die(mysql_error());
  29. $msr = mysql_num_rows($result);
  30.  
  31. if($msr > 0) {
  32. $error .= "<li>Taki użytkownik już istnieje</li>";
  33. }
  34.  
  35. $sql = "SELECT user_id FROM user WHERE user_email = '" . $mail . "'";
  36. $result = mysql_query($sql) or die(mysql_error());
  37. $msr = mysql_num_rows($result);
  38.  
  39. if($msr > 0) {
  40. $error .= "<li>Jakiś użytkownik już wykorzystał ten adres e-mail</li>";
  41. }
  42.  
  43. if(!empty($error)){
  44. header("location:register.php?error=$error");
  45. }
  46.  
  47.  
  48. if ($pass2 != $pass1) {
  49. $error .= "<li>Podane hasła różnią się!</li>";
  50. header("location:register.php?error=$error");
  51. }
  52.  
  53. if (empty($error)) {
  54. $pass = md5($pass1);
  55. $sql = "INSERT INTO user (user_name, user_pass, user_email, user_date)
  56. VALUES ('$name', '$pass', '$mail', '$date')";
  57. $result = mysql_query($sql) or die(mysql_error());
  58. header("location:index.php?wykonano=yes");
  59. }
  60.  
  61.  
  62. ?>


login.php
  1. <?php
  2.  
  3.  
  4. include "config.php";
  5.  
  6. $user_login = $_POST['login'];
  7. $user_pass = md5($_POST['pass']);
  8.  
  9. $sql = "SELECT * FROM user WHERE user_name = '".$user_login."' AND user_pass = '".$user_pass."';";
  10. $result = mysql_query($sql)
  11. or die("Podałeś błędny login lub hasło");
  12.  
  13. $rows = mysql_num_rows($result);
  14.  
  15. if ($rows == 1) {
  16.  
  17. $r = mysql_fetch_assoc($result);
  18. session_register("user_id");
  19. session_register("user_name");
  20. session_register("user_email");
  21. session_register("user_rights");
  22. session_register("user_date");
  23.  
  24. $_SESSION['user_id'] = $r['user_id'];
  25. $_SESSION['user_name'] = $r['user_name'];
  26. $_SESSION['user_email'] = $r['user_email'];
  27. $_SESSION['user_rights'] = $r['user_rights'];
  28. $_SESSION['user_date'] = $r['user_date'];
  29.  
  30. header("Location: index.php");
  31. }
  32. else {
  33. echo "Podałeś błędny login lub hasło... <br> <a href=\"index.php\">Powrót</a>";
  34. }
  35.  
  36. ?>
Potar
Dorobiłem sobie kilka tabeli podczas rejestracji także wszystko już mam tylko potrzebuje małego skryptu.
1.Przy logowaniu chcę żeby sprawdzał tabele user_bans czy jest 0 czy 1 jak 0 to się zaloguje a jak 1 to nie.
2.Chciałbym jeszcze wiedzieć nt czytania że gdy przeczyta w tabeli np. 0 to pokaże "<p>FREE</p>" a jeżeli 1 to "<p>PREMIUM</p>"
3.Również przydał by mi się skrypt zmiany tzn. w panelu po zalogowaniu aby była możliwość zmiany loginu [zmień] to wszystko.
Dopiero zaczynam ale już wygląda moja strona nieco obiecująco.

Dziękuję i Pozdrawiam
haahh
Wrzuć chociaż mysql_real_escape_string() do tych danych z pobranych przez POST.

1. Wydaje mi się, że najlepiej pobrać jego ID mając jego LOGIN (jak rozumiem, te rzeczy są unikalne). Następnie przeszukać tabele user_bans (która zawierałaby użytkowników zbanowanych) i patrzeć, czy tam jest. Jeżeli nie (nie zwróci) to logować, a jeżeli tak to przerwać.
2. Praktycznie to samo co powyżej (chyba, że coś źle zrozumiałem).
3. Początek praktycznie taki sam jak przy rejestracji tylko używasz zapytania mysql typu:
  1. "UPDATE users SET login='$login' WHERE user_id=$id LIMIT 1"

Jeżeli chodzi o formularz zmian to najpierw coś w stylu:
  1. $q = "SELECT login, cotamjeszczemasz FROM users WHERE user_id=$id";
  2. $r = @mysqli_query($dbc, $q);
  3.  
  4. if(mysqli_num_rows($r) == 1) {
  5. $row = mysqli_fetch_array($r, MYSQLI_NUM);
  6.  
  7. echo '<input type="text" name="login" value="' . $row[0] . '">'
  8. }

No i trzepiesz kolejne $row[0] itd, albo możesz zrobić MYSQLI_ASSOC i lecieć po nazwach.
Norbit_24
Cytat(erix @ 3.12.2008, 23:02:12 ) *
  1. <?php
  2. $sql = "SELECT * FROM user WHERE user_name = '".$user_login."' AND user_pass = '".
  3. ?>


Podatne na SQL Injection.


Co zrobic aby nie było poddatne na sql injection...?
krzysztof_kf
mysql_real_escape_string() między innymi dodajesz przed połączeniem do bazy danych tzw


  1. $name = mysql_real_escape_string($name);



Zapraszam do lektury bo inaczej będziesz się pytał czym się różni POST od GET


EDIT dokładnie po if daj takie coś


  1.  
  2. else {
  3. $name = mysql_real_escape_string($imie);
  4. $pass1 = mysql_real_escape_string($pass1);
  5. $pass2 = mysql_real_escape_string($pass2);
  6. $mail = mysql_real_escape_string($mail);
  7. $date = mysql_real_escape_string($date);
  8. $error = mysql_real_escape_string($error);
  9. }
darko
Cytat(Norbit_24 @ 18.06.2010, 12:26:12 ) *
Co zrobic aby nie było poddatne na sql injection...?

Użyć PDO
erix
A najlepiej, to przeczytać przyklejony wątek na ten temat.
jacekpom
u mnie wyskakuje błąd

Cytat
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/jacekpom/domains/strona.hostsms.pl/public_html/index.php:8) in /home/jacekpom/domains/strona.hostsms.pl/public_html/config.php on line 3

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/jacekpom/domains/strona.hostsms.pl/public_html/index.php:8) in /home/jacekpom/domains/strona.hostsms.pl/public_html/config.php on line 3


domyślam się że to przez session_start() probowałem usuwać z config.php zeby sie nie powtarzało ale wtedy nie działa
probowalem tez dodawać ob_start(); zmieniałem kodowanie na utf8 i to samo :/ HELP
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-2024 Invision Power Services, Inc.