Náměty od čtenářů - 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

Náměty od čtenářů - III

redakcni system

30. ledna 2003, 00.00 | Pokračování seriálu o tvorbě vlastního redakčního systému v PHP. Konkrétně jeho podčásti a to "náměty od čtenářů". V tomto dílu podseriálu pokračujeme dál a dnes se podíváme jak odpovědět na námět.

Dnes nám tedy zbývá dokončit editaci námětů v admincentru.
Na začátek si tedy ukážeme skript namety.php a posléze si jej popíšeme.

<?
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 && $id)
{
     $zprava=trim(HTMLSpecialChars($zprava));
     if($zprava!=""):
     @MySQL_Query("UPDATE namety SET stav='r',reakce='$zprava' WHERE id=$id");
     @$a=mysql_query("SELECT email,text FROM namety WHERE id=$id");
     @$b=mysql_fetch_row($a);
     if($b[0]!="")
          @mail($b[0],"Reakce na námět:\n",$b[1]."\n\n\n\n".$zprava,
                   "From: \n");  
          endif;
     if($zobrazit=="true")
         @MySQL_Query("UPDATE namety SET zobrazit='a' WHERE id=$id");
@header("Location: ./namety_cist.php");
}
head();
// zobrazení formuláře
$sql=MySQL_Query("SELECT * FROM namety WHERE id='$id'");
$r=mysql_fetch_array($sql);
if($r[stav]!="r") // !velice podstatné! viz. popis
@MySQL_Query("UPDATE namety SET stav='a' WHERE id='$id'");

?>

<H3 ALIGN="CENTER">Odpověď na námět</H3>

<FORM METHOD="POST" ACTION="namety.php">
<INPUT TYPE="HIDDEN" NAME="send" VALUE="true">
<INPUT TYPE="HIDDEN" NAME="id" VALUE="<?=$id?>">
<TABLE BORDER="1" CELLSPACING="0" CELLPADDING="4" ALIGN="CENTER">
  <TR>
    <TD><B>Od:</B></TD>
    <TD><B><?=$r[jmeno]?></B>
     </TD>
  </TR>
  <TR>
    <TD><B>E-mail:</B></TD>
    <TD>
          <?=$r[email]?>
    </TD>
  </TR>
  <TR>
    <TD><B>Vzkaz:</B></TD>
    <TD BGCOLOR="#BFD8FD"><? echo $r[text]?></TD>
  </TR>
  <TR>
    <TD VALIGN="TOP"><B>Počítač:</B></TD>
    <TD>
	<?=GetHostByAddr($r[ip])?>
    </TD>
  </TR>
  <TR>
    <TD VALIGN="TOP"><B>Vzkaz vložen:</B></TD>
    <TD>
	<?=date("H:i:s j.m.Y",$r[datum])?>
    </TD>
  </TR>
  <TR>
    <TD><B>Odpovědět:</B></TD>
    <TD><TEXTAREA NAME="zprava" ROWS=10 COLS=45>
	<? echo $r[reakce];?>
	</TEXTAREA>
    </TD>
  </TR>
  <TR>
    <TD VALIGN="TOP"><B>Zobrazit odpověď:</B></TD>
    <TD>
	<INPUT TYPE="CHECKBOX" NAME="zobrazit" VALUE="true">
    </TD>
  </TR>
  <TR>
    <TD ALIGN="CENTER" COLSPAN="2"><INPUT TYPE="SUBMIT" VALUE="ODESLAT" 
		<? if($odpoved=="false") echo "DISABLED";?>></TD>
  </TR>
  <TR>
    <TD COLSPAN=2 ALIGN="Center">
	<A HREF="namety_cist.php" TARGET="main">Zpět</A>
    </TD>
  </TR>
</TABLE>
</FORM>

<? foot(); ?>

Po kliknutí na odkaz na tuto stránku ve scriptu namety_cist.php se zobrazí formulář, kde budou vyplněny následující údaje: odesílatel, e-mail (pokud nějaký je), vzkaz, počítač, ze kterého byl vzkaz vložen a datum vložení. Jestliže jsme na tento dotaz již odpovídali, zobrazí se i odpověď a zároveň se použije i GET parametr odpoved=false, o kterém jsme mluvili minule a znemožní odeslání formuláře.
Ještě k selektu z databáze. U podmínky, kde je napsáno !velice podstatné!, je důležité vysvětlit její použití. V případě, že by zde nebyla, tak by se každá zobrazená zpráva označila jako přečtená a to i v případě, že jsme na ni již odpověděli.
Proč? Jak víme, tak stav zpráv může být a,n nebo r. V případě, že by byl stav a nebo n, nic by se nestalo, přečtená zpráva by zůstala přečtenou, nepřečtená by se stala přečtenou, ale zodpovězená by se stala přečtenou, což není pravda. Z toho důvodu je zde tato podmínka. Když vše vyplníme, odešleme formulář.
Až po autorizaci jsou vše známé procedůry. Pokud byl formulář odeslán a známe i číslo námětu, vložíme data do databáze.
Na začátku si odstraníme nebezpečné znaky a mezery z řetězce. Následně pokud proměnná $zprava není prázdná, označíme námět v databázi jako zodpovězený a zároveň vložíme i reakci. Vybereme námět a i s odpovědí ho pošleme přispěvovateli na e-mail. Pokud ho zadal. Když však chce šéfredaktor tento námět jen zobrazit a nebude psát žádnou odpověď, je zbytečné vybírat a posílat e-mail s námětem, který sám zadal. Proto tato podmínka obsahuje i odsílání e-mailů. Další SQL dotaz nám určí, zda se zpráva zobrazí čtenářům. Po všech výše popsaných postupech se přesměrujeme na script namety_cist.php.

Na příští díl seriálu nám ještě zbývá zobrazení námětů čtenářům.

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: