Registrace uživatelů - čast. 1 ( práce s PHP a MySQL)
Author: Dmitry Burobin
Zdravím všechny, již delší dobu jsem nic nepsal, neměl jsem bohužel čas, ale teď jak jsem sliboval napišu řadu článků o spojení PHP s MySQL. Rozhodl jsem se, že začnu registraci uživatelů. V prvním článku Vám spíše ukážu hlavní myšlenku registraci, na tom určitě vyzkoušite to spojení dvou jazyků programování, dále ji budeme zlepšovat, přidávat různe prvky.
2) Regitrace uživatelů - čast. 2 ( práce s PHP a MySQL).
3) Regitrace uživatelů - čast. 3 ( captcha, editace osobních údajů, osobní stránky uživatelů, soukromé zprávy ).
4) Regitrace uživatelů - čast. 4 ( automatické přihlášení, obnovení hesla, aktivace účtu přes e-mail ).
Tvorba tabulky
Začneme tím, že si vytvořite tabulku users ve Vaši databázi v phpmyadmin. Vložte do SQL příkazového okna:
CREATE TABLE `users` ( `id` INT( 5 ) NOT NULL AUTO_INCREMENT, `name` VARCHAR( 255 ) NOT NULL, `login` VARCHAR ( 255 ) NOT NULL, `pass` VARCHAR ( 255 ) NOT NULL, PRIMARY KEY (`id`) )ENGINE=MYISAM CHARACTER SET utf8 COLLATE utf8_unicode_ci

Tabulka bude obsahovat jméno, login a heslo nového uživatele.
Programování aplikace
Jako první věc si vytvořime soubor db.php pro spojení s databázi.
<?php
= 'localhost';
$DBSERVER
$DBUSER = 'root';
$DBPASS = '******';
$DB = 'users';
$link = mysql_connect($DBSERVER,$DBUSER,$DBPASS) or die ('I cannot connect');
mysql_select_db($DB,$link) or die ('I cannot select DB');
mysql_query("SET NAMES utf8");
?>
Dále vytvořte soubor registration.php, ve kterém se bude provádět přidávaní nového uživatele.
<?php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Registrace</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" >
<style>
.back{
font-size:10pt;
margin-top:20px;
}
</style>
</head>
<body>
<h1>Registrace nového uživatele</h1>
<form action="pridavani.php" method="POST">
<!-- pridavani.php je skript pro přidávaní nových uživatelů do databáze, tzn. po klíknutí na tlačítko Ok se data pošlou do tohoto souboru metodou $_POST -->
<div><label for="name">Jméno:</label></div>
<div><input type="text" name="name"></div>
<!-- Do textového pole se jménem name ( name="name" ) nový uživatel zadá svoje jméno -->
<div><label for="login">login:</label></div>
<div><input type="text" name="login"></div>
<!-- Do textového pole se jménem login ( name="login" ) nový uživatel zadá svůj login -->
<div><label for="heslo">Heslo:</label></div>
<div><input type="password" name="heslo"></div>
<!-- Do pole se jménem heslo ( name="heslo" ) nový uživatel zadá svoje heslo -->
<div><input type="submit" name="go" value="Ok"></div>
<!-- tlačítko ( type="submit" ) odesíla data do souboru pridavani.php -->
</form>
<div class="back"><a href="index.php">přihlásit se</a></div>
</body>
</html>
?>
Teď vytvořime soubor pridavani.php, který bude zpracovávát data a ukládát je do databáze:
Popis použitých funkci najdete u mě na stránkach zde.
htmlspecialchars,
trim,
mysql_query,
mysql_error,
mysql_errno,
mysql_num_rows.
<?php
if(isset($_POST['go'])){ //jestli tlačítko bylo zmačknuté tak jdi dál, jinak budete přesměrování na stránku pro registraci nového uživatele
if(isset($_POST['name']))
{
$name = stripslashes(htmlspecialchars(trim($_POST['name'])));
if($name == '')
{
unset($name);
}
}
//uložime do proměnné $name jméno, které uživatel zadál ve formuláři,
//a hned ji ošetříme několika funkcemi, aby ani tagy ani skripty nefungovali a odstraníme mezery ( trim )
//Jestli je proměnná prázdna tak ji odstraníme.
if(isset($_POST['login']))
{
$login = stripslashes(htmlspecialchars(trim($_POST['login'])));
if($login == '')
{
unset($login);
}
}
//uložime do proměnné $login login, který uživatel zadál ve formuláři,
//a hned ji ošetříme několika funkcemi, aby ani tagy ani skripty nefungovali a odstraníme mezery ( trim )
//Jestli je proměnná prázdna tak ji odstraníme.
if(isset($_POST['heslo']))
{
$heslo = stripslashes(htmlspecialchars(trim($_POST['heslo'])));
if($heslo == '')
{
unset($heslo);
}
}
//uložime do proměnné $heslo heslo, které uživatel zadál ve formuláři,
//a hned ji ošetříme několika funkcemi, aby ani tagy ani skripty nefungovali a odstraníme mezery ( trim )
//Jestli je proměnná prázdna tak ji odstraníme.
//V případě, že jakákoli proměnná je prázdna, zastavíme skript a vyvedeme hlášení
if(empty($name) or empty($login) or empty($heslo))
{
exit("Vyplňte všechna pole");
}
//Vložíme soubor s připojením k databázi. ( musí se nacházet ve stejné složce )
require_once 'db.php';
//Ověřujeme, zda jíž není uživatel se stejným loginem
$q1 = mysql_query("SELECT * FROM `users` WHERE `login`='".$login."'");
if(!$q1) { echo mysql_error() . ' - ' . mysql_errno(); }
else {
//Jestli existuje tak vyvedeme hlášení
if(mysql_num_rows($q1)==1){
exit("Uživatelské jméno je obsazené, vyberte si jiné");
} else {
//V případě, že není tak vložíme data o novém uživateli do databáze
$q2 = mysql_query("INSERT INTO `users`(`name`,`login`,`pass`) VALUES('".$name."','".$login."','".$heslo."')");
if(!$q2) { echo mysql_error() . ' - ' . mysql_errno(); }
else {
echo "Děkuji za registraci, teď se můžete <a href="index.php">přihlásit</a>.";
}
}
}
} else { header("Location: ".$_SERVER['SERVER_ROOT']."registration.php"); }
?>
Nyní se člověk může registrovat. Další věc, kterou uděláme bude soubor index.php pro přihlášení uživatelů:
<?php
();
session_start
//Celý postup funguje na sessions. Právě v session se ukládají data uživatele, zatímco se nacházi na stránkach. Je důležite spustit sessions na začátku stránky!
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Přihlašení uživatele</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<style>
.back{
font-size:10pt;
margin-top:20px;
}
</style>
</head>
<body>
<?php
//ověřujeme zda proměnné jméno a id jsou prázde nebo ne
if(!empty($_SESSION['name']) AND !empty($_SESSION['id']))
{
//V případě, že nejsou tak zobrazime jméno uživatele a odkaz, který je schovaný, jesli uživatel není přihlášený
echo "<h1>Ahoj ".$_SESSION['name']."</h1>
<p>Tyto <a href="http://www.complux.eu/cz/">stránky</a> můžou navštívit jen registrované uživatele</p>";
} else {
//V případě, že tyto proměnné jsou prázdne, zobrazime přihlašovací formulář a odkaz s prázdným atributem href
echo "
<h1>Přihlaste se</h1>
<form action="overeni.php" method="POST">
<!-- overeni.php je skript pro ověření zadaných dat, tzn. po klíknutí na tlačítko Ok se data pošlou do tohoto souboru metodou POST -->
<div><label for="login">login:</label></div>
<div><input type="text" name="login"></div>
<!-- Do textového pole se jménem login ( name="login" ) uživatel zadá svůj login -->
<div><label for="heslo">Heslo:</label></div>
<div><input type="password" name="heslo"></div>
<!-- Do pole se jménem heslo ( name="heslo" ) uživatel zadá svoje heslo -->
<div><input type="submit" name="go" value="Ok"></div>
<!-- tlačítko ( type="submit" ) odesíla data do souboru overeni.php -->
</form>
";
echo "Ahoj návtěvníku. Tyto <a href="#">stránky</a> můžou navštívit jen registrované uživatele";
echo '<div class="back"><a href="registration.php">registrace</a></div>';
}
?>
</body>
</html>
Poslední soubor, který musime vytvořit, je soubor pro ověření uživatele, zda je v databázi. Soubor overeni.php:
Použil jsem funkci, kterou možná ještě neznáte mysql_fetch_assoc
<?php
();
session_start
//Celý postup funguje na sessions. Právě v session se ukládají data uživatele, zatímco se nacházi na stránkach. Je důležite spustit sessions na začátku stránky!
if(isset($_POST['go'])){
//jestli tlačítko bylo zmačknuté tak jdi dál, jinak budete přesměrování na stránku pro registraci nového uživatele
if(isset($_POST['login']))
{
$login = stripslashes(htmlspecialchars(trim($_POST['login'])));
if($login == '')
{
unset($login);
}
}
//uložime do proměnné $login login, který uživatel zadál ve formuláři,
//a hned ji ošetříme několika funkcemi, aby ani tagy ani skripty nefungovali a odstraníme mezery ( trim )
//Jestli je proměnná prázdna tak ji odstraníme.
if(isset($_POST['heslo']))
{
$heslo = stripslashes(htmlspecialchars(trim($_POST['heslo'])));
if($heslo == '')
{
unset($heslo);
}
}
//uložime do proměnné $heslo heslo, které uživatel zadál ve formuláři,
//a hned ji ošetříme několika funkcemi, aby ani tagy ani skripty nefungovali a odstraníme mezery ( trim )
//Jestli je proměnná prázdna tak ji odstraníme.
//V případě, že jakákoli proměnná je prázdna, zastavíme skript a zobrazime hlášení
if(empty($login) or empty($heslo))
{
exit("Vyplňte všechna pole");
}
//Vložíme soubor s připojením k databázi. ( musí se nacházet ve stejné složce )
require_once 'db.php';
//Ověřime, zda máme záznam v tabulce s zadaným loginem
$q1 = mysql_query("SELECT `id` FROM `users` WHERE `login`='".$login."'");
if(!$q1) { echo mysql_error() . ' - ' . mysql_errno(); }
else {
if(mysql_num_rows($q1)==1){
//V případě, že máme, vložime id tohoto uživatele do pole
$r1 = mysql_fetch_assoc($q1);
//A vybereme data z tabulky s tímto id a ověřime, zda je správně zadané heslo
$q2 = mysql_query("SELECT * FROM `users` WHERE `id`='".$r1['id']."' AND `pass`='".$heslo."'");
if(!$q2) { echo mysql_error() . ' - ' . mysql_errno(); }
else {
//Jestli je všechno správně, tak do sessions uložime identifikator uživatele a jméno, tyto proměnné budou použité v souboru index.php
$r2 = mysql_fetch_assoc($q2);
$_SESSION['id'] = $r2['id'];
$_SESSION['name'] = $r2['name'];
//Budete přesměrování na hlavní stránku
header("Location: index.php");
}
} else {
//Jinak zobrazime hlášení
exit("Uživatel s tímto uživatelským jménem neexistuje.");
}
}
} else { header("Location: ".$_SERVER['SERVER_ROOT']."index.php"); }
?>
Poslední věc, kterou uděláme je odkaz pro odhlášení uživatele. Přidáme odkaz do souboru index.php:
a na začátek stejného souboru, hned po session_start:
<?php
.
.
echo "<h1>Ahoj ".$_SESSION['name']."</h1>
<p>Tyto <a href="http://www.complux.eu/cz/">stránky</a> můžou navštívit jen registrované uživatele</p>
<p><a href="".$_SERVER['PHP_SELF']."?action=odhlasit_se">Odhlásit se</a></p>";
.
.
?>
vidíme, že do URL prohlížeče posílame action=odhlasit_se, pak jestli klíkneme na tento odkaz, pomoci GET zjístime, že jestli hodnota atributu action se rovná odhlasit_se odstraníme proměnné sessions.
<?php
();
session_start
//Celý postup funguje na sessions. Právě v session se ukládají data uživatele, zatímco se nacházi na stránkach. Je důležite spustit sessions na začátku stránky!
if(isset($_GET['action']) AND $_GET['action'] == 'odhlasit_se'){
$_SESSION['name']='';
$_SESSION['id']='';
unset($_SESSION['name']);
unset($_SESSION['id']);
}
?>
Takže máme to. Tento článek je možná trochu nudný, ale je v něm hlavní myšlenka realizace registraci uživatelů a měli byste trochu procvíčit spolupráci PHP a MySQL. Dál tyto skripty budeme zlepšovat, přidáme šifrování hesla, captchu, avatar, generování nového hesla a td.