Autor Zpráva
sitole
Profil
Dobrý den, dřível jsem hledal možnost tvorby vlastních komentářů.
Všechno fungovalo dokonale! Ale když dá uživatel ENTER (tedy chce napsal na další řádek)
Vympíše se kod asi takto

Jmeno: Johanka
Email: johankaprogramatorka@phpjeslozite.html
Text: Ahoj, opravdu super web

Jmeno: Ale budeš potřebovat opravit ten komentář :D
Email:
Text

Komentáře jsem přetvořil z jedné diskuse.
VIZ
PHP komentáře pod článek


Jak tento problém vyřešit?



Můj kod na webu

 <p style="padding-left:183px"><?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.$_POST['text']; //přidám starý text + si dám delimetr mezi jednotlivé nové stringy
        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 "<p style=;padding-left:183px;><b>Jmeno:</b>  ".$koment['jmeno']."<br>";     // jednoduché vypsání 
        echo "<p style=;padding-left:183px;><b>Email:</b> ".$koment['email']."<br>";
        echo "<p style=;padding-left:183px;><b>Text:</b> ".$koment['text']."";
        echo "<p style=;padding-left:183px;></br>";
      }
    } else {
      echo "Nebyl zatím zadán žádný komentář"; // vypsání hlášky, že zatím nebyl zadán žádný komentář
    }                                       
  ?>
Tori
Profil
sitole:
Asi nejjednodušší by bylo při ukládání použít nl2br.
Anebo vyměnit oddělovač komentářů s oddělovačem jednotlivých polí, tj. /*f1f*\ mezi komentáři, a pak ukládat $jmeno . "\n" . $email . "\n" . $text. explode má 3.parametr, který byste využil při robrazení.
sitole
Profil
Asi jsem to trošku nepobral..
Co tedy budu musez upravit :)
Fisir
Profil
Reaguji na sitole:
Řádek 8 nahraď za:
$zapis=$soubor."\n".$_POST['jmeno'].$delimeter.$_POST['email'].$delimeter.nl2br($_POST['text'], false);
sitole
Profil
Všechno stejné.. Stále to píše ten další řádek v JMENO
Fisir
Profil
Reaguji na sitole:
Omlouvám se, moje chyba, nl2br() stejně zachovává řádkové zlomy. Použij tedy:
$zapis=$soubor."\n".$_POST['jmeno'].$delimeter.$_POST['email'].$delimeter.str_replace(PHP_EOL, '<br>', $_POST['text']);
sitole
Profil
Ha! Super! Děkuji moc :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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