Praktické programování v PHP, část první
18.02.2008Komentáře (6) Kategorie: Tvorba webu » PHP

V tomto seriále si vytvoříme scripty pro registraci a přihlášení uživatelů pomocí databáze MySQL, knihu návštěv a anketu. V prvním díle si vytvoříme registraci uživatelů.


Locahost web server

Pokud si vytvořené scripty budete chtít vyzkoušet na vlasním počítači, budete potřebovat localhost server. Dobré zkušenosti mám s freewarovým produktem Complex Web Server, který obsahuje hlavně Apache web server, MySQL databázi a PHP5 parser. Nainstalujte si jej na svůj počítač, spusťte Apache a databázi a otevřete internetový prohlížeč. Do adresního řádku zadejte localhost nebo 127.0.0.1 – otevře se Vám výpis souborů uložených na lokálním web serveru. Tyto soubory jsou uložené ve složce http_docs v adresáři nainstalovaného web serveru.

Poznámka: Localhost server může být přístupný pod Vaší IP adresou z jiných počítačů v internetu, pokud jste to při instalaci povolili.


Registrační formulář

Nejdříve bude nutné si vytvořit registrační forumlář, ve kterém uživatel vyplní přihlašovací jméno (login), heslo a třeba svůj e-mail. Jednoduchou úpravou si pak sami jistě dokážete přidat další položky. Pro samotný jednoduchý formulář nepotřebujete nic jiného, než obyčejné HTML, případně CSS pro vylepšéní vzhledu. Formulář si uložím jako formular.php

<!DOCTYPE HTML PUBLIC „-W3CDTD HTML 4.01 Transiti­onalEN“>
<html>

<head>
<meta http-equiv=„Content-Type“ content=„text/html; charset=UTF-8“>
<title>Můj web – Registrace</ti­tle>
</head>

<body>
<?php
if(isset($_GET[„o­k“])) { echo „Operace proběhla úspěšně“; }
if(isset($_GET[„e­rr“])) { echo „Někde se stala chyba“; }
?>
<form action=„regis­trace.php“ method=„post“>
<table>
<tr>
<td>Login:</td><td­><input type=„text“ name=„login“></td>
</tr>
<tr>
<td>Heslo:</td><td>­<input type=„password“ name=„pass1“></td>
</tr>
<tr>
<td>Heslo znova:</td><td>­<input type=„password“ name=„pass2“></td>
</tr>
<tr>
<td>E-mail:</td><td>­<input type=„text“ name=„mail“></td>
</tr>
<tr>
<td colspan=„2“><in­put type=„submit“ value=„Registro­vat“></td>
</tr>
</table>
</form>
</body>

</html>

Data z inputů se odešlou metodou POST registračnímu scriptu registrace.php, ve kterém budeme data zpracovávat. Data se uloží do proměnných s názvy podle atributů name u inputů.


Vytvoření databáze

Nyní bude potřeba vytvořit databázi, do které si budeme ukládat uživatelská jména, hesla a e-maily. Pro správu databáze doporučuji aplikaci <a href=„http:www.tutorialy.com/…cne-programy“>phpMyAdmin, který máte pravděpodobně zde, pokud jste si nainstalovali Complex Web Server.
Vytvořte si novou databázi – ja si ji pojmenuju tutorialy a v ní novou tabulku uzivatele. To lze udělat dvěma způsoby:

1.) Použitím SQL dotazu:

CREATE TABLE uzivatele (
id TINYINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
login VARCHAR( 40 ) NOT NULL ,
pass VARCHAR( 40 ) NOT NULL ,
mail VARCHAR( 50 ) NOT NULL
) ENGINE = innodb;

2.) Vyplněním formuláře – to je pro začátečníky nejlepší způsob. Aplikace phpMyAdmin vytvoří SQL dotaz sama. Po vytvoření databáze se Vám v phpMyAdmin otevřela stránka s polem „Vytvořit novou tabulku v databázi tutorialy“. Do ní napište název tabulky (uzivatele) a počet sloupců – my budeme potřebovat 4. Na následující stránce:

  • První sloupec id typ TINYINT Extra – auto_increment, primární (přepínač se symbolem klíče).
  • Druhý sloupec login typ VARCHAR délka 40
  • Třetí sloupec pass typ VARCHAR délka 40
  • Čtvrtý sloupec mail typ VARCHAR délka 50


Registrační script

Databázi a registrační formulář máme připravený, takže přistoupíme k programování registračního scriptu. Nejprve vytvoříme spojení s databází, potom ověříme, jestli se shodují oba zadané hesla, jedno z nich zašifrujeme a všechna tato data uložíme do databáze. Nejprve si ale vytvoříme script nastaveni.php, do kterého uložíme přihlašovací údaje k databázi, protože je budeme často používat.

nastaveni.php
<?php
$DB_HOST = „localhost“; databazovy server
$DB_USER = „root“; prihlasovaci jmeno k databazi
$DB_PASS = ""; heslo k databazi
$DB_NAME = „tutorialy“; nazev pouzivane databaze
?>
registrace.php
<?php
require_once „nastaveni.php“;
if(!(MySQL_Con­nect($DB_HOS­T,$DB_USER,$DB_PAS­S))) {
die(„Nepodařilo se připojit k databázi“);
}

if(!(MySQL_Se­lect_DB($DB_NA­ME))) {
die(„Databáze nebyla nalezena“);
}

// overeni, jestli uzivatel zadal vsechny udaje
if(isset($_POS­T[„login“]) && isset($_POST[„pas­s1“])
&& isset($_POST[„ma­il“]))
{
$login = $_POST[„login“];
$mail = $_POST[„mail“];
overeni shody obou hesel a zasifrovani
if(($_POST[„pas­s1“] == $_POST[„pass2“]) && $_POST[„pass2“] != "") {
$pass = sha1($_POST[„pas­s1“]);
} else {
header(„Locati­on:formular.php?e­rr“);
}
overeni, jestli uzivatel nebo mail uz v databazi neni
$zaznamy = MySQL_Num_Row­s(MySQL_Query(„SE­LECT id FROM uzivatele
WHERE login = ‚
$login‘ OR mail = ‚$mail‘“));
if($zaznamy > „0“) {
header(„Locati­on:formular.php?e­rr“);
die();
}
//ulozeni uzivatele do databaze
MySQL_Query(„IN­SERT INTO uzivatele (login,pass,mail)
VALUES (‚
$login‘,‚$pas­s‘,‚$mail‘)“);

header(„Locati­on:formular.php?ok“);
} else {
header(„Locati­on:formular.php?e­rr“);
}
?>

To je z dnešního dílu vše, přihlášení uživatelů a návštěvní knihu si ukážeme v příštím díle.



Hodnocení: 7.2/10 (26 hlasováno)

Komentáře (6)
od: dwine 14-03-2008 17:58:15
No jako abych pravdu řekl, je to hodně stručně popsané. Pochopil jsem tak půlku ..

od: chorche 21-03-2008 10:53:57
přiště by to chtělo trochu podrobněji. Někdo by to nemusel pobrat ;-)

od: wayet 27-03-2008 18:21:33
Jako princip je to dobrý, jen doporučuju před jakýmkoliv styku proměnných z formulářů s databází ty proměnný prohnat nějakou funkcí na odstranění potenciálně nebezepčných znaků, například htmlspecialchars(); nebo htmlentities();
takže něco jako
$mail = htmlspecialchars($_POST["mail"]);
a taky není v některých přídapech na škodu odstranit mezery ze začátku a konce řetezce přes trim();
takže jako výsledek bych viděl

$mail = htmlspecialchars(trim($_POST["mail"]));
:-D

od: Mato 27-03-2008 18:56:16
Od PHP 5 escapuje ihned proměnné $_GET a $_POST ne ?

od: wayet 28-03-2008 18:27:52
tuším že v php.ini je to defaultně nastavený na automatický escapování, ale nikdy nevíš k jakou verzi konfigurace si stáhneš, proto si myslím že je to lepší použít, a nemusíš se o to pak starat v případě že přecházíš na jiný server, kde to může být vypnutý:-D

od: Mato 28-03-2008 22:46:52
Taky pravda :-)

  Neregistrovaní uživatelé nemohou přidávat komentáře k článkům.