Weblog v PHP – registrace a přihlášení autorů
Ještě než se pustíme do vytváření vlastního administračního rozhraní weblogu, musíme zajistit registraci autorů a také jejich přihlašovaní a odhlašování, které je vyřešeno prostřednictvím sessions.
Hotovou aplikaci si můžete prohlédnout a vyzkoušet.
Registrace autorů
Registraci zajišťuje soubor reg.php. Přestože je HTML formulář až na samém konci souboru, zmíním se o něm již nyní. Od autora budeme vyžadovat tyto údaje: login (uživatelské jméno), heslo (2x), skutečné jméno a email. Aby uživatel nemusel po chybném odeslání formuláře vyplňovat vše znovu, vložíme do atributů value
kratičké kódy:
<h2 class=“heading“>Weblog – registrace autorů</h2>
<div class=“form“>
<form action=“reg.php“ method=“post“>
<input type=“hidden“ name=“sent“ value=““>
<div class=“formrow“>
<div class=“formdesc“>Login</div><div class=“forminput“><input type=“text“ name=“login“ size=“30″ value=“<?php if(IsSet($login)) echo $login ?>“ maxlength=“10″></div>
</div>
<div class=“formrow“>
<div class=“formdesc“>Heslo</div><div class=“forminput“><input type=“password“ name=“password“ size=“30″ maxlength=“10″></div>
</div>
<div class=“formrow“>
<div class=“formdesc“>Heslo znovu</div><div class=“forminput“><input type=“password“ name=“password_2″ size=“30″ maxlength=“10″></div>
</div>
<div class=“formrow“>
<div class=“formdesc“>Jméno</div><div class=“forminput“><input type=“text“ name=“name“ size=“30″ value=“<?php if(IsSet($name)) echo $name ?>“ maxlength=“30″></div>
</div>
<div class=“formrow“>
<div class=“formdesc“>Email</div><div class=“forminput“><input type=“text“ name=“email“ size=“30″ value=“<?php if(IsSet($email)) echo $email ?>“ maxlength=“30″></div>
</div>
<div class=“formrowsubmit“>
<input type=“submit“ name=“send“ value=“Registrovat“ class=“submit“>
</div>
</div>
</form>
Všechny chybové i jiné hlášky umístíme do souboru msg.php do dvou polí $msg_error
a $msg_message
. Ve všech skriptech pak stačí uvést jen číslo příslušné chyby:
// chybove a dalsi hlasky
$msg_error = Array(‚Chybně zadané údaje.‘,
‚Musíte vyplnit obě položky.‘,
‚Časový limit vypršel, přihlašte se znovu.‘,
‚Přihlašte se prosím.‘,
‚Musíte vyplnit oba údaje.‘,
‚Datum vydání nesmí být menší než aktuální datum.‘,
‚Musíte vyplnit všechny údaje.‘,
‚Neplatná emailová adresa.‘,
‚Heslo nebylo zadáno správně.‘,
‚Toto uživ. jméno již existuje, vyberte si prosím jiné.‘);
$msg_message = Array(‚Byl(a) jste odhlášen(a).‘,
‚Článek byl přidán.‘,
‚Článek byl smazán.‘,
‚Článek byl upraven.‘,
‚Článek nelze smazat.‘,
‚Článek nelze upravit.‘,
‚Byl(a) jste úspěšně zaregisrován(a) a přihlášen(a).‘);
Pokud byl formulář odeslán, musíme nejprve zkontrolovat, zda byly vyplněny všechny povinné údaje. Pokud ne, vložíme do pole $error
číslo příslušné chyby. Obdobně se postupuje i v dalších podmínkách, kde postupně kontrolujeme platnost emailové adresy, rovnost hesel a také to, jestli náhodou zvolený login již neexistuje:
require „msg.php“; // chybove hlasky a zpravy
// byl odeslan formular ?
if(IsSet($_POST[‚sent‘])) {
$login = $_POST[‚login‘];
$password = $_POST[‚password‘];
$password_2 = $_POST[‚password_2‘];
$name = $_POST[‚name‘];
$email = $_POST[‚email‘];
// byly vyplneny vsechny povinne udaje ?
if($login==““ || $password==““ || $password_2==““ || $email==““ || $name==““) {
$error[] = 6;
}
// pokud byl zadan email, zkontroluje jeho platnost
if($email != „“ && (!EregI(„^[a-z0-9]+[a-z0-9\._-]*@[a-z0-9]+[a-z0-9\._-]*\.[a-z]{2,10}$“, $email) || EregI(„\.{2,}“, $email) || EregI(„_{2,}“, $email) || EregI(„-{2,}“, $email))) {
$error[] = 7;
}
// rovnaji se hesla ?
if($password!=$password_2) {
$error[] = 8;
}
require(„../db.php“); // pripoji k databazi
// existuje zadany login ?
$query = @MySQL_Query(„SELECT login FROM author WHERE login LIKE ‚$login'“) or Weblog_Error(2);
if(MySQL_Num_Rows($query) != 0) {
$error[] = 9;
}
Pokud je vše v pořádku, můžeme se pustit do samotné registrace. Heslo funckí MD5()
zakódujeme a společně s dalšími údaji vložíme do databáze. Následně provedeme přihlášení autora, a to pomocí sessions. Do session nazvané auth
vložíme všechny potřebné informace (id
autora, jméno, email a čas, po který bude session platná – v našem případě 30 minut). Na závěr pak autora přesměrujeme do administrační části.
// vse je v poradku, muzeme provest registraci a prihlaseni
if(!IsSet($error)) {
$password = MD5($password);
$query = @MySQL_Query(„INSERT INTO author VALUES (“, ‚$login‘, ‚$password‘, ‚$name‘, ‚$email‘, ‚U‘)“) or Weblog_Error(2);
// prihlaseni pomoci session
Session_Start();
$_SESSION[‚auth‘] = Array(
‚id‘ => $user_id = MySQL_Insert_ID(),
‚user_type‘ => ‚U‘,
‚name‘ => $name,
‚email‘ => $email,
‚time‘ => Time()+1800
);
MySQL_Close();
// presmerovani do administracni casti
$message = 6;
Header(‚Location: http://‘. $_SERVER[‚HTTP_HOST‘] . ‚/weblog/admin/index.php?message=‘ . $message . ‚&‘ . SID);
exit;
}
MySQL_Close();
}
V případě, že byla zaznamenána nějaká chyba, musíme ji pochopitelně vypsat:
// chybove hlasky
if(IsSet($error)) for($i=0;$i<Count($error);$i++) echo ‚<p class=“error“>‘ . $msg_error[$error[$i]] . ‚</p>‘;
Přihlášení autorů
Přihlášení provedeme pomocí souboru login.php. Formulář je znovu velmi jednoduchý, od autora potřebujeme pouze jeho login a heslo.
<div class=“form“>
<form action=“login.php“ method=“post“>
<input type=“hidden“ name=“sent“ value=““>
<div class=“formrow“>
<div class=“formdesc“>Login</div><div class=“forminput“><input type=“text“ name=“login“ size=“30″ value=“<?php if(IsSet($login)) echo $login; ?>“ maxlength=“50″></div>
</div>
<div class=“formrow“>
<div class=“formdesc“>Heslo</div><div class=“forminput“><input type=“password“ name=“password“ size=“30″ maxlength=“10″></div>
</div>
<div class=“formrowsubmit“>
<input type=“submit“ name=“send“ value=“Přihlaš“ class=“submit“>
</div>
</div>
</form>
Po odeslání formuláře zkontrolujeme, zda byly vyplněny obě položky. Následně zjistíme, jestli se zadaný login a heslo nachází v databázi. Pokud ano, můžeme provést přihlášení a přesměrování do administrační části.
require „msg.php“; // chybove hlasky a zpravy
// byl odeslan formular ?
if(IsSet($_POST[‚sent‘])) {
$login = $_POST[‚login‘];
$password = $_POST[‚password‘];
// byly zadany oba udaje (login, heslo) ?
if($login != „“ && $password !=““) {
require „../db.php“; // pripoji k databazi
$password = MD5($password);
// vybere autora
$query = @MySQL_Query(„SELECT id, name, email, user_type FROM author WHERE (login LIKE ‚$login‘) AND (password LIKE ‚$password‘)“) or Weblog_Error(2);
// prihlaseni autora pomoci session
if($result = MySQL_Fetch_Array($query)) {
Session_Start();
// do session se ulozi id, typ (A nebo U), jmeno a email autora + doba, po kterou bude session platna (30 min)
$_SESSION[‚auth‘] = Array(
‚id‘ => $result[‚id‘],
‚user_type‘ => $result[‚user_type‘],
‚name‘ => $result[‚name‘],
‚email‘ => $result[‚email‘],
‚time‘ => Time()+1800
);
MySQL_Close();
// presmerovani do administracni casti
Header(‚Location: http://‘. $_SERVER[‚HTTP_HOST‘] . ‚/weblog/admin/index.php?‘ . SID);
} else {
// chybne zadane udaje
$error = 0;
MySQL_Close();
}
} else {
// nebyly zadany oba udaje
$error = 1;
}
}
Pokud něco neproběhlo správně, musíme vypsat chybovou hlášku:
// chybove hlasky a zpravy
if(IsSet($_GET[‚error‘])) $error = $_GET[‚error‘];
if(IsSet($error) && IsSet($msg_error[$error])) echo ‚<p class=“error“>‘ . $msg_error[$error] . ‚</p>‘;
if(IsSet($message) && IsSet($msg_message[$message])) echo ‚<p class=“message“>‘ . $msg_message[$message] . ‚</p>‘;
Odhlášení autorů
Přihlášení autorů není jediná funkce, kterou plní soubor login.php. Kromě přihlášení můžeme provést i odhlášení autora, a to v případě že login.php zavoláme například takto (login.php?logout=yes
):
// odhlaseni autora
if(IsSet($_GET[‚logout‘])) {
Session_Start();
Session_Destroy();
$message = 0;
}
Kontrola přihlášení
Do všech souborů, kde vyžadujeme přihlášení (např. index.php, update.php), musíme vložit soubor checklogin.php, který zkontroluje, zda je autor skutečně přihlášen. Pokud ne, provede se přesměrování na stránku login.php. Může však nastat ještě jeden problém, autor je sice přihlášen, ale víc jak 30 minut není aktivní, takže se musí přihlásit znovu.
Session_Start();
// pokud je autor prihlasen, vlozime do prislusnych promennych informace ze session
if (IsSet($_SESSION[‚auth‘])) {
$user_id = $_SESSION[‚auth‘][‚id‘];
$user_type = $_SESSION[‚auth‘][‚user_type‘];
$name = $_SESSION[‚auth‘][‚name‘];
$email = $_SESSION[‚auth‘][‚email‘];
$time = $_SESSION[‚auth‘][‚time‘];
// pokud je autor vice nez 30 min neaktivni, musi se prihlasit znovu; jinak se aktualizuje cas v session
if ($time < Time()) {
$error = 2;
Session_Destroy();
Header(‚Location: http://‘. $_SERVER[‚HTTP_HOST‘] . ‚/weblog/admin/login.php?error=‘ . $error);
exit;
} else {
$_SESSION[‚auth‘][‚time‘] = Time()+1800;
}
} else {
// autor neni prihlasen
$error = 3;
Header(‚Location: http://‘. $_SERVER[‚HTTP_HOST‘] . ‚/weblog/admin/login.php?error=‘ . $error);
exit;
}
Z uvedeného příkladu je vidět, že práce se sessions je poměrně snadná a rychlá. Přihlášení lze samozřejmě ještě vylepšit, například kontrolou IP adresy. Příště začneme s vlastním administračním rozhraním.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Nejlevnější VPS: To je nový Cloud Server Mini od ZonerCloud
4. června 2024 -
Co je to VRAM a jak ji navýšit bez drahého upgradu?
20. srpna 2024 -
Zabezpečení e-mailů: Jak můžete chránit vaši firemní komunikaci
13. prosince 2023
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024
Ganja
Pro 11, 2010 v 16:29Uplně nechápavej ten návod!!!!
Maathy
Pro 22, 2010 v 13:20Vpohode navod… netreba slov kdyz rozumis kodu
ale je pravda ze pokud nerozumis, tak se to na tomhle navodu nenaucis..
Asus
Led 12, 2011 v 18:00jj úplně nepochopitelný
Fatal Medvísdek PŮ
Led 31, 2011 v 13:54rozumím kodů a stejnak to je težký pochopit chtělo by to popsat stručně co máme vytvořit jesli php atd … alebo aspon uplouad ke stažení a už jen u sebe v kódech to změnit .. hlavička chybí … nepřehled mezi css a php když už tak jse dává script z html a né css to jsem teda nepochopil mno ale budíš ? :O
Fatal Medvídek PŮ
Led 31, 2011 v 13:56v nějakých html editorů to nejede … tak spíš abyste rozdělili php,css a html aby jse to jen skopírovalo tam kam má bylo by to lepší a pro ty který tomu nerozumí by to bylo aspon o něco lehčí :)
Pepik
Dub 19, 2011 v 22:11Nechapete o tuto návodu? A můžete snadno zaheslování na stránku:
Tady to je příklady zaheslování stránek:
Zadej heslo:
Vítejte v Morii!
… další tajný text
Pokudte o něčemu nebudeš rozumět, obratte nas na zacek13@email.cz . Díky