ITnetwork summer 2020
80 % bodů zdarma na online výuku díky naší Letní akci!
Pouze tento týden sleva až 80 % na e-learning týkající se PHP

Diskusia v PHP bez použitia databázy

Tento článok vám ukáže, ako realizovať veľmi jednoduchú diskusiu v PHP bez použitia databázy. To môže byť výhodné najmä vtedy, keď s databázou ešte neviete pracovať.

Ako prvý si vytvoríme nový PHP súbor, v našom prípade diskuze.php.

Formulár:

Klasický formulár
, ktorým budeme odosielať dáta. Aby sme k nim po odoslaní mohli pristúpiť, musíme zadať metódu, ktorou sa odošlú - v našom prípade POST. A súbor kam sa odošlú - ak chceme súčasný tag action nešpecifikuje alebo ho nastavíme na "". Pridáme tagy pre vkladanie informácií,
<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 súboru

Tento výukový obsah pomáhajú rozvíjať nasledujúce firmy, ktoré možno hľadajú práve teba!

Spracovanie bude prebiehať na začiatku scriptu. Najprv overíme, či používateľ stláča tlačidlo (v poste je input s názvom odoslať, ktorý sme si nastavili vyššie). Potom dáta zapíšeme do súboru pomocou fopen a fwrite. Nakoniec presmerujeme opäť na diskuze.php, tým sa stratí dáta v POST, inak by po stlačení F5 došlo opäť k odoslaniu toho istého príspevku druhýkrát.

$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 diskusia

Ted potrebujeme vložiť súbor do diskusie, to urobíme jednoducho pomocou 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); ?>

Tiež nezabudnite vytvoriť v rovnakom adresári súbor diskuze.txt alebo nastaviť zapisovať práva na 777 !!! (Inak to nebudefungovat)


 

Všetky články v sekcii
Práca so súbormi v PHP
Článok pre vás napísal jakub
Avatar
Ako sa ti páči článok?
Ešte nikto nehodnotil, buď prvý!
Autor se věnuje programování v HTML,CSS a nově i v jazyce LabView
Aktivity (1)

 

 

Komentáre

Avatar
mkub
Redaktor
Avatar
mkub:27.1.2014 0:14

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

 
Odpovedať
27.1.2014 0:14
Avatar
jakub
Nevyplnené
Avatar
jakub:28.1.2014 22:40


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

 
Odpovedať
28.1.2014 22:40
Avatar
mkub
Redaktor
Avatar
mkub:29.1.2014 2:19

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...

 
Odpovedať
29.1.2014 2:19
Avatar
iqbigbang
Člen
Avatar
iqbigbang:23.1.2016 19:42

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

Odpovedať
23.1.2016 19:42
Say me, why not?
Avatar
Tonda Kozák
Člen
Avatar
Odpovedá na iqbigbang
Tonda Kozák:23.1.2016 20:26

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

 
Odpovedať
23.1.2016 20:26
Tento výukový obsah pomáhajú rozvíjať nasledujúce firmy, ktoré možno hľadajú práve teba!
Avatar
Richard
Člen
Avatar
Odpovedá na Tonda Kozák
Richard:23.1.2016 20:43

raději touch()

Odpovedať
23.1.2016 20:43
$action = $_GET['Life']; | Když dáš mínus, napiš proč!
Avatar
Tonda Kozák
Člen
Avatar
Odpovedá na Richard
Tonda Kozák:23.1.2016 20:50

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()?

 
Odpovedať
23.1.2016 20:50
Avatar
iqbigbang
Člen
Avatar
iqbigbang:24.1.2016 20:29

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

Odpovedať
24.1.2016 20:29
Say me, why not?
Avatar
Odpovedá na iqbigbang
Neaktivní uživatel:24.1.2016 20:33

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);
}
Odpovedať
24.1.2016 20:33
Neaktivní uživatelský účet
Avatar
David Hynek
Redaktor
Avatar
David Hynek:24.1.2016 21:59

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

Odpovedať
24.1.2016 21:59
Čím víc vím, tím víc věcí nevím.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!