Každý z nás to jednou zažil. Přijdete na stránky nějaké firmy, chcete se zeptat zástupců této firmy, ale nevíte, komu napsat. Navíc firma používá svůj vlastní komunikátor. Proto se často využívají tzv. status ikony, které vám jasně poví, který člen firmy odpoví ihned. Já vám dneska povím, jak si vytvořit tuto jednoduchou status ikonu.
Obvykle, když se podíváte na vlastnosti takovéto ikony, zjistíte, že je URL např.:
http://www.server.cz/images/stats.php?par=style1|1
Pro představu vám zde ukáži dva příklady z praxe:
Příklad 1 (chat Lide.cz – Python a CGI)Příklad 2 (ICQ)
Co jen to ten uživatel po nás chce?
Víme, že by uživatel rád věděl, jestli je na stránkách přítomen i někdo z členů firmy (vývojového týmu). Ale jak přesně určit, od kterého uživatele by chtěl vidět stav? Veškeré potřebné uživatelské údaje jsou skriptu předány pomocí metody GET. Pro názornost využijeme této adresy:
http://www.server.cz/images/stats.php?par=style1|1
Parametr par si pomocí funkce explode()
rozdělíme a pomocí funkce list()
přiřadíme do proměnných.
GET je metoda komunikace mezi klientem a serverem. Při metodě GET je dotaz předán pomocí URL. Použijeme-li metodu POST, bude dotaz předán v hlavičkách.
Více informací: originální dokumentace
<?php
//vytvoreni promennych styl a idecko
list($styl, $idecko)=explode("|",$_GET["par"]);
// $styl = je hodnota urcujici podobu ikony
// $idecko = identifikátor člena
?>
Databáze MySQL
Veškeré informace o členech máme uloženy v databázi. Když už víme, o kterého člena se bude jednat, můžeme z databáze zjistit, zda je zrovna připojený a kde se na stránkách nachází.
Vzorová tabulka
Představte si, že máme v databázi tabulku clenove, která má 4 sloupce. Sloupec id je identifikátor jednotlivých členů – každý člen má svůj jedinečný identifikátor.
TABULKA: clenove | |||
---|---|---|---|
id | jmeno | prijmeni | stav |
1 | jmeno1 | xxxxxx | online |
2 | jmeno2 | yyyyy | forum |
3 | jmeno3 | zzzzz | ofline |
4 | jmeno4 | vvvvv | chat |
5 | jmeno5 | uuuuu | online |
6 | jmeno6 | ttttt | chat |
7 | jmeno7 | wwwww | online |
Dolování v databázi
Díky tomu, že jsme si rozdělili dotaz do dvou proměnných, nyní můžeme z databáze vydolovat data, která se týkají pouze dotyčného člena.
<?php
//navazani spojeni se serverem
$kontakt=mysql_connect($server, $nick, $heslo);
if(!$kontakt) {
$image="status/$styl/chyba.gif";
//nacteni prislusne ikony
$im=imagecreatefromgif($image);
//odeslani hlavicky ohledne zobrazovaneho typu (mime-type)
header("Content-Type: image/gif");
//zobrazeni ikony
imagegif($im);
destroy($im);
mysql_close($kontakt);
exit;
}
//vyber databaze
$vybrano=mysql_select_db($databaze);
if(!$vybrano) {
$image="status/$styl/chyba.gif";
//nacteni prislusne ikony
$im=imagecreatefromgif($image);
//odeslani hlavicky ohledne zobrazovaneho typu (mime-type)
header("Content-Type: image/gif");
//zobrazeni ikony
imagegif($im);
destroy($im);
mysql_close($kontakt);
exit;
}
//ochrana pred injection
if(!is_numeric($idecko)){
$image="status/$styl/chyba.gif";
//nacteni prislusne ikony
$im=imagecreatefromgif($image);
//odeslani hlavicky ohledne zobrazovaneho typu (mime-type)
header("Content-Type: image/gif");
//zobrazeni ikony
imagegif($im);
destroy($im);
mysql_close($kontakt);
exit;
}
//kontrola spravnosti stylu
if($styl != "style1" && $styl != "style2"){
$image="status/style1/chyba.gif";
//nacteni prislusne ikony
$im=imagecreatefromgif($image);
//odeslani hlavicky ohledne zobrazovaneho typu (mime-type)
header("Content-Type: image/gif");
//zobrazeni ikony
imagegif($im);
destroy($im);
mysql_close($kontakt);
exit;
}
//dotaz na daneho clena
$info=mysql_query("SELECT stav FROM clenove WHERE id = '$idecko'");
$pocet=mysql_num_rows($info);
if($pocet == '0') {
$image="status/$styl/neexistuje.gif";
//nacteni prislusne ikony
$im=imagecreatefromgif($image);
//odeslani hlavicky ohledne zobrazovaneho typu (mime-type)
header("Content-Type: image/gif");
//zobrazeni ikony
imagegif($im);
destroy($im);
mysql_close($kontakt);
exit;
}
$informace=mysql_fetch_array($info);
mysql_close($kontakt);
?>
Vytvoření ikony
Pro vytvoření ikony budeme ještě na serveru potřebovat soubory online.gif, offline.gif, chat.gif, forum.gif rozmístěny následovně (vycházíme z umístění http://www.server.cz/images/
):
- status (složka)
- style1 (podsložka)
- online.gif
- offline.gif
- chat.gif
- forum.gif
- neexistuje.gif
- chyba.gif
- style2 (podsložka)
- online.gif
- offline.gif
- chat.gif
- forum.gif
- neexistuje.gif
- chyba.gif
<?php
$image="status/$styl/".$informace[0].".gif";
//nacteni prislusne ikony
$im=imagecreatefromgif($image);
//odeslani hlavicky ohledne zobrazovaneho typu (mime-type)
header("Content-Type: image/gif");
//zobrazeni ikony
imagegif($im);
destroy($im);
?>
Závěr
A to je zatím vše. Dneska jsme si ukázali, jak lehce vytvořit status ikonu pomocí PHP. Díky tomuto řešení (ikonka v externím souboru) je možno ikonku použít i na jinčích stránkách (blogu, osobní stránky, ...).
Poznámka autora:
V článku je schválně užit delší tvar $_GET["par"]. V případě serveru, kde budete mít povoleny register_globals stačí napsat jen $par a účinek bude stejný. Jestli vám vadí přípona .php, tak si ji změňte na .img a do souboru httpd.conf vložte řádek:application/x-httpd-php .img