Interní vzkazy - 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:

Soutěž

Sponzorem soutěže je:

IDIF

 

Kde se koná výstava Expozice Středoevropského moderního umění?

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

Dárkový certifikát v hodnotě 1000,- Kč



PHP

Interní vzkazy - II

redakcni system

12. září 2002, 00.00 | Pokračování v tvorbě redakčního systému, respektive jeho vylepšení o možnost zasílání interních vzkazů. V této části si ukážeme, jak vytvořit script pro psaní a odpovídání na vzkazy.

  Dnes pokračujeme v našem výkladu o posílání interních vzkazů. Nyní vyřešíme psaní scriptů.

Hned na začátku bych se ale chtěl omluvit za svou chybu. Ti pozorní si při prohlížení minulého scriptu jistě všimli, že pokud chcete zobrazit všechny vzkazy, tak se neobjeví ani jeden. Někteří z vás na to přišli, ale pro ty, co si nevšimli, je tu oprava. Část, kde se formuje SQL dotaz, bude vypadat následovně.

elseif($zobraz=="v")
$query=" pro_id='$INFO[0]' OR od_id='$INFO[0]'";

Jde vlastně jen o to, že AND nahradíme OR. Je to samozřejmé z konstrukce systému. Dotazem s AND bychom vybrali zprávy, které si autor poslal sám sobě a tuto možnost odstraníme ve scriptu pro psaní zpráv. Ještě jednou se omlouvám.

Předposlední script, který nám schází, je vzkazy.php.

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

// pokud neproběhla autorizace, ukončíme skript
if (!isset($PHP_AUTH_USER))
{
   echo "Neautorizovaný přístup";
   exit;
}

@include "../function.php";
@include "../conn.php";

// autorizace
auth();

// bude-li odeslán formulář, vložíme údaje do databáze
if ($send && $predmet && $zprava)
{
$zprava=HTMLSpecialChars($zprava); //odstraníme nebezpečné znaky
   if($odpoved_id=="")  // pokud vzkaz není odpověd
	$odpoved_id=0;
   @$sql = mysql_query("INSERT INTO vzkazy VALUES('','$INFO[0]','$pro_id',
                               '$predmet', 'n','$zprava','$odpoved_id','0')");
   if($odpoved_id!="")
	@MySQL_Query("UPDATE vzkazy SET stav='r' WHERE id='$odpoved_id'");
   if($email=="true")  // když máme odeslat upozornění na email
   {
	@$a=mysql_query("SELECT email FROM autori WHERE id='$pro_id'");
	@$b=mysql_fech_row($sql);
	$zprava="Máte novou zprávu v admin centru uloženou dne 
                             ".date("j.m.Y v H:i:s:");
	@mail($b[0],"Zpráva v admin centru",$zprava,"From: \n");  
   }
   head();
   ?>
  H3 ALIGN="CENTER">Vzkaz vložen</H3>
  <?
   // ukončíme skript
  foot();
  exit;
}
elseif($send) 
{
echo "<H3 ALIGN=\"CENTER\"><FONT COLOR=\"#FF0000\">Chybí povinné údaje
							</FONT></H3>\n";
}
head();
// zobrazení formuláře
?>

<H3 ALIGN="CENTER">Psaní vzkazu</H3>

<FORM METHOD="POST" ACTION="vzkazy.php">
<INPUT TYPE="HIDDEN" NAME="send" VALUE="true">
<TABLE BORDER="1" CELLSPACING="0" CELLPADDING="4" ALIGN="CENTER">
  <TR>
    <TD><B>Od:</B></TD>
    <TD><B><? echo $INFO[3]; ?></B>
     </TD>
  </TR>
  <TR>
    <TD><B>Pro:</B></TD>
    <TD>
      <SELECT NAME="pro_id">
        <?
	if($odpoved_id!=""):
	$sq=mysql_query("SELECT od_id,predmet,zprava FROM vzkazy 
                                           WHERE id='$odpoved_id'");
	$pro=mysql_fetch_row($sq);
	$predmet=$pro[1];
	$zprava=$pro[2];
	endif;
         @$sql = mysql_query("SELECT id,jmeno FROM autori");
      while ($data = mysql_fetch_row($sql))
      {
	if($data[0]==$INFO[0]) continue;
      // zobrazíme výsledek
     ?>
	<OPTION VALUE="<? echo $data[0]; ?>" 
                <? if($data[0]==$pro[0] or $data[0]==$pro_id)echo"SELECTED" ?>>
		<? echo $data[1];?></OPTION>
    <?
     }
      @mysql_free_result($sql);
        ?>
      </SELECT>
    </TD>
  </TR>
  <TR>
    <TD><B>Předmět:</B></TD>
    <TD><INPUT TYPE="TEXT" NAME="predmet" VALUE="<? 
					if($predmet!="" and $send!="true") 
					  echo "RE: ".$predmet; 
					else 
					  echo $predmet; ?>" SIZE="56" 
						MAXLENGTH=250></TD>
  </TR>
  <TR>
    <TD VALIGN="TOP"><B>Zpráva:</B></TD>
    <TD><TEXTAREA NAME="zprava" COLS="50" ROWS="10"><? 
	if($zprava!="" and $send!="true") 
	     echo "\n\n\nPůvodní zpráva:\n----------------------\n".$zprava; 
	else 
	     echo $zprava; ?></TEXTAREA>
	<INPUT TYPE="HIDDEN" NAME="odpoved_id" VALUE="<?=$odpoved_id?>">
    </TD>
  </TR>
  <TR>
    <TD><B>Poslat upozornění na e-mail:</B></TD>
    <TD><INPUT TYPE="CHECKBOX" NAME="email" VALUE="true" <? if($email=="true") 
			echo "CHECKED";?>></TD>
  </TR>
  <TR>
    <TD ALIGN="CENTER" COLSPAN="2"><INPUT TYPE="SUBMIT" 
						VALUE="ODESLAT"></TD>
  </TR>
</TABLE>
</FORM>

<? foot(); ?>

Popíšeme si ho tak, jak bude pracovat. Když ho zavoláme poprvé, zobrazí se nám tabulka, do které vyplníme vzkaz. Určíme příjemce zprávy, předmět a text vzkazu. U příjemce si můžete všimnout, že se jedna položka přeskupuje (příkaz continue). Jedná se o možnost, kdyby si autor posílal zprávy sám sobě. To asi bude dělat málokterý.
U předmětu a zprávy samé můžete vidět, že tento formulář se používá i pro psaní odpovědí na zprávy. Pokud se tedy do formuláře píše odpověď, před předmět se doplní "RE:" a zpráva, na kterou odpovídáme, se vloží za hlášku "Původní zpráva:" a oddělovač z pomlček.
Pokud vyplníme všechny potřebné věci, to jest předmět a zprávu, pokračujeme ve zpracování, jinak se zobrazí chybová hláška a zobrazí se tabulka s položkami, která již byly korektně vyplněné. Toto je důležité hlavně u zprávy, neboť když autor napíše zprávu, která má řekněme 1000 znaků (ten se ale rozpovídal), tak by ho asi velice mrzelo, že poté, co se soustředil na zprávu a zapomněl na předmět, se mu celé jeho dílo smazalo.
Zpracování probíhá následujícím způsobem. Pokud tedy máme všechny potřebné položky, zbavíme se nebezpečných znaků pomocí fce HTMLSpecialChars(). Pro tyto potřeby a hlavně pro potřeby českého jazyka je lepší než fce HTMLEntities(), kde se nám z textu odstraní i písmenka s diakritikou. Bohužel, českému jazyku je přívětivější Windows-1250 než ISO 8859-1 se kterým tato fce pracuje.
Pokud vzkaz není odpověď, vložíme do databáze do položky odpoved_id číslo 0. V opačném případě to bude právě to id vzkazu, na nějž odpovídáme.
Když pisatel chtěl poslat upozornění na e-mail, tak vybereme adresu příjemce vzkazu, kterého máme v proměnné $pro_id. Načteme výsledek a pomocí funkce Mail(), která byla v tomto seriálu již několikrát zmiňována, pošleme upozornění. Zpráva e-mailu ve v proměnné $zprava a můžete si ji upravit dle potřeby. Stejně tak jako předmět, což je druhý parametr funkce. O posledním parametru, hlavičkách, je napsáno mnoho v jednom z předchozích dílů.
Na závěr toho všeho vypíšeme hlášku o úspěšném provedení akce.

Na příště nám ještě zbývá script cist.php.

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: