pornjk, pornsam, xpornplease, joyporn, pornpk, foxporn, porncuze, porn110, porn120, oiporn, pornthx, blueporn, roxporn, silverporn, porn700, porn10, porn40, porn800, porn900

On-Line Chat v PHP 3.

Článek je 3. část seriálu On-line 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.

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.

Navigace v seriálu← On-Line Chat v PHP 2.On-Line Chat v PHP 4. →