LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> PHP (71) - Přihlašování uživatelů na portál

Tož, uživatele již máme. Pojďme je tedy přihlásit (a odhlásit) z našeho výcvikového portálu.

26.11.2004 15:00 | Petr Zajíc | Články autora | přečteno 114969×

Komerční sdělení: Pořádáme Kurzy PHP

Dnes na náš portál doplníme funkci pro přihlašování a odhlašování uživatelů, které jsme si v předchozím díle seriálu vytvořili. Uvidíte, že to nemusí být až tak jednoduché, jak to na první pohled může vypadat.

Pozn.: Množí se dotazy, zda demoverze portálu bude umět všechny popisované funkce - ano, bude. Takže si skutečně můžete založit "účet" a testovat to s námi. Jak budou v jednotlivých dílech přibývat funkce, tak bude příklad upravován, aby vždy fungoval tak, jak je v článku vysvětleno.

Rozbor

Jednoduše - v odkazech v levé části stránky je položka Přihlásit. Ta povede na skript, který bude zajišťovat přihlašování uživatelů. Jestliže bude uživatel již přihlášen, změní se text odkazu z "Přihlásit" na "Odhlásit" a odkaz povede na skript pro odhlášení. Časem možná budeme chtít někde vypsat, kdo je aktuálně přihlášen (alespoň přezdívku), takže bychom na to již v této fázi měli myslet na o přihlášeném uživateli bychom si měli uložit na dobře dostupné místo nějaké informace.

Přihlašování uživatelů

Teď napíšu něco triviálního - pro přihlášení bude muset uživatel znát přezdívku a heslo. Takže přihlašovací skript (nazveme si jej třeba prihlaseni.php) bude pochopitelně obsahovat formulář pro zadání přezdívky a hesla a při ověřování je musí porovnat s údaji v databázi. Podstatnou část formuláře přitom můžeme opsat z minulého dílu - z formuláře pro registraci.

Co je nové a co se musí nějak rozhodnout je následující věc: co udělat s uživatelem, jehož přihlašovací údaje souhlasí? Tento údaj je od nynějška nutné vést v patrnosti, a to tak dlouho, dokud se uživatel neodhlásí. Navíc, je tuto skutečnost nutné nějak sdělit všem následujícím stránkám, které uživatel před svým odhlášením navštíví. Takové věci se dají udělat například pomocí cookies nebo pomocí sessions. Jedno i druhé jsme již v seriálu rozebírali.

Zvolíme například sessions. Jako praktické se mi ukázalo nejen evidovat zda je nějaký uživatel přihlášen, ale rovněž jaký to je uživatel. Pravděpodobně si vzpomínáte, že v minulém díle jsme v tabulce uživatelů definovali pole ID, které se automaticky zvyšuje o jedničku s každým novým uživatelem. Právě toto pole pro daného uživatele budeme ukládat do session proměnné $_SESSION["id"] a tak budeme mít uživatele jednoznačně určeného.

Neboli, po úspěšném přihlášení se skript postará o to, aby v proměnné $_SESSION["id"] byl identifikátor aktuálního uživatele. Ověřovací část skriptu prihlaseni.php potom může vypadat nějak takto:

<?
function iduzivatele ($prezdivka, $heslo, $link)
{
  
$vysledek=mysql_query("select id from uzivatele where prezdivka='".$prezdivka."' and heslo='".$heslo."'", $link);
  if (
mysql_num_rows($vysledek)==0)
    return
false;
  else {
    
$radek = mysql_fetch_array($vysledek);
    return
$radek["id"];
  }
}  
// tělo skriptu - nejprve si vytvoříme odkaz na databázi
$link=mysql_connect(SQL_HOST, SQL_USERNAME, SQL_PASSWORD);
mysql_select_db(SQL_DBNAME);

$BudemeZobrazovat=true;
if (!empty(
$_POST)) // už se odeslalo
{
  
$id =iduzivatele($_POST["prezdivka"], $_POST["heslo"], $link);
  if (!
$id) echo "Uživatelské jméno a/nebo heslo nesouhlasí";
  else
  {
    
$BudemeZobrazovat=false;
    
$_SESSION["id"]= $id;
  }
}
?>

Bude tento přístup fungovat? Sám o sobě jistě fungovat bude. Problém je, že údaj o tom, že se přihlášení zdařilo budeme mít k dispozici až v okamžiku vyhodnocení funkce iduzivatele(). Pečlivý čtenář si jistě všimne, že tato funkce je až ve skriptu prihlaseni.php. To může vadit a nemusí. Kdybychom například ihned po přihlášení chtěli v souboru navigace.php změnit příkaz "Přihlásit" na "Odhlásit" a zapsat něco ve smyslu:

<?if (isset($_SESSION["id"])):?>
<p><a href="index.php?clanek=odhlaseni">Odhlásit</a></p>
<?else:?>
<p><a href="index.php?clanek=prihlaseni">Přihlásit</a></p>
<?endif?>

tak to NEBUDE fungovat podle očekávání. Důvod je prostý - soubor navigace.php se totiž do výsledné stránky vkládá dřív než soubor prihlaseni.php a chudák navigace.php nemá ani ponětí, že budeme nastavovat nějakou session proměnnou, tatož aby věděl, jaká bude její hodnota. Takže kdybyste upravili soubor navigace.php podle receptu uvedeného výše, bude to fungovat až po opětovném načtení stránky.

Jelikož to vypadá neprofesionálně, zkusíme to trochu vylepšit. Trik spočívá v tom, že když se budeme přihlašovat (a následně rovněž odhlašovat), provede se nastavení (nebo zrušení) proměnné $_SESSION["id"] jako úplně první věc ve skriptu, ještě předtím, než se začne zpracovávat soubor navigace.php. My to ve výukovém příkladu celé umístíme rovnou do souboru index.php, dalo by se to však i včlenit jako samostatný soubor. Podívejte se, jak nyní vypadá soubor index.php.

Odhlašování

Uvědomme si, že "přihlášení" znamenalo pro náš skript dvě věci:

  • Odkontrolovalo se, zda údaje souhlasí s databází
  • Pokud ano, nastavila se session proměnná $_SESSION["id"]

Proto je proces "odhlašování" velmi jednoduchý. Nic se kontrolovat nemusí, a opravdu tedy stačí zrušit nastavení proměnné $_SESSION["id"]. Což uděláme rovněž ve skriptu index.php. V tu chvíli již zbytek stránky bude vědět o tom, že jsme se odhlásili.

Změny na portálu

Přijde mi praktické okomentovat nějak všechny změněné soubory, takže se o to počínaje tímto dílem pokusím:

Nové soubory:

Změněné soubory:

  • index.php - nastartování session, aplikační logika pro přihlašování a odhlašování a přesunutí vloženého souboru výše v těle skriptu
  • navigace.php - viz článek
  • func.php - přidána funkce iduzivatele pro zjištění, zda má správné heslo

Na současný stav projektu se můžete na našem webu podívat nebo si jej můžete stáhnout.

Pozn.: Aby Vám stažená verze fungovala na lokálním stroji, upravte si hodnotu konstant SQL_HOST, SQL_USERNAME, SQL_PASSWORD a SQL_DBNAME. Případně si je můžete včlenit do konfiguračního souboru podobně, jako jsem to udělal v souboru func.php.

Verze pro tisk

pridej.cz

 

DISKUZE

function iduzivatele ($prezdivka, $heslo, $link) function iduzivatele 26.11.2004 17:57 Lukáš Kokoška
Je to tak 26.11.2004 18:10 Petr Zajíc
opravte to 27.11.2004 17:16 mrzout
L Re: opravte to 28.11.2004 12:21 Petr Zajíc
  L Re: opravte to 30.11.2004 01:21 Jan Houštěk
    L Re: opravte to 30.11.2004 13:22 Petr Zajíc
      L Re: opravte to 30.11.2004 23:05 Jan Houštěk
        |- Re: opravte to 1.12.2004 22:23 Petr Zajíc
        | L Re: opravte to 2.12.2004 09:22 Jan Houštěk
        L Re: opravte to 19.7.2006 00:16 Aleš Hakl
Dotaz 28.11.2004 13:35 mysql_php
L Re: Dotaz 28.11.2004 14:17 Petr Zajíc
nastaveni SQL 18.2.2006 14:48 Andrej Kurochenko
L Re: nastaveni SQL 18.2.2006 14:55 Ondřej Čečák
  L Re: nastaveni SQL 18.2.2006 17:38 Andrej Kurochenko
znovu nevim 18.2.2006 18:40 Andrej Kurochenko
|- Re: znovu nevim 18.2.2006 19:28 o.k.
L Re: znovu nevim 19.2.2006 22:42 Petr Zajíc
viac sesssion hodnot 18.7.2006 23:46 mattonik
L Re: viac sesssion hodnot 18.7.2006 23:53 mattonik
Parada 24.10.2006 22:38 Peter Rožnay
L Re: Parada 25.10.2006 15:52 Petr Zajíc
přihlášení 11.11.2006 19:50 Pavel Jastrzembski
prezivka v strankach 12.1.2008 16:10 rudhas gasper
Tak už jsem se také dokousal až sem :) 3.2.2008 10:09 Jan 'Jan16' Sixta
Problem s prihlasovanim 22.4.2008 21:48 Marek Mucha
Warning 3.6.2008 17:18 Vladimir Macko
value 13.5.2010 07:01 Robert Jedek
par chyb 13.3.2012 20:12 Jakub Šilar




Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

