Autor Zpráva
martanius
Profil
Zdravím,

rád bych si vytvořil takové klasické webovky o hrách, dělám to přes kompozer, takže se o script až tolik nestarám, ale v HTML se trošku vyznám, tzn. že když se na to kouknu tak vím o co jde... přibližně. Takže už mám grafiku, základní vzhled stránek a teď se chci vrhnout na tvorbu už toho samotného obsahu webu, ale ještě než začnu, tak bych rád měl na webovkách ještě jednu věc - komenáře, aby se lidé mohli ptát či reagovat na téma. Rád bych to měl tedy na většině stránek a proto bych to poté musel postupně opět celé procházet a přidávat na každou stránku ty komentáře (ten script).

Našel jsem tedy zatím jen toto :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Diskuse</title>
</head>
<body>
<?
$zprava = $_POST['zprava'];

if ($zprava!=""){ //provede se pokud není prázdná zpráva
$celek="<p>$zprava</p>";
$soubor = fopen ('data.inc','a');//otevře soubor pro doplňování
fwrite ($soubor, $celek);//zapíše zprávu
fclose ($soubor); //zavře soubor
}
?>
<h1>Diskuse</h1>
<?include "data.inc"; ?>
<h2>Přidání zprávy</h2>
<form action="diskuse.php" method="post">
Zpráva: <input type="text" name="zprava"> <input type="submit" value="odeslat">
</form>
</body>
</html>

a toto je prý bezpečnější verze :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<title>Dokonalejší a bezpečnější diskuse</title>
</head>
<body>
<?
$jmeno = $_POST['jmeno'];
$email = $_POST['email'];
$web = $_POST['web'];
$zprava = $_POST['zprava'];

$jmeno=HTMLSpecialChars($jmeno); //převede některé znaky na entity 
$email=HTMLSpecialChars($email);
$web=HTMLSpecialChars($web);
$zprava=HTMLSpecialChars($zprava);

$jmeno=stripslashes($jmeno); //odstraní lomítka
$email=stripslashes($email);
$web=stripslashes($web);
$zprava=stripslashes($zprava);

$zprava = str_replace("\n"," <br> ", $zprava); //nové řádky nahradí <br>
$zprava = substr($zprava, 0, 10000);//zpráva bude mít maximálně 10000 znaků pomocí substr

$email_celek=" | <a href='mailto:$email'>$email</a>";
$web_celek=" | <a href='$web'>$web</a>";

if ($web=="http://"){$web_celek="";} //pokud se nevyplní nic se nevypíše 
if ($email==""){$email_celek="";} // -||-

if ($zprava!="" and $jmeno!=""){ //provede se pokud není prázdná zpráva a jméno
$celek="<p>Zprávu poslal <strong>$jmeno</strong>$email_celek $web_celek</p><p>$zprava</p><hr>";
$soubor = fopen ('data-2.inc','a'); //otevře soubor pro doplňování
fwrite ($soubor, $celek); //zapíše zprávu
fclose ($soubor); //zavře soubor
}
?>
<h1>Dokonalejší a bezpečnější diskuse</h1>
<? include "data-2.inc"; ?>
<h2>Přidání zprávy</h2>
<form action="diskuse-2.php" method="post"></p>
<table>
<tr><th>*Jméno: </th><td><input type="text" name="jmeno" 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>*Zpráva: </th><td><textarea cols="60" rows="5" name="zprava"></textarea></td></tr>
<tr><th></th><td><input type="submit" value="odeslat"></td></tr>
</table>
</form>
</body>
</html>

Vypadalo to nadějně, ale nic víc k tomu už moc nepíší.

V PhP je to se mnou horší, ale dříve jsem scriptoval v pawnu, což je podobné PhP, ale podle toho scriptu to zřejmě "postne" na diskuse.php a komentáře by se prý měli ukládat do data.inc.
Po kliku na odselat se žádný soubor data.inc nevytvoří a samo se to přesměruje na diskuse.php, který samozřejmě neexistuje a když ho vytvořím, tak to tak prostě zobrazí to co na diskuse.php je, ale nic jiného, čili žádná změna.

Myslel jsem, že tenhle script, či jeden z nich dám tedy někam na ten svůj web a tam bude ta tabulka s možností vložení komentáře a po kliku na odeslat se nový komentář vytvoří... dle scriptu jsem předpokládal, že si opět na ten web na nějaké místo nechám vypsat obsah té diskuse.php kde by tedy byly ty komentáře zobrazené a v data.inc by ty komentáře byly uložené, takže by se vlastně do diskuse.php vypisoval obsah data.inc a na webu by se vypisoval obsah diskuse.php.

Mimochodem, po tom co zkouším ten spodní script se mi zobrazuje toto :

http://i59.tinypic.com/30vipfk.jpg

Je chyba ve scriptu či mám EasyPHP se zastaralou verzí PHP ?

Jde mi jen o jednoduchý systém komentářů, prosím, mohl by mě někdo nějaký vytvořit či pomoci s tím co jsem našel ?

Děkuji.
webguru
Profil
Asi si prečasne uzavrel php skript. <?php ...php kód...?> Takto by to malo biť....
//EDIT síce ani nie to je chyba, na obrázku vidno uzavretie php skriptu, tak potom, neviem... Ale prekontroluj si to
MONTYCEK
Profil
martanius:
Zkus i opravit to <? na začátku každého skriptu na <?php.
martanius
Profil
Super! Ten <?php pomohl, už se nevypisuje ten script. Už to dokonce i skoro bezchybně funguje, po napsání zprávy se zpráva skutečně objeví.

Ale je tu další problém, teď to píše toto :

http://i57.tinypic.com/2vrxzb6.jpg

Notice: Undefined index: jmeno in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\web2\diskuse-2.php on line 9

Notice: Undefined index: email in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\web2\diskuse-2.php on line 10

Notice: Undefined index: web in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\web2\diskuse-2.php on line 11

Notice: Undefined index: zprava in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\web2\diskuse-2.php on line 12

Použil jsem ten druhý bezpečnější způsob, takže řádky jsou :

$jmeno = $_POST['jmeno'];
$email = $_POST['email'];
$web = $_POST['web'];
$zprava = $_POST['zprava'];

Nenadefinovaný index ?

Děkuji za odpovědi.
petr 6
Profil
martanius:
Nenadefinovaný index ?
Ano. Pokud na stránku vstoupíte, aniž byste předtím něco odeslal, pak samozřejmě prvky pole $_POST s indexy jmeno, email, web a zprava nejsou definovány.
martanius
Profil
Dobře, díky :) Už jsem to vyřešil pomocí isset.

Děkuji všem.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: