Advertisement
Guest User

djpw.cz - Registrácia (FAQ)

a guest
Feb 8th, 2015
221
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2. $path = "/";  // máte-li stránky v rootu, nechte bezezměny, pokud je provozujete v nějakém podadresáři, zadejte jeho jméno
  3.               // např. stránky mám na moje-domena.cz/adresar/, tak zadám $path = "/adresar/";
  4.  
  5. // funkce pro ošetření vstupních dat od uživatele
  6. // první parametr je odkaz na připojení k db, druhý samotný ošteřovaný řetězec
  7. function db_escape($link, $str)
  8. {
  9.     return mysqli_real_escape_string($link, $str);
  10. }
  11.  
  12.  
  13. include "pripojeni_db.php"; // soubor pripojeni_db.php zajistí připojení k databázi a výběr databáze, se kterou pracujeme, je nezbytné definovat v něm proměnnou $link = mysqli_connect();
  14. session_start();  // tohle je nezbytné a je nutné uvést tuto funkci na všech stránkách, kam se přihlášený uživatel dostane
  15.                   // možnost nastavit automatické spouštění session_start() nechávám stranou
  16.  
  17. // zjistíme, co chce uživatel dělat
  18. if (isset($_SESSION['username']) && isset($_GET['logout']))
  19. {
  20.     // uživatel je přihlášen a chce se odhlásit, takže smažeme údaje o přihlášení
  21.     $_SESSION = array();
  22.     if (isset($_COOKIE[session_name()]))
  23.     {
  24.         setcookie(session_name(), '', time()-42000, '/');
  25.     }
  26.     session_unset();
  27.     session_destroy();
  28.     // a přesměrujeme na index.php
  29.     header("location:http://".$_SERVER['SERVER_NAME'].$path."index.php", TRUE, 303);
  30.     exit;
  31. }
  32. elseif (isset($_SESSION['username']))
  33. {
  34.     //session_regenerate_id(); // ochrana před session fixation, lze vynechat
  35.     // uživatel je přihlášen a nechce se odhlásit, zde zobrazíme obsah pro registrované
  36.     // můžeme využit include apod.
  37.  
  38.     // tohle informuje uživatele, že je přihlášen a vypíše odkaz pro odhlášení
  39.     // můžeme to ale přemístit do includovaného souboru (kam se nám hodí)
  40.     echo "<p>Přihlášen: $_SESSION[username] <a href=\"http://".$_SERVER['SERVER_NAME'].$path."index.php?logout=1\">odhlásit</a></p>\n";
  41. }
  42. else
  43. {
  44.     // uzivatel není přihlášen
  45.     // pokud odeslal přihlašovací údaje, snaží se přihlásit
  46.     if (isset($_POST['username']) && isset($_POST['password']))
  47.     {
  48.         // ošetříme vstupní údaje od uživatele
  49.         // funkce trim() má význam hlavně u hesla, ořeže bílé znaky (např. mezery) na začátku a konci řetězce
  50.         $username = db_escape($link, trim($_POST['username']));
  51.         $password = db_escape($link, trim($_POST['password']));
  52.  
  53.         // zjistíme, jestli je v databázi daný uživatel a jestli se prokazuje platným heslem
  54.         // více o ukládání hesel, např. o tzv. solení, najdete na http://php.vrana.cz/ukladani-hesel.php
  55.         $result = mysqli_query($link, "SELECT COUNT(*) FROM users WHERE username = '$username' AND password = sha1('$password')");
  56.         $data = mysqli_fetch_assoc($result);
  57.        
  58.         if ($data)                  // předpokládáme, že dotaz proběhl úspěšně, pokud ne, bude stejně vráceno false
  59.                                        // true (a splnění podmínky) nastane pouze tehdy, když v databázi existuje správná kombinace uživatelského jména a hesla
  60.         {
  61.             // uložíme potřebné SESSION proměnné
  62.             $_SESSION['username'] = $username;
  63.             $_SESSION['cas_prihlaseni'] = time(); // čas, kdy se uživatel přihlásil, pozor, nejedná se o čas poslední akce, nevím, jestli ho využijete, může být smazán
  64.  
  65.             // po přihlášení uživatele přesměrujeme na index.php
  66.             header ("location:http://".$_SERVER['SERVER_NAME'].$path."index.php", TRUE, 303);
  67.             exit;  // aby bylo pravidlům učiněno zadost, zde stejně končí podmínka a jiná nemůže být splněna
  68.         }
  69.         else
  70.         {
  71.             // uživatel zadal neplatné přihlašovací údaje
  72.             // přesměrujeme ho na index.php a zobrazíme chybovou hlášku
  73.             header ("location:http://".$_SERVER['SERVER_NAME'].$path."index.php?incorrect_login=1", TRUE, 303);
  74.             exit;
  75.         }
  76.     }
  77.     else
  78.     {
  79.       // uživatel není přihlášen a ani neodeslal přihlašovací formulář, tak mu ho zobrazíme
  80.       echo "<div>";
  81.       if (isset($_GET['incorrect_login']))
  82.       {
  83.           echo "<p style=\"color: #F00\">Zadali jste neplatné uživatelské jméno nebo heslo</p>\n";
  84.       }
  85.       // zobrazíme formulář pro přihlášení
  86.       ?>
  87.       <form action="index.php" method="post">
  88.         Jméno:  <input name="username" type="text"><br>
  89.         Heslo: <input name="password" type="password"><br>
  90.         <input name="submit" type="submit" value="Přihlásit">
  91.       </form>
  92.       </div>
  93.       <?php
  94.     }
  95. }
  96. ?>
Advertisement
RAW Paste Data Copied
Advertisement