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

20. prosince 2000, 00.00 | Pokračování seriálu o tvorbě vlastního chatu v PHP. Podmínkou jsou registrovaní uživatelé. Jak na to vám poradí tento článek.

Takže tabulky v databázi již máme od minule vytvořené, stejně jako máme hotový skript obecne.php. Jelikož náš chat umí pracovat pouze se zaregistrovanými uživateli, budeme muset vytvořit skript, který se o registraci uživatelů postará. Nazveme jej registrace.php. Skript bude rozlišovat pro jednoduchost dva stavy:

  1. Byly odeslány všechny registrační údaje (nick, heslo a heslo pro kontrolu) a heslo se shoduje s heslem pro kontrolu. Pokud nastane tato situace, skript prohledá tabulku users. Pokud v ní nenajde stejný nick, vloží do ní nový nick a heslo, pak nabídne uživateli možnost přihlášení (bez zadávání nicku a hesla). Pokud se nick v tabulce již vyskytuje, zobrazíme chybovou hlášku: NICK EXISTUJE a zobrazíme opět registrační formulář.
  2. Skript je volán poprvé, nebo nebyly uvedeny některé údaje, či byly uvedeny chybně. V této situaci zobrazíme registrační formulář.

Zde uvádím výpis kódu takového skriptu. Pro zobrazení registračního formuláře si nadefinujeme funkci regform(). Skript se skládá z jedné podmínky.

<?
require "./obecne.php";

// funkce pro zobrazení registračního formuláře
function regform()
{
   echo "<FORM ACTION=\"registrace.php\" METHOD=POST>\n";
   echo "<INPUT TYPE=HIDDEN NAME=send VALUE=true>\n";
   echo "<BR><INPUT MAXLENGTH=20 
      TYPE=TEXT NAME=nick> Nick\n";
   echo "<BR><INPUT MAXLENGTH=10 TYPE=PASSWORD 
      NAME=heslo1> Heslo\n";
   echo "<BR><INPUT MAXLENGTH=10 TYPE=PASSWORD 
      NAME=heslo2> Kontrola hesla\n";
   echo "<BR><INPUT TYPE=SUBMIT
      VALUE=\"REGISTROVAT\">\n</FORM>\n";
}

