Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP/MySQL] Prosty panel logowania
sleedz
post 3.12.2008, 21:48:03
Post #1





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 15.01.2008

Ostrzeżenie: (0%)
-----


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. );
Go to the top of the page
+Quote Post
erix
post 3.12.2008, 22:02:12
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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?


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
sleedz
post 3.12.2008, 22:05:22
Post #3





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 15.01.2008

Ostrzeżenie: (0%)
-----


Oj sorki. Zapomniałem zmienić z GET na POST...
A co do powielania: Żeby było przejrzystsze tongue.gif
Go to the top of the page
+Quote Post
erix
post 3.12.2008, 22:13:33
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
pyro
post 3.12.2008, 22:58:11
Post #5





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


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


Ten post edytował pyro 3.12.2008, 23:03:20


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
harleyzbro
post 9.01.2009, 18:05:04
Post #6





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 4.01.2009

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
erix
post 9.01.2009, 21:23:19
Post #7





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Użyj np. phpMyAdmina i dodaj sobie odpowiedni rekord do tabeli...


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
harleyzbro
post 10.01.2009, 12:35:01
Post #8





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 4.01.2009

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
erix
post 10.01.2009, 12:39:54
Post #9





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Jaka funkcja? :|

Jakiego zapytania używasz w celu dodania nowego usera?


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
harleyzbro
post 10.01.2009, 12:55:03
Post #10





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 4.01.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
KomputeromaniaK
post 10.01.2009, 14:01:38
Post #11





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 10.01.2009

Ostrzeżenie: (0%)
-----


A rejestracja?
Go to the top of the page
+Quote Post
harleyzbro
post 10.01.2009, 15:24:17
Post #12





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 4.01.2009

Ostrzeżenie: (0%)
-----


hmm...racja.Jestem początkujący...macie może jakiś kodzik, który da się zaadoptować.Bede wdzieczny.
Go to the top of the page
+Quote Post
debian
post 24.01.2009, 15:11:32
Post #13





Grupa: Zarejestrowani
Postów: 122
Pomógł: 1
Dołączył: 6.11.2008
Skąd: /etc/passwd

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post
vaverix
post 14.02.2009, 22:43:27
Post #14





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 14.02.2009

Ostrzeżenie: (0%)
-----


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///

Ten post edytował vaverix 14.02.2009, 22:59:40
Go to the top of the page
+Quote Post
Otto
post 17.04.2010, 13:28:05
Post #15





Grupa: Zarejestrowani
Postów: 144
Pomógł: 7
Dołączył: 22.03.2010

Ostrzeżenie: (0%)
-----


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


Ten post edytował Otto 17.04.2010, 14:14:08
Go to the top of the page
+Quote Post
Potar
post 6.05.2010, 18:23:02
Post #16





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 27.02.2010

Ostrzeżenie: (20%)
X----


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

Ten post edytował Potar 6.05.2010, 18:24:15


--------------------
Odwiedź moją stronę!
Go to the top of the page
+Quote Post
haahh
post 8.06.2010, 17:48:52
Post #17





Grupa: Zarejestrowani
Postów: 23
Pomógł: 9
Dołączył: 6.06.2010

Ostrzeżenie: (0%)
-----


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.


--------------------
This function has been DEPRECATED as of PHP 5.3.8.
Go to the top of the page
+Quote Post
Norbit_24
post 18.06.2010, 11:26:12
Post #18





Grupa: Zarejestrowani
Postów: 163
Pomógł: 2
Dołączył: 7.03.2009

Ostrzeżenie: (0%)
-----


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...?
Go to the top of the page
+Quote Post
krzysztof_kf
post 18.06.2010, 11:33:44
Post #19





Grupa: Zarejestrowani
Postów: 1 135
Pomógł: 158
Dołączył: 19.03.2009
Skąd: Toruń

Ostrzeżenie: (0%)
-----


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


Ten post edytował krzysztof_kf 18.06.2010, 11:41:12
Go to the top of the page
+Quote Post
darko
post 18.06.2010, 11:40:37
Post #20





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Cytat(Norbit_24 @ 18.06.2010, 12:26:12 ) *
Co zrobic aby nie było poddatne na sql injection...?

Użyć PDO


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.04.2024 - 10:18