On-Line Chat v PHP 1.
Mnoho portálů, informačních a zábavních serverů poskytuje svým návštěvníkům službu CHAT. Popisovat Vám význam této služby je zbytečné, protože je určitě všem notoricky známá. Pokud ale chcete takovou službu provozovat i na svém serveru a nevíte, jak něco podobného vytvořit, jsou následující řádky určeny právě vám.
Mnoho portálů, informačních a zábavních serverů poskytuje svým návštěvníkům službu CHAT. Popisovat Vám význam této služby je zbytečné, protože je určitě všem notoricky známá. Pokud ale chcete takovou službu provozovat i na svém serveru a nevíte, jak něco podobného vytvořit, jsou následující řádky určeny právě vám.
Provedu Vás všemi kroky, jak vytvořit vlastní CHAT za použití PHP a MySQL. Náš výsledný CHAT bude umět registraci nicků, přihlášení registrovaných uživatelů, posílat zamknuté zprávy (konkrétnímu příjemci). CHAT nebude umět vytvářet nové místnosti, a nebudou se moci přihlásit neregistrovaní uživatelé, ale myslím si, že tuto úpravu zvládnou i středně pokročilí programátoři.
Nejdříve bude nutné promyslet si strukturu tabulek v databázi. Budeme potřebovat tabulku, která bude obsahovat jména registrovaných uživatelů, jejich přístupová hesla a dodatečné údaje (ty pro jednoduchost vynecháme), dále pak budeme v databázi potřebovat tabulku, která bude obsahovat právě přihlášené uživatele a čas jejich posledního příspěvku. Třetí a poslední tabulkou bude tabulka obsahující samotné texty zpráv…
První tabulku nazveme třeba users a bude obsahovat celkem tři sloupce:
- id – id bude primárním klíčem tabulky a bude se automaticky zvyšovat (id int NOT NULL AUTO_INCREMENT PRIMARY KEY).
- nick – nick bude obsahovat přezdívku uživatele. Velikost přezdívky omezíme třeba na 20 znaků (nick varchar(20)).
- heslo – sloupeček heslo bude obsahovat heslo uživatele a bude omezeno na deset znaků (heslo varchar(10)).
Takže to byl popis tabulky users, nyní přejdeme k tabulce druhé.
Druhou tabulku si nazveme active a bude obsahovat 4 položky.
- id pro tuto položku platí to samé, co pro první tabulku.
- nick – obsahuje přezdívku uživatele (nick varchar(20)).
- heslo – obsahuje heslo uživatele (heslo varchar(10)).
- cas – tato položka bude obsahovat čas poslední odezvy (naposled napsané zprávy) uživatele. Položka bude číselná (cas int).
Možná si teď říkáte, proč se mají položky nick a heslo duplikovat, když by bylo jednodušší propojit tabulky users a active. Vede mne k tomu jediná věc – OPTIMALIZACE VÝKONU – chat je docela náročná aplikace na výkon serveru, zvláště pokud provozujete více místností s několika desítkami aktivních uživatelů. Proto si myslím že je výhodnější použít dotaz, který pracuje pouze s jednou tabulkou, než v dotazu skládat více tabulek. Stále je ekonomičtější koupit větší disk, než výkonnější procesor.
Třetí tabulku nazveme chatroom a bude obsahovat celkem 7 položek a některé se opět budou duplikovat.
- id – o této položce platí to, co pro obě předchozí tabulky.
- nickid – obsahuje id z tabulky active.
- nick – jako předchozí tabulky.
- proid – tato položka obsahuje id uživatele (z tabulky active, kterému je zpráva určena. Pokud bude 0, je zpráva určena všem (proid int).
- pro – obsahuje přezdívku uživatele, kterému je zpráva určena (pro varchar(20)).
- cas – položka bude obsahovat čas, ve kterém byla zpráva přijata (cas int).
- zprava – tato položka bude nést samotný obsah zprávy. Její velikost omezíme na 255 znaků (zprava varchar(255)).
Tak teď máme připraveny tabulky v databázi a můžeme začít s psaním samotné aplikace.
Samotná aplikace se bude, pro jednoduchost, skládat celkem ze 7 souborů. Každý soubor bude plnit jednu funkci. Soubory si nazveme:
- index.php – úvodní stránka s přihlašovacím formulářem a odkazem na stránku s registrací.
- registrace.php – tato stránka se bude starat o registraci uživatelů.
- chat.php – tato stránka rozdělí okno prohlížeče na tři rámy a načte do něj patřičné stránky chatu.
- chatactive.php – tento skript bude zobrazovat aktuální uživatele a čas jejich poslední odezvy.
- chatbox.php – tento skript zobrazí formulář pro vložení samotné zprávy a bude ji vyhodnocovat.
- chatroom.php – tento skript bude zobrazovat samotné okno chatu se zprávami.
- obecne.php – tento skript se bude vkládat do všech výše zmíněných souborů a bude obsahovat definici základních funkcí, které se budou využívat na všech stránkách našeho chatu.
Nejprve začneme s popisem souboru obecne.php, který bude obsahovat přístupové údaje k databázi, bude obstarávat připojení skriptu na databázi, dále bude obsahovat funkci kontrola(), která bude ověřovat uživatelské jméno a heslo. Výpis skriptu je následovný:
<?
$se = "localhost"; // db server
$db = "chat"; // databáze s chatem
$us = "user_name"; // uživatelské jméno
$pa = "password"; // heslo k databázi
// připojíme se k databázi
@$s = mysql_connect($se,$us,$pa);
@$v = mysql_select_db($db);
// pokud dojde k chybě při spojení s databází, zastavíme chod skriptu
if (!$s || !$v):
head();
echo "Došlo k chybě.";
foot();
exit;
endif;
// pokud je heslo správné, pokračujeme, jinak se loučíme...
function kontrola()
{
global $id,$pass;
@$v = mysql_query("SELECT nick,heslo FROM active WHERE id ='$id'");
@$p = mysql_num_rows($v);
if ($p == 1):
@$z = mysql_fetch_row($v);
if (MD5($z[1]) != $pass):
odhl();
endif;
else:
odhl();
endif;
return $z;
}
function head() // hlavička stránky
{
Header("Pragma: No-cache");
Header("Cache-Control: no-cache");
Header("Expires: ".GMDate("D, d M Y H:i:s")." GMT");
echo "<HTML><HEAD><TITLE>CHAT</TITLE></HEAD>\n";
echo "<BODY TEXT=\"#000000\" BGCOLOR=\"#FFFFFF\">\n";
}
function foot() // patička stránky
{
echo "</BODY></HTML>\n";
}
// rozloučíme se s návštěvníkem
function neopravneny()
{
head();
echo "<P>Neoprávněný přístup.</P>";
foot();
exit;
}
?>
Takže teď jsme si ukázali skript se základními funkcemi, které budeme v našem chatu používat a nezbývá nic jiného, než pokračovat dále…