if ($send && $nick!="" && $heslo1==$heslo2 && $heslo1!=""):
   // pokud byly zadány správné údaje prohledáme tabulku users
   @$v = mysql_query("SELECT * FROM users WHERE nick LIKE '$nick'");
   @$p = mysql_num_rows($v);
   head();
   if ($p == 0):
      // pokud v tabulce users nenalezneme stejný nick, vložíme nick
      // a heslo do tabulky
      @$v = mysql_query("INSERT INTO users 
	              VALUES('','$nick','$heslo1')");
      echo "<P ALIGN=CENTER>NICK BYL ZAREGISTROVÁN</P>\n";
      echo "<A HREF=index.php?send=true&nick=$nick&heslo=$heslo1>
            Přihlásit se</A>\n";
   else:
      // pokud již nick existuje, zobrazíme chybové 
	  // hlášení a registrační formulář
      echo "<P ALIGN=CENTER>NICK EXISTUJE</P>\n";
      regform();
   endif;
   foot();
else:
   head();
   // pokud byly zaslány špatné údaje, 
   // zobrazíme chybové hlášení, jinak zobrazíme jen
   // samotný registrační formulář
   if ($send)
      echo "<P ALIGN=CENTER>Nebyly zadány správné údaje</P>\n";
   regform();
   foot();
endif;
?>

Nyní si budete muset zaregistrovat alespoň jeden nick - bez tohoto nebudeme moci pokračovat...

Dalším skriptem, který si vytvoříme, bude skript index.php, který bude zobrazovat přihlašovací formulář, vyhodnocovat data z tohoto formuláře a postará se o samotné přihlášení k chatu (zápisem do tabulky active).

  1. Byly odeslány všechny údaje (nick a heslo). Prohledáme tabulku users a budeme hledat řádek, kde je nick a heslo shodné s daty zaslanými z formuláře. Pokud se žádný takový řádek v tabulce nenachází, zobrazíme chybové hlášení CHYBNÉ ÚDAJE (pro jednoduchost nebudeme rozlišovat neplatný nick a heslo). Pokud se takový řádek v tabulce najde, vyzkoušíme prohledat tabulku active - zda v ní není již starý záznam. Pokud ano, zjistíme si jeho id a upravíme položku cas na aktuální čas. Pokud záznam v tabulce neexistuje, vytvoříme nový řádek, do kterého vložíme: nick, heslo a aktuální čas. Poté zjistíme id nového záznamu. Nakonec nás skript přesměruje na chat.php, který pak obrazovku rozdělí do rámů, ve kterých se budou otevírat jednotlivé stránky chatu.
  2. Skript je volán poprvé, nebo nebyly uvedeny některé údaje, či byly uvedeny chybně. V této situaci zobrazíme přihlašovací formulář a případné chybové hlášení.

Výpis skriptu index.php:

<?
require "./obecne.php";

// funkce zobrazí přihlašovací formulář
function logform()
{
   echo "<FORM ACTION=\"index.php\" METHOD=POST>\n";
   echo "<INPUT TYPE=HIDDEN NAME=send VALUE=true>\n";
   echo "<BR><INPUT MAXLENGTH=20 TYPE=TEXT NAME=nick> Nick\n";
   echo "<BR><INPUT MAXLENGTH=10 TYPE=PASSWORD NAME=heslo> Heslo\n";
   echo "<BR><INPUT TYPE=SUBMIT VALUE=\"PŘIHLÁSIT\">\n</FORM>\n";
   echo "<P ALIGN=CENTER><A HREF=registrace.php>
         Registrovat nový nick</A></P>\n";
}
if ($send && $nick && $heslo):
   // pokud skript dostal nick a heslo, ověří platnost v databázi
   @$v = mysql_query("SELECT * FROM users
           WHERE nick LIKE '$nick' AND heslo = '$heslo'");
   @$p = mysql_num_rows($v);
   if ($p == 1):
      // pokud heslo i nick sedí, pokračujeme dále
      $pass = MD5($heslo);
      @$z = mysql_fetch_row($v);
      $cas = Time();
      // zjistíme, zda je nick již přítomný na chatu
      @$v = mysql_query("SELECT id FROM active WHERE nick = '$z[1]'");
      @$p = mysql_num_rows($v);
      if (@$p > 0):
         // pokud ano, zjistíme id záznamu
		 // a upravíme časový záznam v tabulce
         @$x = mysql_fetch_row($v);
         $id = $x[0];
         @$v = mysql_query("UPDATE active SET cas='$cas'
		          WHERE id = '$id'");
      else:
         // pokud ne, vložíme do tabulky celý nový řádek
         @$v = mysql_query("INSERT INTO active
		          VALUES('','$z[1]','$z[2]','$cas')");
         // a zjistíme, pod jakým id byl přidán
         $id = mysql_insert_id();
      endif;
      // skript přesměrujeme na samotný chat - již jsme přihlášeni
      // jako parametr předáváme id záznamu v tabulce active
      // a heslo zakódované pomocí funkce MD5()
      Header("Location: chat.php?id=$id&pass=$pass");
      Exit;
   else:
      // pokud nick a heslo nesedí, 
	  // zobrazíme chybovou hlášku a formulář
      head();
      echo "<P ALIGN=CENTER>CHYBNÉ ÚDAJE</P>\n";
      logform();
   endif;
   foot();
else:
   head();
   // pokud nebyly odeslány všechny údaje,
   //  pak zobrazíme chybové hlášení
   // jinak zobrazíme pouze formulář pro přihlášení
   if ($send)
      echo "<P ALIGN=CENTER>
	      Nebyly zadány všechny údaje</P>\n";
   logform();
   foot();
endif;
?>

Nyní si můžete vyzkoušet přihlášení k chatu - pokud se Vám po odeslání nicku a hesla zobrazí stránka rozdělená na tři rámy, máte vyhráno a příště se můžeme věnovat samotným souborům chatu. Pokud se tato stránka nezobrazí, pravděpodobně jste někde udělali chybu...

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: