Diskuze v PHP bez použití databáze

PHP Práce se soubory Diskuze v PHP bez použití databáze

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)


 

  Aktivity (1)

Článek pro vás napsal jakub
Avatar
Autor se věnuje programování v HTML,CSS a nově i v jazyce LabView

Jak se ti líbí článek?
Celkem (2 hlasů) :
4.54.54.54.54.5


 



 

 

Komentáře
Zobrazit starší komentáře (64)

Avatar
mkub
Redaktor
Avatar
mkub:

jakub, kto tu pisal o zapisovych pravach? a okrem toho, nikto taketo restriktivne prava nepouziva...

 
Odpovědět 27.1.2014 0:14
Avatar
jakub
Neregistrovaný
Avatar
jakub:


"jak říkal mkub(ci php parsuje), poté zkus ..."

 
Odpovědět 28.1.2014 22:40
Avatar
mkub
Redaktor
Avatar
mkub:

zapisove prava nie je potrebne nastavit na 777, ale staci nastavit na 770 a nastavit vlastnika adresara na uzivatela pod ktorym bezi webovy server...
alebo este lepsie nastavit umask adresara na 007, cim sa automaticky nastavia prava na 770 pre novo vytvoreny subor a zabezpeci sa aj bezpecnost toho adresara...
ale vymazat ho moze iba root, nikto iny...

 
Odpovědět 29.1.2014 2:19
Avatar
iqbigbang
Člen
Avatar
iqbigbang:

chtěl jsem se zeptat...
Když budu zapisovat do souboru, který neexistuje, vygeneruje ho php automaticky?
Pokud ne, existuje metoda na jeho vytvoření?

Odpovědět 23. ledna 19:42
Say me, why not?
Avatar
Tonda Kozák
Člen
Avatar
Odpovídá na iqbigbang
Tonda Kozák:

Když budeš zapisovat, tak ne. Ale před zápisem si ho musíš nejdříve otevřít (třeba funkcí fopen($soubor, $mod)).
A tahle funkce, když soubor neexistuje, ho vytvoří - většinou, záleží na druhém parametru.
http://php.net/…on.fopen.php

 
Odpovědět 23. ledna 20:26
Avatar
Richard
Člen
Avatar
Odpovědět 23. ledna 20:43
$action = $_GET['Life']; | Když dáš mínus, napiš proč!
Avatar
Tonda Kozák
Člen
Avatar
Odpovídá na Richard
Tonda Kozák:

Proč? (Nevím, ptám se.)

iqbigbang chce do souboru zapisovat, před tím ho však musí otevřít. Proč je lepší použít touch() a pak fopen()?

 
Odpovědět 23. ledna 20:50
Avatar
iqbigbang
Člen
Avatar
iqbigbang:

jak můžu přečíst obsah souboru aniž bych ho vypsal?

Odpovědět 24. ledna 20:29
Say me, why not?
Avatar
Filip Šohajek
Redaktor
Avatar
Odpovídá na iqbigbang
Filip Šohajek:

Použíj funkci file_get_contents :

<?php
$obsah = file_get_contents("Název souboru");
if ($obsah === false) {
    echo "Čtení souboru se nezdařilo";
    exit (1);
}
 
Odpovědět 24. ledna 20:33
Avatar
David Hynek
Redaktor
Avatar
David Hynek:

SQLite ne skoro jako databáze, doporučuji...

Odpovědět  +1 24. ledna 21:59
Čím víc vím, tím víc věcí nevím.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 74. Zobrazit vše