Cvičenie č.15 – Vytvorenie jednoduchej diskusie

Téma: Vytvorenie jednoduchej diskusie

Úloha: Vytvorte webovú stránku, ktorá bude pracovať ako nástenka alebo jednoduchý chat bez použitia databázy. Súbor pre formulár pre zadávanie komentárov sa bude nazývať diskusia.txt a súbor do ktorého budú pridávané komentáre board.php

Podmienky: Vytvorený dokument umiestnite na svoj blog v položke PHP „Zadanie č.15 Diskusia“

Teória :

Možnosť použitia php kódu, ktorý nevyžaduje databázu pre pridávanie textových správ a komentárov spočíva v tom, že pridaný komentár cez formulár umiestnený na konci článku sa uloží do textového súboru a potom sa obsah súboru pridá skriptom do tela webovej stránky.

Ako príklad si vytvoríme prázdny súbor data.inc a druhý súbor diskusia.php bude obsahovať nasledujúci skript:

<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Diskusia:</title>
</head>
<body>
<?
$meno = $_POST['meno'];
$email = $_POST['email'];
$web = $_POST['web'];
$sprava = $_POST['sprava'];

$meno=HTMLSpecialChars($meno);
$email=HTMLSpecialChars($email);
$web=HTMLSpecialChars($web);
$sprava=HTMLSpecialChars($sprava);

$meno=stripslashes($meno);
$email=stripslashes($email);
$web=stripslashes($web);
$sprava=stripslashes($sprava);

$sprava = str_replace("\n"," <br> ", $sprava);
$sprava = substr($sprava, 0, 10000);

$email_celok=" | <a href='mailto:$email'>$email</a>";
$web_celok=" | <a href='$web'>$web</a>";

if ($web=="http://"){$web_celok="";}
if ($email==""){$email_celok="";}

if ($sprava!="" and $meno!=""){
$celok="<p>Správu poslal: <strong>$meno</strong>$email_celok $web_celok</p><p>$sprava</p><hr>";
$subor = fopen ('data.inc','a');
fwrite ($subor, $celok);
fclose ($subor);
}
?>
<h1>Diskusia:</h1>
<? include "data.inc"; ?>
<h2>Pridanie správy:</h2>
<form action="diskusia.php" method="post"></p>
<table>
<tr><th>*Meno: </th><td><input type="text" name="meno" maxlength="25"></td></tr>
<tr><th>E-mail: </th><td><input type="text" name="email" maxlength="25"> [nepovinné]</td></tr>
<tr><th>Web: </th><td><input type="text" name="web" value="http://" maxlength="30"> [nepovinné]</td></tr>
<tr><th>*Správa: </th><td><textarea cols="60" rows="5" name="sprava"></textarea></td></tr>
<tr><th></th><td><input type="submit" value="Odoslať"></td></tr>
</table>
</form>
</body>
</html>

Podmienkou správnej funkcie boardu (komentárov) je, aby boli nastavené práva na zápis do textového súboru na serveri.

Podobnou funkciou ako board je diskusia (chat). Na rozdiel od komentára musí umožňovať štruktúrované vetvenie odpovedí k jednotlivým diskusným témam, čo komplikuje výsledný kód, rôznymi podmienkami a doplnkovými údajmi. K príspevku sa totiž musí uviesť kto komentuje a aký predchádzajúci príspevok je komentovaný. Niekedy sa pridáva aj časová značka a identifikátor diskutujúceho. Mal by tiež obsahovať možnosť moderovania diskusie (cenzúru nevhodných a urážlivých príspevkov atď.)

Úplne jednoduchý príklad z ktorého je jasný princíp diskusie je skript:

<h2>Diskusia:</h2>
 <?php
 $file = "diskusia.txt";
 readfile($file); 
 if (isset($_POST['odoslat']) && ($_POST['kontrola'] == 2))
 {
 $fo = fopen($file, "a");
 if (fwrite($fo, '<p>Od: ' . htmlspecialchars($_POST['autor']) . '<br />Titulok: ' . htmlspecialchars($_POST['nadpis']) . '<br /><br>Napísal: ' . htmlspecialchars($_POST['obsah']) . '</p>'));
 echo 'Príspevok vložený';
 fclose($fo);
 exit;
 }
 else
 echo 'Zlý výsledok!';
 ?>
 
 <form action="prispevok.php" method="post">
 Autor: <input type="text" name="autor" /><br/>
 Nadpis: <input type="text" name="nadpis" /><br/>
 Príspevok: <textarea name="obsah" cols="50" rows="10"></textarea><br/>
 Vypočítaj 1+1=<input type="text" name="kontrola" /><br/>
 <input type="submit" name="odoslat" value="OK">
 </form>

Kód s formulárom uložte do súboru prispevok.php a ešte vytvorte prázdny súbor diskusia.txt. Opäť ako pri komentároch je potrebné nastaviť práva na serveri pre zápis do textového súboru, čo zvyšuje riziko kompromitácie servera. Oveľa pohodlnejšie a krajšie je použitie databázy na správu príspevkov v diskusii.

 

Postup pri práci :  Upravte vzorový skript tak, aby spĺňal podmienky úlohy