Fórum v PHP a MySQL - 3. diel

V tomto diele sa dozviete ako zasielať témy do nášho už takmer podareného fóra. Článok nadvezuje na minulý diel, kde ste sa naučili vypisovať témy.
V tomto diele si fórum upravíme, tak aby nám bezpečne zasielalo témy od návštevníkov fóra. Všetko čo budeme upravovať je len CSS, bottom.php, index.php a najviac bude zasiahnutý súbor functions.php. Začnem asi tým najľahším a to bude CSS. Celá úprava bude viac menej kozmetická.
.bottom { text-align:center; }

.tema { background:#efefef; border:1px solid #cccccc; margin-bottom:0.2em; padding:0.2em; }

.tema_obsah { background:#ffffff; padding:0.5em; }

.css_menu { height:3em; }

.menu a { float:left; display:block; background:#efefef; color:#000000; border:1px solid #cccccc; font-weight:bold; padding:0.5em; }

.menu a:hover { float:left; display:block; background:#cccccc; color:#ffffff; border:1px solid #efefef; font-weight:bold; padding:0.5em; }
Vyššie uvedené CSS neni celé ako ste si určite všimli. Treba v ňom zameniť len veci, ktoré som uviedol tu. Nové zápisy sú triedy .bottom, .css_menu, .menu. Súbor bottom.php sa tiež zmenil len kozmeticky a to znamená, že sme len zarovnali na stred pätičku.
<div class="bottom"> 

&copy;2005 PaBi3.com | Všetky práva vyhradené

</div>

</body>

</html>
Teraz bude nasledovať celý zmenený súbor functions.php. Boli pridané nové funkcie. Na vytvorenie témy, na opravenie zápisu do databázy a na zobrazenie horizontálneho menu. Popis funkcií nájdete v komentároch, ktoré sú v zdrojovom kóde. Ešte predtým chcem upozorniť na to, že radšej sem dám celý zdrojový kód functions.php, pretože boli trochu poupravené aj ostatné funkcie aby sa mohlo zobrazovať horizontálne menu.
<? #functions.php



// funkcia, ktorá bude vytvárať menu pre fórum

function menu(){

echo " <div class="css_menu">";

echo" <div class="menu">n";

echo" <a href="?tema" title="Vytvorenie novej témy">Vytvorenie novej témy</a>n";

echo" </div>n";

echo" </div>n";

}



// funkcia, ktorá opraví zápis do databázy

function oprav($data){

global $dbc;

if(ini_get('magic_quotes_gpc')){

$data = stripslashes($data);

}

return mysql_real_escape_string($data, $dbc);

}



// funkcia pre vytvorenie témy

function vytvor_temu(){

$error = NULL;

if(isset($_POST[odoslat])){

if(empty($_POST[tema])){

$tema = FALSE;

$error .= "Nezadali ste meno témy!<br />n";

} else {

$tema = oprav(htmlspecialchars($_POST[tema]));

}



if(empty($_POST[autor])){

$autor = FALSE;

$error .= "Nezadali ste autora témy!<br />n";

} else {

$autor = oprav(htmlspecialchars($_POST[autor]));

}



if(empty($_POST[email])){

$email = "@";

} else {

$email = oprav(htmlspecialchars($_POST[email]));

}



if(empty($_POST[obsah])){

$obsah = FALSE;

$error .= "Nezadali ste obsah témy!<br />n";

} else {

$obsah = oprav(nl2br(htmlspecialchars($_POST[obsah])));

}



if($tema && $autor && $email && $obsah){

$ip = $_SERVER[REMOTE_ADDR];

mysql_query("INSERT INTO temy(nadpis,obsah,autor,email,datum,uprava,ip) VALUES('$tema','$obsah','$autor','$email',NOW(),NOW(),'$ip')");

} else {

echo $error;

}

}

echo "<h2><a href="/" title="Vrátiť sa na obsah fóra">Fórum</a> -> Vytvorenie novej témy</h2>n";

menu(); // volanie funkcie pre menu

echo "<form action="{$_SERVER[PHP_SELF]}?tema" method="post">n";

echo "<fieldset><legend>Vytvorenie novej témy</legend>n";

echo "Názov témy<br /><input name="tema" type="text" /><br />n";

echo "Autor<br /><input name="autor" type="text" /><br />n";

echo "Email<br /><input name="email" type="text" value="@" /><br />n";

echo "Obsah témy:<br /><textarea name="obsah" rows="7" cols="60"></textarea><br />n";

echo "<input name="odoslat" type="submit" value="Odoslať" />n";

echo "<input type="reset" value="Reset" />n";

echo "</fieldset>n";

echo "</form>n";

}



// funkcia pre zobrazenie témy

function zobraz_temu($id){

$sql = mysql_query("SELECT * FROM temy WHERE id_temy='$id' LIMIT 1");

while($stlpec = mysql_fetch_object($sql)){

$id_temy = $stlpec->id_temy;

$nadpis = $stlpec->nadpis;

$obsah = $stlpec->obsah;

$autor = $stlpec->autor;

$email = $stlpec->email;

$datum = $stlpec->datum;

$ip = $stlpec->ip;

echo "<h2><a href="/" title="Vrátiť sa na obsah fóra">Fórum</a> -> $nadpis</h2>n";

menu(); // volanie funkcie pre menu

echo "<div class="tema">n";

echo "<strong><a href="?id=$id_temy" title="">$nadpis</a></strong><br />n";

echo "<small>[ Dátum:$datum | Autor:$autor | Email:$email | IP:$ip ]</small><br />n";

echo "<div class="tema_obsah">$obsahn";

echo "</div></div>n";

}

mysql_free_result($sql);

}



// funkcia na výpis tém

function zobraz_temy(){

echo "<h2>Fórum</h2>n";

menu(); // volanie funkcie pre menu

$sql = mysql_query("SELECT * FROM temy ORDER BY uprava DESC");

while($stlpec = mysql_fetch_object($sql)){

$id_temy = $stlpec->id_temy;

$nadpis = $stlpec->nadpis;

$datum = $stlpec->datum;

echo "<div class="tema">n";

echo "<strong><a href="?id=$id_temy" title="">$nadpis</a></strong><br />n";

echo "<small>[ Dátum:$datum ]</small>n";

echo "</div>n";

}

mysql_free_result($sql);

}



?>
Ako vidíte primárna funkcia, ktorá bude vytvárať témy(vytvor_temu()) je pekne dlhá. Samozrejme nejde o jej dĺžku ale o funkčnosť. Zápis do fóra nebude zneužitý, pretože je chránené proti prázdnym zápisom alebo proti HTML tagom či javascriptu alebo dokonca samotnému PHP. Funkcia menu() bude zobrazovať horizontálne menu. Bola použitá takmer v každej funkcií. Funkcia oprav() bude opravovať zápis do databázy. Všetky funkcie budeme opäť volať zo súboru index.php.
<? #index.php

require_once("config.php");

require_once("functions.php");

include_once("layout/top.php");



if(isset($_GET[id])){

if($_GET[id] == $id){

zobraz_temu($id);

}

} elseif(isset($_GET[tema])){

vytvor_temu();

} else {

zobraz_temy();

}



include_once("layout/bottom.php");

mysql_close();

?>
Súbor bol minimálne upravený a to tak, že sa pridalo iba volanie funkcie pre vytvorenie témy. URL formuláru pre vytvorenie témy bude index.php?tema. Toto by bolo pre tento diel všetko a nabudúce si ukážeme ako zapisovať príspevky k témam.
Alternatívne verzie: Text PDF Voice
Autor: PaBi3 · Kategória: Programovanie · Dátum: 18.07.2005 16:45

Komentáre

Zatiaľ tu nie sú žiadne komentáre.

Osobné údaje
Captcha
Odpíšte text z obrázku. Rozlišujú sa malé a veľké písmená.
Obsah
Možnosti