Jednoduché přihlášení pomocí php a mysql 2/2
Napsal hary28 dne 29.07.2010 08:57 v Tvorba www stránek, PHP, MySQL | 29 komentářů
V předchozím článku jsme si vytvořily tabulku v MySQL a registraci. Nyní nám zbývá si vytvořit formulář pro zadání nicku a hesla poté pošleme zadaná data do scriptu který ověří zda se nick s heslem shodují s daty v MySQL. Po přihlášení se ještě podíváme jak se jednoduše i z tajné stránky odhlásit. Nyní začneme formulářem.
Formulář najdete v souboru index.php
Nyní nastavíme v tagu
<?php
include "./connect.php";/* připojení k databázi */
$login = mysql_real_escape_string($_POST["nick"]);/* nick zadaný ve formuláři pro přihlašování */
$heslo = mysql_real_escape_string($_POST["heslo"]);/* heslo zadané ve formuláři pro přihlašování */
$md5heslo = md5($heslo);/* Pomocí funkce md5() heslo zahashujeme */
/* — DOTAZ K MYSQL PRO OVĚŘENÍ PŘIHLAŠOVACÍCH DAT — */
$dotaz = mysql_query("select * from uzivatele where login = '$login' and heslo = '$md5heslo'");
$overeni = mysql_num_rows($dotaz);
$row = mysql_fetch_array($dotaz);
if($overeni == 1) {
session_start();
$_SESSION['login'] = stripslashes($login);
$_SESSION['id'] = $row["id"];
header("Location: admin.php");
die();
} else {
echo"Zadal jsi špatný login nebo heslo!";
}
?>
Nyní jsme se přihlásily a ve scriptu se nám do superglobálních proměnných zapsaly tyto údaje: id, login a přesměrovalo nás to na stránku admin.php. Pokud uživatel zadal špatný nick nebo heslo tak se mu vypsal text
<?php
echo"Zadal jsi špátný login nebo heslo!";
?>
Script pro přihlašování jsme si popsali a nyní nás asi bude zajímat jak se také odhlásit. V souboru admin.php najdeme odkaz ODHLÁSIT. Po kliknutí na odkaz přejdeme do souboru logout.php ve kterém se naléza jednoduchý script.
<?php
session_start();/* Zapneme session */
session_destroy();/* Smažeme všechna session */
header("location: index.php"); /* Přesmeruje na přihlašovací stránku */
?>
A to je zřejmě vše co je potřeba pro přihlašování. Nyní si můžete stáhnout registraci, přihlášení a odhlášení.
Komentáře (29)
hary28
30.07.2010, 23:07
Ano Turbo, máš pravdu. Na ochranu, která je nejdůležitější jsem zapoměl. Hnedka upravím.
Majkl
04.09.2010, 17:32
Moc hezký článek, jednoduchý, přehledný a chápaví. Mě, když jsem se učil programovat, vždy strašně rozčilovalo, jak všichni psali návody zdlouhavé, bez vysvětlení a často matoucí. Rozhodně doporučuji a dávám palec nahoru = sdílet na FB, protože to za to stojí ;)
Pítrs
14.09.2010, 09:54
Jsem v PHP začátečník, takže možná jsem dělal chybu někde jinde, možná blbbě nakonfigurovaný php nebo nevim. Nicméně tohle je první přihlašování (a i nejjednodušší), který mi funguje. Takže taky dávám velký palec nahoru. Mimochodem super stránka, asi sem budu chodit častěj;-)
hary28
14.09.2010, 14:34
Se rád že se vám mé články líbí. Pokud by jste měli nápad na nějaký další článek který zde chybí určitě mi napište. Zkusil bych pro vás nějaký připravit.
jano
15.11.2010, 12:41
zdravim, robil som podobne prihlasenie podla tejto knihy:
http://knihy.cpress.cz/knihy/pocitacova-literatura/programovani/php5-mysql-apache-vytvarime-webove-aplikace/
vysledok: skript som trosku upravil, ak som odhlaseny a chcem cez adresu predavat parametre do MYSQL, tak:
- skript na kontrolu uzivatelov ma sparavne presmeruje do verejnej zony
- ALE zaroven sa vykona zapis/mazanie v DB!!!
vobec tomu nerozumiem, kedze funkcie pre pracu s DB sa nachadzaju az za funkciou HEADER a vobec by sa nemali citat (pokial niesom prihlaseny).
louis
27.01.2011, 21:51
ahoj hary28
som uplny zaciatocnik, mam jednu otazku, co mam spravit aby mi po prihlaseny vypisal nick uzivatela, a nie echo...
dakujem pekne za odpoved ;)
inak fakt super stranka :)
hary28
27.01.2011, 22:22
louis: pokud ti stačí vypsat pouze login nic víc, tak je to úplně jednoduché login jsme si při přihlašování ukládali do session, takže nyní dáme pouze echo $_SESSION['login']; to je vše. :)
louis
27.01.2011, 23:18
no zmenil som to:
<?php
if($_SESSION['login']!=""){
echo $_SESSION['login']; <a href="logout.php">Odhlásit</a>';
} else {
echo'Tato stránka je přístupná pouze přihlášeným uživatelům!';
}
?>
a vyhadzuje mi to tuto chybu: Parse error: syntax error, unexpected '<' in ....
hary28
28.01.2011, 08:29
louis: zkus to takhle
<?php
if($_SESSION['login']!=""){
echo $_SESSION['login'].'<a href="logout.php">Odhlásit</a>';
} else {
echo'Tato stránka je přístupná pouze přihlášeným uživatelům!';
}
?>
jt
02.02.2011, 15:27
zajímá mě jetli že když použiju tento login pro online hru s více uživateli jestli to pude většina věcí bude v té online hře v mysql
hary28
03.02.2011, 15:31
jt: samozřejmě že ti tento login bude fungovat, ale budeš si ho muset přizpůsobit vlastní potřebě.
Richard Hutta
03.02.2011, 17:10
Moc hezký článek, začínám a tenhle návod mi bodnul.. akorát chi podoknout, že nehoře je nefunkční odkaz viz. "V předchozím článku jsme". Jinak taky doporučim moc si mi pomohl díky.
Richard Hutta
05.02.2011, 18:49
Takže jsem to trochu otestoval a mám problém, nejsem si jistý jestli se to stává i jinde, ale echo se vypíše i když přihlášení ještě neproběhlo. To bude stejně nejspíš zádrhel u mně. Jinak jsem se chtěl zeptat jak by vypadalo zabezpečeí pro ostatní stránky z pohledu session?
hary28
05.02.2011, 22:25
Richard Hutta: Na stránkách které chceš mít zabezpečení dáš vždy pouze podmínku která ověří zda existuje $_SESSION["login"], tak jak jsem to uváděl v předešlých komentářích uživateli louis.
marie14596
22.02.2011, 21:03
jasny
Maxiking
27.02.2011, 16:06
Navod je docela povedeny, ale mozna bych do ty registrace jeste doplnil tabulku na vyplneni udaju.
Maxiking
27.02.2011, 17:53
to znamena:
<form action="registrace.php" method="post">
<table align="center">
<tr>
<td align="right">Uživatelské jméno: </td>
<td><input type="text" name="nick" value="" size="25" tabindex="1" c/></td>
</tr>
<tr>
<td align="right">Heslo: </td>
<td><input type="password" name="heslo" value="" size="25" tabindex="2" /></td>
</tr>
<tr>
<td align="right">Heslo znovu:</td>
<td><input type="password" name="over_heslo" value="" size="25" tabindex="3" /></td>
</tr>
<tr>
<td align="right">Email:</td>
<td><input type="text" name="email" value="" size="25" tabindex="4" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" name="submit" value="Registrovat!"
/></td>
</tr>
</table>
</form>
undisputed
09.03.2011, 17:04
stiahol som si všetky tie súbory aj spravil databázu a nič nejde mi to v registrace.php keď dám píše
Nastala chyba v pripojeni k databazi
undisputed
09.03.2011, 17:23
nerozumiem tomu skúšal som už viac takýchto registrácii aj iných vecí čo pracujú s databázou a stále mi to nejde poradte mi
Pepík
17.04.2011, 20:01
DObry den, děkuju za vaši pomoc, ale jsem chtěl k tomu registrace, ale objevil to Nastala chyba v pripojeni k databazi. Jak to? Poradte mi díky. Já nemám zkušenosti s DATABÁZÍ A SQL. díky
hary28
18.04.2011, 13:26
Pepík: Pokud se objevila tato hláška, tak to vypadá, že jste zadal špatné údaje pro připojení k databázi.
ca
24.06.2011, 19:00
Velice děkuji za jednoduché, přehledné a skvěle fungující přihlašování.
Honza
10.09.2011, 00:31
Jako ukázka je to velice pěkné jen bych měl pár připomínek:
1)Registrace stále povoluje přidání více uživatelů se stejným nickem.
2)Po registraci by tam mělo být přesměrování na index.php.
3)Proboha! Jak můžeš "generovat" session id ze sloupce "id" v databázi? To je obrovský bezpečnostní prohřešek a měl bys to opravit, než si to takto zařídí čtenáři tvého blogu i na svých stránkách. Kdo ukradne session ID, což je v tomto případě velice snadné, má nad session plnou kontrolu.
Adam
26.11.2011, 18:49
Mockrát děkuji za super článek. Už dlouho zkouším registraci a přihlášení, ale až s tímto článkem to funguje. Děkuji
kuchařka, recepty online
online hry
vtipy, vtipná videa
Turbo
30.07.2010, 21:54
Script hezky jednoduchy, ale pokud to ma byt jako ukazka tak by chtelo treba upozornit ba mysql injection.