Programátorská sociální síť a materiálová základna pro C#, Java, PHP, HTML, CSS, JavaScript a další.


Přihlásit se Registrace  

Diskuze v PHP bez použití databáze

Zpět do sekce Práce se soubory v PHP

Tento článek vám ukáže, jak realizovat velice jednoduchou diskuzi v PHP bez použití databáze. To může být výhodné zejména tehdy, když s databází ještě neumíte pracovat.

Jako první si vytvoříme nový PHP soubor, v našem případě diskuze.php.

Formulář:

Klasický formulář <form>, kterým budeme odesílat data. Abychom k nim po odeslání mohli přistoupit, musíme zadat metodu, kterou se odešlou - v našem případě POST. A soubor kam se odešlou - pokud chceme současný tag action nespecifikujeme nebo jej nastavíme na "". Přidáme <input> tagy pro vkládání informací, <textarea> pro zprávu a tlačítko pro odeslání zprávy.

<form method="post">
        Autor: <input type="text" name="autor" /><br />
        Nadpis: <input type="text" name="nadpis" /><br />
        Příspěvek: <textarea name="obsah" cols="50" rows="10"></textarea><br />
        <input type="submit" name="odeslat" value="OK">
</form>

Zápis do souboru

Zpracování bude probíhat na začátku scriptu. Nejprve ověříme, zda uživatel stisknul tlačítko (v postu je input s názvem odeslat, který jsme si nastavili výše). Poté data zapíšeme do souboru pomocí fopen a fwrite. Nakonec přesměrujeme opět na diskuze.php, tím se ztratí data v POST, jinak by po stisknutí F5 došlo opět k odeslání toho samého příspěvku podruhé.

$file = "diskuze.txt";

if (isset($_POST['odeslat']))
{
        $fo = fopen($file, "a");
        if (fwrite($fo, '<p>Od: ' . htmlspecialchars($_POST['autor']) . '<br />Titulek: ' . htmlspecialchars($_POST['nadpis']) . '<br /><br>Napsal: ' . htmlspecialchars($_POST['obsah']) . '</p>'));

        fclose($fo);
        header('Location: diskuze.php');
        exit;
}

Výpis diskuze

Ted potřebujeme vložit soubor do diskuze, to uděláme jednoduše pomocí readfile.

<h2>Diskuze:</h2>

<?php readfile($file); ?>

Celý zdrojový kód:

<?php

$file = "diskuze.txt";

if (isset($_POST['odeslat']) && ($_POST['kontrola'] == 2))
{
        $fo = fopen($file, "a");
        if (fwrite($fo, '<p>Od: ' . htmlspecialchars($_POST['autor']) . '<br />Titulek: ' . htmlspecialchars($_POST['nadpis']) . '<br /><br>Napsal: ' . htmlspecialchars($_POST['obsah']) . '</p>'));
$message = 'Příspěvek vložen';
        fclose($fo);
        exit;
}
else
        $message = 'Špatný výsledek!';
?>

<h2>Diskuze:</h2>
<?php echo ($message); ?>
<form method="diskuze.php">
        Autor: <input type="text" name="autor" /><br/>
        Nadpis: <input type="text" name="nadpis" /><br/>
        Příspěvek: <textarea name="obsah" cols="50" rows="10"></textarea><br/>
        Vypočítej 1+1=<input type="text" name"kontrola" /><br/><!--kontrola před roboty -->
       <input type="submit" name="odeslat">
</form>
<?php readfile($file); ?>

Také nezapomeňte vytvořit ve stejném adresáři soubor diskuze.txt nebo nastavit zápisová práva na 777!!! (jinak to nebudefungovat)


 

Autor: jakub
Jakub se věnuje programování v Javě.PHP,CSS a HTML. Vytvořil plugin WEB-SHOP pro Minecraft servery a vlastní MC server.

Jak se vám líbí článek?
Celkem (2 hlasů):
4.5 4.5 4.5 4.5 4.5


 


Předchozí článek
PHP: Čtení XML třídou SimpleXML
Pro čtení XML a XHTML z PHP je možné použít jednoduchou třídu SimpleXML, která nám skutečně jednoduchým způsobem převede dokument XML na objekt.
Všechny články v sekci
Práce se soubory v PHP
Práce se soubory XML, XSS, INI a TXT pomocí SAX a DOM v PHP.


 

 

Vaše komentáře:
Zobrazit starší komentáře (51)

19.12.2012 20:34:34
Avatar
albertpatera
Redaktor
Skill: 486 DX
DotDotDotDotDotDotDotDotDotDot

jdou nějak udělat skilly, že by za určitý počet článů měl uživatel větší skill?

