On-Line Chat v PHP III. - 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:



PHP

On-Line Chat v PHP III.

11. ledna 2001, 00.00 | Další díl seriálu kde společně vytváříme netriviální chat v PHP.

Z minulých dílů máme hotové skripty pro registraci a přihlášení uživatelů. Dnes se již začneme zabývat samotnými skripty ovládajícími chat. Podrobně si probereme další dva soubory: chat.php a chatactive.php.

chat.php

Soubor chat.php je spíše jen HTML stránka, ale provádíme na ní ověřování id a hesla, které jsou při přesměrování ze skriptu index.php předávány v QUERY STRINGu. Pokud id a heslo neodpovídají záznamům v tabulce active, zobrazí se hlášení o neoprávněném přístupu. V opačném případě tento soubor rozdělí okno prohlížeče na tři rámy. Do každého z těchto rámů budeme načítat jednotlivé části chatu

  • Seznam přihlášených uživatelů a čas od napsání poslední zprávy
  • okno se samotnou místností (zprávy)
  • formulář pro posílání zpráv
Všem skriptům budeme vždy předávat id a heslo v QUERY STRINGu. Nyní si ukážeme zdrojový kód tohoto skriptu:

<?
require "./obecne.php";

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

$string = "?id=".$id."&pass=".$pass;

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>

<FRAMESET border=0 frameBorder=0 frameSpacing=0 rows=12%,90%>
   <FRAME src="chatbox.php<?echo $string?>" name=box>
      <FRAMESET border=0 frameBorder=0 frameSpacing=0 cols=20%,80%>
         <FRAME src="chatactive.php<?echo $string?>" name=active>
         <FRAME src="chatroom.php<?echo $string?>" name=room>
      </FRAMESET>
</FRAMESET>

<NOFRAMES>
<H3 ALIGN=CENTER>Pro chat potřebujete prohlížeč s podporou rámů !!!</H3>
</NOFRAMES>

</HTML>

Takže okno prohlížeče již máme rozděleno na tři části a je potřeba do každého z nich načíst jednotlivé stránky. My začneme s pro uživatele nejméně funkční částí a tou je chatactive.php. Tento skript bude při svém zavolání prověřovat heslo, pokud bude neplatné, slušně se s návštěvníkem rozloučíme, jinak budeme dále pokračovat v činnosti.

  1. Nejdříve si z tabulky active vybereme ty uživatele, kteří už nějakou dobu nehovořili (v našem případě je to 10 minut). Pokud takovýto uživatel (uživatelé) existují, budou skriptem z chatu odhlášeni a do tabulky chatroom se vepíše zpráva o odchodu uživatele. Také se z tabulky active vymaže záznam o uživateli, který byl odhlášen.
  2. Dále si necháme z tabulky active vybrat všechny záznamy. Výsledek necháme setřídit podle času sestupně (ten, kdo do chatu přispěl jako poslední, bude nahoře), pokud budete chtít, můžete tento výsledek setřídit třeba podle abecedy... Dále z tohoto výsledku zjistíme přesný čas, který jednotlivý uživatel nehovořil (od aktuálního času odečteme hodnotu sloupce cas) a nakonec zobrazíme přezdívku a čas od posledního příspěvku.
chatactive.php

Zde je výpis skriptu chatactive.php

<?
require "./obecne.php";

$z = kontrola();

$cas = Time(); // v promenne cas je aktuální unixový čas
$timeout = $cas - 600; // čas snížený o deset minut

// vybereme uživatele, kteří více než 10 minut nepromluvili
@$v = mysql_query("SELECT id,nick FROM active WHERE cas < '$timeout'");
@$p = mysql_num_rows($v);
if ($p > 0):
   while ($z = mysql_fetch_row($v))
   {
      // všechny tyto uživatele odhlásíme
      $rob = "<B>".$z[1]."</B> odchází z chatu.";
      @$x = mysql_query("INSERT INTO chatroom
	         VALUES ('','0','CHATROBOT','0','0','$cas','$rob')");
      @$x = mysql_query("DELETE FROM active WHERE id = '$z[0]'");
   }
endif;
?>
<HTML>
<HEAD><TITLE>Chat</TITLE>
<META HTTP-EQUIV="refresh" CONTENT="30; URL=">
</HEAD>

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

<?
// vybereme všechny záznamy v tabulce setříděné sestupně
// podle sloupečku cas. Pokud chcete seznam uživatelů
// tříděných podle abecedy, použijte místo ORDER BY cas DESC
// ORDER BY nick
@$v = mysql_query("SELECT nick,cas FROM active ORDER BY cas DESC");
@$p = mysql_num_rows($v);

echo "<TABLE BORDER=0 ALIGN=CENTER WIDTH=100%>";
echo "<TR><TD ALIGN=CENTER><B>Přítomní:</B></TD></TR>\n";

if ($p > 0):
   // pro každý záznam zpracujeme čas od napsání poslední zprávy
   // a zobrazíme údaje
   while ($z = mysql_fetch_row($v))
   {
      $nepsal = $cas - $z[1]; // čas od posledního příspěvku
      $delsec = $nepsal % 60; // získáme počet zbývajících sekund
      $delmin = ($nepsal - $delsec) / 60 ; // získáme počet minut
      // pokud je počet sekund rovný 0, zobrazíme nuly dvě
      if ($delsec == 0)
         $delsec = "00";
      // pokud je počet sekund 1 - 9, zobrazíme před výsledkem nulu
      if (StrLen($delsec) == 1)
         $delsec = "0".$delsec;
      // zobrazíme nick a čas od posledního příspěvku
      echo "<TR><TD ALIGN=LEFT><B>$z[0]</B> $delmin:$delsec</TD></TR>\n";
   }
else:
   // pokud náhodou nenajdeme žádný záznam, zobrazíme hlášení
   echo "<TR><TD ALIGN=CENTER><B>Nikdo tu nekecá :-((</B></TD></TR>\n";
endif;

echo "</TABLE>\n";
?>
</BODY></HTML>

Toto byl skript zobrazující seznam aktivních uživatelů s časy od jejich posledních příspěvků. Příště si probereme zbývající dva skripty, které se starají o zobrazení samotného obsahu chatu a skript zobrazující a vyhodnocující formulář pro přispívání do chatu.

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

Tématické zařazení:

 » Rubriky  » PHP  

 » Rubriky  » Web  

Poslat článek

Nyní máte možnost poslat odkaz článku svým přátelům:

Váš e-mail:

(Není povinný)

E-mail adresáta:

Odkaz článku:

Vzkaz:

Kontrola:

Do spodního pole opište z obrázku 5 znaků:

Kód pro ověření

 

 

 

 

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

 

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

Uživatelské jméno:

Heslo: