Autor Zpráva
noko
Profil
Dobrý den
potřebuji pomoct,
nevím jak udělat návštěvní knihu nebo komentáře bez databáze
nejlepší by to bylo v js.
nevíte někdo?
díky předem za odpovědi.
sitole
Profil
Odepisuji noko..
Ahoj JS vůbec nepotřebuješ. Stačí pouze Hledat.
Věci jako komentáře se dělají pomocí PHP. Tady jsem ti našel Definici JS.

"Jsou jím obvykle ovládány různé interaktivní prvky GUI (tlačítka, textová políčka) nebo tvořeny animace a efekty obrázků."
Komentáře se zapisují do textového souboru. (Doporučuji ošetřit proti vkládání kodu.)

Komentáře se zapisují do log.txt. (Můžete případně přenastavit)

<?php 
    $delimeter="/*f1f*\\"; // delimeter můžeš ponechat 
    $cesta_souboru="log.txt"; // cesta k souboru TXT, do kterého se budou daný komentáře ukládat
    $umisteni_scriptu=""; //umístění tohoto souboru
    if(isset($_POST['komentar'])){  //pokud kliknou na odeslat tak se to začne zpracovávat
      if(!in_array("",array($_POST['jmeno'],$_POST['email'],$_POST['text']))){   //zkontroluje, zda vyplnili všechny položky 
        $soubor=file_get_contents($cesta_souboru);  // načtu si soubor s předchozíma komentářema 
        $zapis=$soubor."\n".$_POST['jmeno'].$delimeter.$_POST['email'].$delimeter.str_replace(PHP_EOL, '<br>', $_POST['text']);
        file_put_contents($cesta_souboru, $zapis); //přepíšu soubor 
      } else {
        echo "<b>Nemáte zadané všechny hodnoty.</b><br>"; // Pokud nejsou zadané všechny hodnoty, vypíše to tuto hlášku.
      }    
    }
    $komentare=file_get_contents($cesta_souboru); // načtení souboru do proměnné
    $rozdeleni_radky=explode("\n",$komentare); // rozdělení dle řádků => na jednotlivé příspěvky
    if(count($rozdeleni_radky)!=0){ // pokud je v něm víc jak jeden komentář
      for($i=0;$i<count($rozdeleni_radky);$i++){ // cyklus, pro všechny komentáře
        $roztrzeni=explode($delimeter,$rozdeleni_radky[$i]); // roztržení dle delimetru
        $koment=array("jmeno" => $roztrzeni[0] , "email" => $roztrzeni[1], "text" => $roztrzeni[2]); // pro hezčí vypisování přidáno do array 
        echo "<b>".$koment['jmeno']."</b><br>";     // jednoduché vypsání 
        echo "".$koment['email']."<br>";
        echo "".$koment['text']."";
        echo "</br>";
      }
    } else {
      echo "Nebyl zatím zadán žádný komentář"; // vypsání hlášky, že zatím nebyl zadán žádný komentář
    }                                       
  ?>

<form method="POST">
<input type="text" value="Jmeno" name="jmeno"><br>
<input type="email" value="Email" name="email"><br>
<textarea name="text"></textarea><br>
<input type="submit" value="Odeslat" name="komentar">
</form>
Marschmallow
Profil
noko:
Můžeš použít i můj starší skript: tomasjares.com/projekty/komentare.zip.

Jelikož jsem to psal už dávno, tak jsem ještě neuměl pořádně zaheslovat administraci...
sitole
Profil
Marschmallow:
Ahoj, já to nepotřebuji. Dokáži si napsat vlastní "systém" pro komentáře.
Btw: Odkaz ti nefunguje.
noko
Profil
[#2] sitole
Díky moc už mi to funguje!
Jan Kozák
Profil
Že Marschmallow odkazuje na odpad, už dávno víme, protože jsem mu příspěvky s odkazy na jeho rádoby skripty z Diskuse mazal, ale k tvému systému, sitole, bych měl pár poznámek:
- Již jsem tě upozorňoval, že ty prázdné řetězce ve skriptu jen ruší.
- Značka </br> neukončuje znak konce řádku, ač by se to tak mohlo zdát.
- Není mi jasné, co udělá například tato část: echo "Nebyl zatím zadán žádný komentář"; // vypsání hlášky, že zatím nebyl zadán žádný komentář Nemohl bys třeba vysvětlit do textu, co ten příkaz má vlastně dělat? :)
Jsem rád, že se snažíš pomoci, ale nepředávej ostatním své zlozvyky, naopak se jich aktivně snaž zbavit.

Pokud k obsahu souboru pouze něco přidáváš, je neefektivní celý obsah načítat do paměti, kousek přidat a pak to celé znovu ukládat. U funkce file_put_contents lze jako 3. parametr zadat příznak FILE_APPEND. Pokud je soubor větší, můžeš takto výrazně ušetřit RAMku. Také se tím omezí prodleva mezi načtením souboru a jeho uložením, během které může soubor načíst jiný uživatel, vinou čehož přijdeš o jeden příspěvek. (Uživatel A načte obsah, uživatel B načte obsah, uživatel A připojí svůj komentář a uloží soubor, uživatel B připojí komentář k obsahu načtenému ve své paměti a uloží, komentář uživatele A bude přepsán, zmizí.)
sitole
Profil
[#6] Jan Kozák
Budu se toto snažit opravit. Děkuji za upozornění :)
Mohu se zeptat špatné je obsaženo v tom zipu? (Nestahoval jsem)

[#3] Marschmallow Jinak prosím uprav text.. Dříve tam bylo napsané Sitole. (Ted to nedává smysl)
Keeehi
Profil
sitole:
Jan Kozák toho napsal dost ale ne všechno. Tak já doplním další problémy.
- když ti do jména propašuji znak nového řádku (což je velmi jednoduché), rozbiju ti tím tvůj script a ten začne tvořit undefined index chyby.
- pokud do komentáře napíšu /*f1f*\ tak vše co bude za tím nebude nikdy zobrazeno
- no a asi ten nejzávažnější problém je, že umožňuje perzistentní XSS útok což je velmi závažný problém.

Takže zkus prosím příště radit tak, aby jsi neublížoval ostatním. Pokud noko ten tvůj kód použil a jelikož mu "funguje" tak už se do tohoto vlákna třeba nevrátí, tak se nedozví o problémech dříve, než mu na webu někdo způsobí bordel. A to už je pozdě. Nedat žádnou radu je mnohdy lepší než dát napůl dobrou radu. Tak prosím příště před posláním nějakého kódu zvaž, zda nemůže náhodou nadělat více škody než užitku.

Pokud víš, že ten kód není bezpečný, protože se jedná jen třeba o kostru ilustrující možné řešení a zabývání se bezpečností by akorát odvádělo pozornost, tak na to vždy upozorní!
sitole
Profil
Keeehi:
O této chybě jsem napsal.. (Chyba bezpečnosti) Napsal jsem, že jde pouze o surový kod bez záruky bezpečí!
noko
Profil
Keeehi:
Nevadí už jsem si napsal svůj.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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