On-Line Chat v PHP IV. - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

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:

Soutěž

Sponzorem soutěže je:

IDIF

 

Kde se koná výstava fotografií Luďka Vojtěchovského?

V dnešní soutěži hrajeme o:



PHP

On-Line Chat v PHP IV.

17. ledna 2001, 00.00 | Poslední část povídání o on-line chatu. Dnes práci na tomto projektu dokončíme.

V posledním díle seriálu se podrobněji podíváme na zbývající dva php skripty a těmi jsou: chatbox.php a chatroom.php. Soubor chatbox.php se bude starat o zobrazení a vyhodnocení formuláře, do nějž bude uživatel psát své příspěvky. Druhý soubor již bude zobrazovat samotné okno chatu s příspěvky patřící aktuálnímu uživateli.

chatbox.php
  • Nejprve skript ověří platnost hesla a id uživatele funkcí kontrola().
  • Pokud skriptu přijdou z formuláře odeslaná data, vyhodnotí je. Pokud je zpráva určena konkrétnímu uživateli (je pod zámkem), skript nejdříve zjistí, zda je tento uživatel ještě aktivní. Pokud ano, bude se do tabulky chatroom vkládat i nick příjemce. Pokud takový uživatel nebude nalezen, bude zpráva určena všem chatujícím. Nakonec se do tabulky active k přispívajícímu uživateli uloží aktuální čas.
  • Po tom co skript vyhodnotí případná příchozí data, zobrazí HTML stránku obsahující formulář pro odesílání příspěvků.

Nyní následuje výpis zdrojového kódu skriptu chatbox.php:

<?
require "./obecne.php";

$z = kontrola(); // kontrola hesla
$cas = Time();
$limit = $cas - 600;

if ($send && $kec !=""): // pokud byly odesány data
   if ($komu > 0): // pokud je definován příjemce
      @$v = mysql_query("SELECT nick FROM active WHERE id = '$komu'");
      @$x = mysql_fetch_row($v);
      $komunick = $x[0];
   else: // pokud není určen příjemce 
      $komu = 0;
      $komunick = "";
   endif;
   // odstraníme z příspěvku HTML tagy
   $kec = HTMLSpecialChars($kec);
   // vložíme příspěvek do databáze
   @$v = mysql_query("INSERT INTO chatroom
                      VALUES ('','$id','$z[0]','$komu',
                              '$komunick','$cas','$kec')");
   // aktualizujeme čas poslední odezvy uživatele
   @$v = mysql_query("UPDATE active SET cas = '$cas' WHERE id = '$id'");
endif;

// začátek výstupu skriptu

Header("Pragma: No-cache");
Header("Cache-Control: no-cache");
Header("Expires: ".GMDate("D, d M Y H:i:s")." GMT");
?>

<HTML>
<HEAD><TITLE>CHAT</TITLE>
</HEAD>

<BODY BGCOLOR="#FFFFFF" TEXT="#0000000">

<FORM ACTION="chatbox.php" METHOD="POST">
   <INPUT TYPE=HIDDEN NAME="id" VALUE="<?echo $id?>">
   <INPUT TYPE=HIDDEN NAME="pass" VALUE="<?echo $pass?>">
   <INPUT TYPE=HIDDEN NAME="send" VALUE="true">
   <INPUT TYPE=TEXT NAME="kec" MAXLENGTH=255 SIZE=50>
   <SELECT NAME="komu">
   <OPTION VALUE="0">Všem</OPTION>
   <?
   // zobrazíme v SELECTu všechny aktivní uživatele

   @$v = mysql_query("SELECT id,nick FROM active WHERE cas > '$limit'");
   while ($z = mysql_fetch_row($v))
   {
      echo "<OPTION VALUE=\"$z[0]\">$z[1]</OPTION>";
   }
   ?>
   </SELECT>
   <INPUT TYPE=SUBMIT VALUE="ODESLAT">
</FORM>

</BODY></HTML>

chatroom.php

A na závěr si popíšeme funkčnost skriptu chatroom.php, který se stará o zobrazení samotného okna s příspěvky uživatelů - tudíž tím nejpodstatnějším. Skript plní nejdůležitější roli, ale je ve skutečnosti nejjednoduchším z dosud uvedeným.

  • Nejprve se ověří heslo a id uživatele, tak jak tobu bylo v předchozích skriptech.
  • Poté skript vybere z databáze maximálně dvacet posledních zpráv, které jsou:
    1. určeny všem uživatelům
    2. určeny pouze uživateli, který o skript požádal
    3. uživatel žádající o skript je autorem zamčené zprávy
    a pokud takové najde, zobrazí je na výstupní HTML stránce.

Výpis zdrojového kódu souboru chatroom.php:

<?
require "./obecne.php";

$z = kontrola(); // kontrola hesla a id

// výstup HTML stránky

Header("Pragma: No-cache");
Header("Cache-Control: no-cache");
Header("Expires: ".GMDate("D, d M Y H:i:s")." GMT");
?>

<HTML>
<HEAD><TITLE>ChatRoom</TITLE>
<META HTTP-EQUIV="refresh" CONTENT="15; URL=">
</HEAD>

<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<?
// z databáze vybereme posledních dvacet zpráv,
// tyto zprávy jsou buď veřejné, zamčené a jsou
// pro uživatele, který o skript požádal, nebo
// jsou přímo jeho příspěvkem

@$v = mysql_query("SELECT nick,zprava,pro,proid,nickid
                   FROM chatroom WHERE nickid = '$id'
                   OR proid = '0' OR proid = '$id'
                   ORDER BY cas DESC LIMIT 0,20");
@$p = mysql_num_rows($v);

// pokud nějaké takovéto zprávy existují, zobrazíme je

if ($p > 0):
   echo "<TABLE BORDER=0 ALIGN=CENTER WIDTH=100%>";
   while ($z = mysql_fetch_row($v))
   {
      if ($z[3] > 0 && $z[4] == $id)
         echo "<TR><TD ALIGN=LEFT><B>Od tebe pro <I>$z[2]:</I></B> 
         $z[1]</TD></TR>\n";
      elseif ($z[3] > 0 && $z[4] != $id)
         echo "<TR><TD ALIGN=LEFT><B>Pro tebe od <I>
        $z[0]:</I></B> $z[1]</TD></TR>\n";
      else
         echo "<TR><TD ALIGN=LEFT><B>$z[0]:</B> $z[1]</TD></TR>\n";
   }
   echo "</TABLE>\n";
endif;

foot();
?>

Závěrem článku upozorňuji na fakt, že článek není příliš vhodný pro uplné začátečníky v jazyce PHP. Článek vyžaduje alespoň jeho základní znalosti, stejně jako základní znalosti jazyka SQL potažmo znalostí MySQL databáze. Článek měl sloužit jako návod jak vytvořit vlastní náročnější webové aplikace, popsat Vám jak vlastně chat funguje, neměl sloužit jako "stavebnice" konkrétního chatu a to už jen pro to, že je opravdu hodně prostý. Mírnou modifikací zde uváděných skriptů však můžete docílit opravdu kvalitního chatu. Je však třeba přidat podporu neregistrovaných nicků, možnost používat více místností, možnost definice vlastností jednotlivých roomů atd. Vše závisí jen na Vaši fantazii a schopnostech.

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » PHP  

 » Rubriky  » Web  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: