Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
PHP
On-Line Chat v PHP
7. prosince 2000, 00.00 | V tomto seriálu Vám popíši, jak funguje on-line chat v PHP a uvedu zde i jednoduchý příklad funkční aplikace.
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...
Obsah seriálu (více o seriálu):
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007