Editováno 19.12.2012


Odpovědět   i++; | i--; ( -1 )
23.12.2012 17:32:09
Avatar
jakub
Moderátor
Skill: 486 DX
DotDotDotDotDotDotDotDotDotDot
Odpovídá na albertpatera:

Ano jdou.
Ke každému uživateli si budeš psát jeho počet příspěvků,poté jednoduše pomocí case nebo něčeho jinýho(teĎ nwm přesně :D) budeš určovat určítý skill.


Odpovědět   i++; | i--;
Error 404: Motto not found
24.12.2012 09:42:35
Avatar
albertpatera
Redaktor
Skill: 486 DX
DotDotDotDotDotDotDotDotDotDot
14.01.2013 19:55:41
Avatar
HoBi
Moderátor
Skill: Pentium
DotDotDotDotDotDotDotDotDotDot

doporučil bych místo

<?php readfile($file); ?>

toto

<?php    if(file_exists($file))
         include($file);
         else { echo ($message); } ?>

vypíše se to jen když bude soubor existovat jinak to napíše soubor neodeslán ..
tudíž se může pole pro oznámení odeslání vypustit ...
(avšak někdy to nemusí být vhodné ..)


Odpovědět   i++; | i--;
Nejsilnější zbraní je pouhopouhá myšlenka !
14.01.2013 19:57:21
Avatar
HoBi
Moderátor
Skill: Pentium
DotDotDotDotDotDotDotDotDotDot

ještě bych se chtěl zeptat, jestli nevíte, proč se mi do toho diskuze.txt nechce nic uložit ... (diskuze se zobrazí(obsah diskuze.txt), ale nejde do něj ukládat)

kód :
http://prntscr.com/p62nz

Editováno 14. ledna


Odpovědět   i++; | i--;
Nejsilnější zbraní je pouhopouhá myšlenka !
14.01.2013 20:01:51
Avatar
HoBi
Moderátor
Skill: Pentium
DotDotDotDotDotDotDotDotDotDot
Odpovídá na HoBi:

oprava : (predchozi se nezobrazi?)
http://prntscr.com/p639t


Odpovědět   i++; | i--;
Nejsilnější zbraní je pouhopouhá myšlenka !
16.01.2013 18:23:10
Avatar
HoBi
Moderátor
Skill: Pentium
DotDotDotDotDotDotDotDotDotDot

prosím o radu :) ^^


Odpovědět   i++; | i--;
Nejsilnější zbraní je pouhopouhá myšlenka !
16.01.2013 18:56:33
Avatar
sdraco
Moderátor
Skill: Kvantový počítač
DotDotDotDotDotDotDotDotDotDot
Odpovídá na HoBi:

A máš zapisovací práva? Ten skript tady by měl fungovat :)


Odpovědět   i++; | i--;
You only get one shot, do not miss your chance to blow. This opportunity comes once in a lifetime.
16.01.2013 22:54:53
Avatar
HoBi
Moderátor
Skill: Pentium
DotDotDotDotDotDotDotDotDotDot
Odpovídá na sdraco:

no ... zjistim to a kdyžtak napíšu :)


Odpovědět   i++; | i--;
Nejsilnější zbraní je pouhopouhá myšlenka !
17.01.2013 08:39:17
Avatar
Kit
Moderátor
Skill: Core i7 extreme
DotDotDotDotDotDotDotDotDotDot
Odpovídá na HoBi:

Používat include místo readfile je hloupost kvůli zbytečnému zvýšení rizika XSS a zpomalení zpracování.


Odpovědět   i++; | i--; ( +1 )
Aplikace je hotova až tehdy, když z ní nelze nic odebrat.

 

Zobrazeno 10 z 61 zpráv

Zobrazit všechny komentáře k článku

Přidat novou zprávu

Avatar
Neregistrovaný

Pro výhody se přihlaš. Pokud ještě nemáš účet, zaregistruj se.

Jméno:
E-mail:
Web:

Šťastný Smutný S vyplazeným jazykem Mrkající Smějící se Plačící Cool Nemocný Naštvaný S brýlemi Stydící se On to nebyl Překvapený Hodně překvapený Šokovaný Srdce sdraco
Vložení obrázků Obrázky mohou nahrávat pouze registrovaní uživatelé
Vložení dlouhého zdrojáku Pouze pro registrované

 

Pro ověření prosím zaškrtněte pravdivá tvrzení:
Registrovaní uživatelé se tímto zdržovat nemusí. Zaregistrovat se

Nehodlám dodržovat pravidla
Nejsem člověk
Jsem robot
Píši proto, že zpráva má užitečnou hodnotu