Prakticky s MySQL - 8. díl

Po dokončení registrace uživatelů dnes k naší diskusi přidáme i přihlašovací systém. Jak na to si ukážeme v dnešním díle.

Dokončení registrace uživatelů

Po odeslání dat z našeho formuláře pro registraci uživatelů bychom měli data zapsat do databáze a seznámit s výsledkem celé operace uživatele – podívejme se tedy na rovnou na samotný skript:

zaregistrovat.php

<?
mysql_connect("localhost","root","heslo");
$db=MySQL_Select_DB("test");
/* připojení k databázi*/

@$query=MySQL_Query("Insert into Uzivatele values(null,`$Jmeno`, `$Login`, `$Heslo`, `$Email`, 0)");
/* vložení dat do tabulky*/

if(!query):
/* pokud se operace nepodaří, vypíše se tento kód*/
?>
<html>
<head>
<title>Registrace nebyla úspěšná!!</title>
</head>
<style>
body{font-family:arial ce;font-size:12;background-color:maroon;border-color:maroon}
b{font-size:12;font-weight:bolder}
table{border-width:1;border-color:maroon;background-color:white;color:maroon}
input{font-family:arial ce;font-size:12;color:maroon;border-color:maroon;background:url("pozadi.gif")
}
td{border-width:0}
.submit{font-family:arial ce;font-size:12;color:maroon;font-weight:bolder;border-width:1;border-color:maroon}
.big{font-size:14;color:white}
</style>
<body>
Je nám líto, ale vaše registrace se nepovedla. Můžete to zkusit <a href="registrace.htm">ZNOVU</a>.
</body>
</html>

<?
else:
/* pokud se operace podaří, vytiskne se toto*/
?>

<html>
<head>
<title>Registrace byla úspěšná!!</title>
</head>
<style>
body{font-family:arial ce;font-size:12;background-color:maroon;border-color:maroon}
b{font-size:12;font-weight:bolder}
table{border-width:1;border-color:maroon;background-color:white;color:maroon}
input{font-family:arial ce;font-size:12;color:maroon;border-color:maroon;background:url("pozadi.gif")
}
td{border-width:0}
.submit{font-family:arial ce;font-size:12;color:maroon;font-weight:bolder;border-width:1;border-color:maroon}
.big{font-size:14;color:white}
</style>
<body>
<table width=400 align=center>
<tr><td colspan=2 align=center><h3>Vaše registrační údaje</h3></td></tr>
<tr><td align=left><b>Jméno a příjmení:<td align=left><?echo $Jmeno;?></td></tr>
<tr><td align=left><b>Přezdívka:<td align=left><?echo $Login;?></td></tr>
<tr><td align=left><b>Heslo:<td align=left><?echo $Heslo;?></td></tr>
<tr><td align=left><b>Email:<td align=left><?echo $Email;?></td></tr>
<tr><td colspan=2 align=left><br></td></tr>
</body>
</html>

<?
endif;
?>

Výpis úspěšné registrace pak tedy bude vypadat takto:

V naší tabulce pak bude záznam uložen přesně takto:

Kaskádové styly

Možná jste si všimli, že zbytečně vypisujeme v našich předchozích dokumentech ty stejné kaskádové styly. Právě proto je výhodné je i kvůli úpravám ukládat do samostatných CSS souborů a ty poté vkládat do HTML kódu jak odkaz a ně. Takový CSS dokument může vypadat takto:

Vidíme, že se v praxi pouze neuvádí HTML tagy, ale jinak je kód stejný. Při vkládání do dokumentů pak užijeme tento kód:

<LINK href="main.css" rel=StyleSheet type=text/css>

Logování

Pokud bude chtít uživatel vstoupit do diskuse, bude muset být jeho přístup nějakým způsobem akreditován. Nejprve si tedy opět nachystáme logovací HTML dokument:

login.htm

<html>
<head>
<title>Vstup do diskuse</title>
<LINK href="main.css" rel=StyleSheet type=text/css>
</head>
<body>
<table width=200 align=center>
<tr><td colspan=2 align=center><h4>Vstup do diskuse</h4></td></tr>
<tr><td align=left><b>Login:<td align=left><form action="log.php" method="POST"><input name="Login"></td></tr>
<tr><td align=left><b>Heslo:<td align=left><input name="Heslo" type="password"></td></tr>
<tr><td colspan=2 align=center><input type="submit" class=submit value="Vstoupit"></form></td></tr>
</body>
</html>

log.php

Při kontrole údajů z databáze musíme po jejím dokončení zakódovat heslo pomocí algoritmu MD5 a login zase rozkódovatelnou funkcí base64.

<?
mysql_connect("localhost","root","heslo");
$db=MySQL_Select_DB("test");
/*připojení k databázi*/

@$query=MySQL_Query("Select * from Uzivatele where Prezdivka=`$Login`");
/*vybrání uživatele*/

if($query):
/*pokud je dotaz nenulový*/

$fetch=MySQL_Fetch_Array($query);
$password=$fetch["Heslo"];
$status=$fetch["Status"];
/*vybereme z tabulky údaje pomocí pole*/


if(($password==$Heslo)and($password!="")):
/*pokud se hesla shodují a nejsou nulová*/

$pass=MD5($password);
$log=base64_encode($Login);
/*provede se zakódování údajů*/

$path = SubStr($SCRIPT_NAME, 0, StrRPos($SCRIPT_NAME, "/")).
"/diskuse.php?Login=$log&Heslo=$pass&Status=$status";
Header("Location: http://$SERVER_NAME:$SERVER_PORT$path");
/*skript se přesměruje na vlastní diskusi*/

else:
$path = SubStr($SCRIPT_NAME, 0, StrRPos($SCRIPT_NAME, "/")).
"/login.htm";
Header("Location: http://$SERVER_NAME:$SERVER_PORT$path");
/*skript se přesměruje na logovací formulář*/

endif;

else:
$path = SubStr($SCRIPT_NAME, 0, StrRPos($SCRIPT_NAME, "/")).
"/login.htm";
Header("Location: http://$SERVER_NAME:$SERVER_PORT$path");
endif;

?>

Zpracování příchozích dat

Pokud poté přijdou data skriptu diskuse.php, musí je také ověřit a to následujícím způsobem:

<?
mysql_connect("localhost","root","heslo");
$db=MySQL_Select_DB("test");

$Login=base64_decode($Login);

@$query=MySQL_Query("Select * from Uzivatele where Prezdivka=`$Login`");

if($query):

$fetch=MySQL_Fetch_Array($query);
$password=$fetch["Heslo"];
$status=$fetch["Status"];
$pass=MD5($password);

if(($pass==$Heslo)and($password!="")):

Nejprve jsme tedy získali použitelnou podobu Loginu pro SQL dotaz a potom jsme srovnali nerozkódovatelná hesla a ověřili si, že heslo není nulové, poté již může následovat nastavení práv uživatelů v rámci skriptu podle proměnné status a uživatel nyní nemusí při příspěvcích vyplňovat svoje údaje:), což si ukážeme příště.

Za týden …

… se podíváme na zmiňované úpravy našeho hlavního skriptu a možnosti uživatelů.

Diskuze (2) Další článek: Nejmenší mobilní tiskárna k počítači

Témata článku: , , , , , , , , , , , , , , ,