15.4.2017 15:20 /František Kučera

Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě IoT a radiokomunikace? Přijď na sraz spolku OpenAlt, který se bude konat ve středu 19. dubna od 18:30 v Šenkovně (Sokolská 60, Praha 2).


Přidat komentář

5.3.2017 19:12 /Redakce Linuxsoft.cz
PR: 23. března proběhne v Praze konferenci na téma Cloud computing v praxi. Hlavními tématy jsou: Nejžhavější trendy v oblasti cloudu a cloudových řešení, Moderní cloudové služby, Infrastruktura současných cloudů, Efektivní využití cloudu, Nástrahy cloudových řešení a jak se jim vyhnout.
Přidat komentář

27.2.2017 22:12 /František Kučera
Pozvánka na 137. sraz OpenAlt – Praha: Tentokrát jsme si pro vás připravili neobvyklou akci. Ve středu 1.3. v 17:30 nás přivítá sdružení CZ.NIC ve svých prostorách v Milešovské ulici číslo 5 na Praze 3, kde si pro nás připravili krátkou prezentaci jejich činnosti. Následně navštívíme jejich datacentrum pod Žižkovskou věží. Provedou nás prostory, které jsou běžnému smrtelníkovi nedostupné!
Po ukončení prohlídky se všchni odebereme do hostince U vodoucha, Jagelonská 21, Praha 3 pochutnat si na některém z vybraných piv či dát si něco na zub. Rezervaci máme od 19:30, heslo je OpenAlt.
Ale pozor! Do prostor datového centra máme omezený přístup, dostane se tam pouze 10 lidí! Takže kdo přijde dříve, ten má přednost, a občanky s sebou! Kdo nebude chtít na prohlídku datového centra, může se pomalu přesunout do hostince U vodoucha a u nepřeberné nabídky piv počkat na ostatní.
Přidat komentář

18.1.2017 0:49 /František Kučera
Členové a příznivci spolku OpenAlt se pravidelně schází v Praze a Brně. Fotky z pražských srazů za uplynulý rok si můžete prohlédnout na stránkách spolku. Příští sraz se koná už 19. ledna – tentokrát je tématem ergonomie ovládání počítače – tzn. klávesnice, myši a další zařízení. Také budete mít příležitost si prohlédnout pražský hackerspace Brmlab.
Přidat komentář

8.1.2017 17:51 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Přijď na sraz spolku OpenAlt, který se bude konat ve čtvrtek 19. ledna od 18:30 v pražském hackerspacu Brmlab. Tentokrát je tématem srazu ergonomie ovládání počítače – tzn. klávesnice, myši a další zařízení. K vidění bude mechanická klávesnice dasKeyboard, trackball Logitech nebo grafický tablet (a velký touchpad) Wacom. Přineste i vy ukázat svoje zajímavé klávesnice a další HW. V 18:20 je sraz před budovou, v 18:30 jdeme společně dovnitř, je tedy dobré přijít včas. Podle zájmu se později přesuneme do nějaké restaurace v okolí.
Přidat komentář

1.12.2016 22:13 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Přijď na sraz spolku OpenAlt, který se bude konat ve čtvrtek 8. prosince od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Sraz bude tentokrát tématický. Bude retro! K vidění budou přístroje jako Psion 5mx nebo Palm Z22. Ze svobodného hardwaru pak Openmoko nebo čtečka WikiReader. Přijďte se i vy pochlubit svými legendami, nebo alespoň na pivo. Moderní hardware má vstup samozřejmě také povolen.
Komentářů: 1

4.9.2016 20:13 /Pavel `Goldenfish' Kysilka
PR: Dne 22.9.2016 proběhne v Praze konference Cloud computing v praxi. Tématy bude např. nejnovější trendy v oblasti cloudu a cloudových řešení, provozování ERP v cloudu, o hostování různých typů softwaru, ale třeba i o zálohování dat nabízeném podnikům formou služby.
Přidat komentář

1.9.2016 11:27 /Honza Javorek
Česká konference o Pythonu, PyCon CZ, stále hledá přednášející skrz dobrovolné přihlášky. Máte-li zajímavé téma, neváhejte a zkuste jej přihlásit, uzávěrka je již 12. září. Konference letos přijímá i přednášky v češtině a nabízí pomoc s přípravou začínajícím speakerům. Řečníci mají navíc vstup zadarmo! Více na webu.
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

17.4.2017 19:15 / Jakub shoop
chyba

7.4.2017 15:43 / Som
foreign car repair

31.3.2017 18:33 / David Ostrovsky
Dotazník na obeznámenost s hummusem.

24.3.2017 11:54 / Hui
country cottages

16.3.2017 16:33 / BezvaDesign.cz
Re: Hledám grafika do teamu

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2017) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze