Autor Zpráva
Milan Sobotka
Profil
Dobrý den. Potřeboval bych poradit. Nejsem expert, takže potřebuji poradit a nikde to nemohu najít.
Mohl byste mi napsat někdo nějaký kód, který by vypsal čas, kdy byl formulář odeslán. Je jedno v čem to bude. Hlavně jednoduše. Hlavně aby se ten čas neměnil. Předem děkuji.


Například jak je to tady... "Založeno před 9 minutami"
scheras
Profil *
Ten čas si musíte někam uložit. Nejčastěji se k tomu používají databáze. Vypsat ho pak můžete v jakémkoliv formátu.
Milan Sobotka
Profil
Aha. Ale nevíte nejaký kód třeba čístě jen v javascriptu nebo php? Bez databáze?
Kubo2
Profil
Milan Sobotka:
Napríklad takýto skript v PHP?
<?php
# skript.php
$menoSuboru = NULL;
if(isset($_POST['odoslany'])) {
  $i = 0;
  $menoSuboru = NULL;
  while(++$i) {
    if(!file_exists($menoSuboru = "./subor$i.txt"))
      break;
  }
  unset($i); // hodnota $i môže dosiahnuť pomerne vysoké hranice
  file_put_contents($menoSuboru, date("Y-m-d H:i:s"));
  header("Location: $menoSuboru", true, 302);
  exit;
}
?>
<form action="" method="post">
  <input name="odoslany" value="Odošli ma!">
</form>
Milan Sobotka
Profil
Jó. To je přesně ono... Jen to ještě zkusím přidat do toho, kam potřebuju. :D


Akorát ono to vždy vytvoří nový soubor. Nejde to nejak, aby je to nevytvářelo? Jen aby se to vypsalo?


Anebo tady je ten můj zázrak. :D

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <link href="/styl/styl.css" rel="stylesheet" type="text/css" />
  <link rel="shortcut icon" href="favicon.ico">
  <link href="slider.css" rel="stylesheet" type="text/css" /> 
  <title></title>
  </head>
  <body>
      <table border="0px" align="right"><tr><td><a href="register.php">Registrace </a></td><td width="15px"></td><td > <a href="login.php"> Přihlášení</a></td><td width="30px"></td></tr></table><br><br>
      <table align="center"><tr><td>
      <div style="padding:15px;width:1050px;height:auto;background-color:white;border-radius:3px;">
    <?php 
      $delimeter="/*f1f*\\"; // delimeter můžeš ponechat 
    $cesta_souboru="komentare.txt"; // cesta k souboru TXT, do kterého se budou daný komentáře ukládat
    $umisteni_scriptu=""; //umístění tohoto souboru
    if(!file_exists($cesta_souboru)){ // pokud neexistuje soubor do kterého se má zapisovat, tak ho vytvoří
      file_put_contents($cesta_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 
         file_put_contents($cesta_souboru, str_replace("\n","",htmlspecialchars($_POST['jmeno'])).$delimeter. str_replace("\n","",htmlspecialchars($_POST['email'])).$delimeter. str_replace("\n","",nl2br(htmlspecialchars($_POST['text'])))."\n", FILE_APPEND); 
      } else {
        echo "<b>Nevyplnili jste žádné pole...</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
        if($rozdeleni_radky[$i]!=""){
          $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>Jméno:</b> ".$koment['jmeno']."<br>";     // jednoduché vypsání 
            echo "<b>E-mail:</b> ".$koment['email']."<br>";
            echo "<b>Komentář:</b> ".$koment['text']."<br>";
            echo "<hr><br>";
        } 
      }
    } else {
     
    }        

  ?>  
    <div style="padding:15px;width:1020px;height:auto;background-color:#9ADD32;border-radius:3px;">
    <form method="POST">
        Jméno:<br><input style="width:300px;" type="text" name="jmeno"><br>
        E-mail:<br><input style="width:300px;" type="email" name="email"><br>
        Komentář:<br><textarea style="width:1018px;height:250px;" name="text"></textarea><br>
      <input type="submit" value="Přidat komentář" name="komentar">  
      <input type="reset" value="Napsat komentář znovu">  
    </form>
      </div>
      </div></td></tr></table>
      
     
  </body>
</html>
A potřeboval bych dát, to co jsi mi poslal, tam do těch ech.
Kubo2
Profil
Milan Sobotka:
Akorát ono to vždy vytvoří nový soubor. Nejde to nejak, aby je to nevytvářelo? Jen aby se to vypsalo?
Dá sa to ukladať stále do rovnakého súboru, ale nie, nejde iba o to, aby sa to vypísalo, keď chceš ten dátum mať nemenný, musíš si ho niekam uložiť. Tým úložišťom je ten súbor.

Anebo tady je ten můj zázrak. :D
Celkom zaujímavý skript. Akurát mi tam jedna vec prekáža - to prázdne else na konci. Ale inak funkčný.
Milan Sobotka
Profil
Jo. to asi vyhodim. A jak by tam šel dát ten tvůj kód? Jestli tomu trochu rozumíš. :D
Kubo2
Profil
Milan Sobotka:
A jak by tam šel dát ten tvůj kód?
Riadok 23, treba do druhého parametru funkcie file_put_contents pridať na koniec (pred čiarku):
. $delimiter . date("Y-m-d H:i.s")
výsledný riadok 23 teda bude vyzerať nasledovne:
file_put_contents(
  $cesta_souboru,
  str_replace("\n", "", htmlspecialchars( $_POST['jmeno'] )) . $delimeter
  . str_replace("\n", "", htmlspecialchars( $_POST['email'] )) . $delimeter
  . str_replace("\n", "", nl2br( htmlspecialchars( $_POST['text'] ) )) . $delimiter
  . date("Y-m-d H:i.s")
  . "\n",
  FILE_APPEND);
a na riadku 34 do poľa uložiť jeden prvok naviac:
, "datum" => $roztrzeni[3]

Ak by si chcel dátum a čas inak naformátovať, môžeš použiť date("formát dátumu a času", strtotime($roztrzeni[3]));.

Pre formátovacie možnosti dátumu a času funkciou date() v PHP viď http://php.net/date.
Milan Sobotka
Profil
jj. dekuji. ted to jdu teda zkusit. :D


Jo. To je přesně ono. Moc děkuji. Jen ještě taková malá chybka. Ten čas se ukáže v tý zprávě. Kam to mám dát, aby to bylo pred vším? Tady je na to odkaz: http://www.web-jaknato.8u.cz a tady je ten kod.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <link href="/styl/styl.css" rel="stylesheet" type="text/css" />
  <link rel="shortcut icon" href="favicon.ico">
  <link href="slider.css" rel="stylesheet" type="text/css" /> 
  <title></title>
  </head>
  <body>
      <table border="0px" align="right"><tr><td><a href="register.php">Registrace </a></td><td width="15px"></td><td > <a href="login.php"> Přihlášení</a></td><td width="30px"></td></tr></table><br><br>
      <table align="center"><tr><td>
      <div style="padding:15px;width:1050px;height:auto;background-color:white;border-radius:3px;">
    <?php 
      $delimeter="/komentar\\"; // delimeter můžeš ponechat 
    $cesta_souboru="komentare.txt"; // cesta k souboru TXT, do kterého se budou daný komentáře ukládat
    $umisteni_scriptu=""; //umístění tohoto souboru
    if(!file_exists($cesta_souboru)){ // pokud neexistuje soubor do kterého se má zapisovat, tak ho vytvoří
        file_put_contents($cesta_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 
         file_put_contents(
  $cesta_souboru,
  str_replace("\n", "", htmlspecialchars( $_POST['jmeno'] )) . $delimeter
  . str_replace("\n", "", htmlspecialchars( $_POST['email'] )) . $delimeter
  . str_replace("\n", "", nl2br( htmlspecialchars( $_POST['text'] ) )) . $delimiter
  . date("Y-m-d H:i.s")
  . "\n",
  FILE_APPEND);
      } else {
        echo "<b>Nevyplnili jste žádné pole...</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
        if($rozdeleni_radky[$i]!=""){
          $roztrzeni=explode($delimeter,$rozdeleni_radky[$i]); // roztržení dle delimetru
          $koment=array("datum" => $roztrzeni[3] , "jmeno" => $roztrzeni[0] , "email" => $roztrzeni[1], "text" => $roztrzeni[2]); // pro hezčí vypisování přidáno do array 
            echo "<b>Jméno:</b> ".$koment['jmeno']."<br>";     // jednoduché vypsání 
            echo "<b>E-mail:</b> ".$koment['email']."<br>";
            echo "<b>Komentář:</b> ".$koment['text']."<br>";
            echo "<hr><br>";
        } 
      }
    } else {
     
    }        
  
  
  ?>  
    <div style="padding:15px;width:1020px;height:auto;background-color:#9ADD32;border-radius:3px;">
    <form method="POST">
        Jméno:<br><input style="width:300px;" type="text" name="jmeno"><br>
        E-mail:<br><input style="width:300px;" type="email" name="email"><br>
        Komentář:<br><textarea style="width:1018px;height:250px;" name="text"></textarea><br>
      <input type="submit" value="Přidat komentář" name="komentar">  
      <input type="reset" value="Napsat komentář znovu">  
    </form>
      </div>
      </div></td></tr></table>
      
     
  </body>
</html>



teda ten odkaz je http://www.web-jaknato.8u.cz/komentare.php
Kubo2
Profil
Milan Sobotka:
Mrkni sa do toho súboru http://www.web-jaknato.8u.cz/komentare.txt a následne na riadok 26 v tom tvojom skripte. Názov premennej s oddeľovačom je $delimeter, na riadku 26 je však $delimiter. Príčina je, že sa ti ten dátum uloží bez toho delimiteru, a teda je to súčasťou tela správy.
Milan Sobotka
Profil
Zkusím to. Dík. :D


Ja teda nevím. Teď to nefunguje ten čas už vůbec. :( Nějak si s tím nevím rady. :( :D
Milan Sobotka
Profil
Ja sem ten "delimiter" opravil a pořád nic. Ještě jednou posílám celý kód. Ja jsem buďto blbej, :D nebo už mi to na konci týdne nemyslí. :D

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <link href="/styl/styl.css" rel="stylesheet" type="text/css" />
  <link rel="shortcut icon" href="favicon.ico">
  <link href="slider.css" rel="stylesheet" type="text/css" /> 
  <title></title>
  </head>
  <body>
      <table border="0px" align="right"><tr><td><a href="register.php">Registrace </a></td><td width="15px"></td><td > <a href="login.php"> Přihlášení</a></td><td width="30px"></td></tr></table><br><br>
      <table align="center"><tr><td>
      <div style="padding:15px;width:1050px;height:auto;background-color:white;border-radius:3px;">
    <?php 
      $delimeter="/komentar\\"; // delimeter můžeš ponechat 
    $cesta_souboru="komentare.txt"; // cesta k souboru TXT, do kterého se budou daný komentáře ukládat
    $umisteni_scriptu=""; //umístění tohoto souboru
    if(!file_exists($cesta_souboru)){ // pokud neexistuje soubor do kterého se má zapisovat, tak ho vytvoří
        file_put_contents($cesta_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 
         file_put_contents(
  $cesta_souboru,
  str_replace("\n", "", htmlspecialchars( $_POST['jmeno'] )) . $delimeter
  . str_replace("\n", "", htmlspecialchars( $_POST['email'] )) . $delimeter
  . str_replace("\n", "", nl2br( htmlspecialchars( $_POST['text'] ) )) . $delimeter
  . date("Y-m-d H:i.s")
  . "\n",
  FILE_APPEND);
      } else {
        echo "<b>Nevyplnili jste žádné pole...</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
        if($rozdeleni_radky[$i]!=""){
          $roztrzeni=explode($delimeter,$rozdeleni_radky[$i]); // roztržení dle delimetru
          $koment=array("datum" => $roztrzeni[3] , "jmeno" => $roztrzeni[0] , "email" => $roztrzeni[1], "text" => $roztrzeni[2]); // pro hezčí vypisování přidáno do array 
            echo "<b>Jméno:</b> ".$koment['jmeno']."<br>";     // jednoduché vypsání 
            echo "<b>E-mail:</b> ".$koment['email']."<br>";
            echo "<b>Komentář:</b> ".$koment['text']."<br>";
            echo "<hr><br>";
        } 
      }
    } else {
     
    }        
  
  
  ?>  
    <div style="padding:15px;width:1020px;height:auto;background-color:#9ADD32;border-radius:3px;">
    <form method="POST">
        Jméno:<br><input style="width:300px;" type="text" name="jmeno"><br>
        E-mail:<br><input style="width:300px;" type="email" name="email"><br>
        Komentář:<br><textarea style="width:1018px;height:250px;" name="text"></textarea><br>
      <input type="submit" value="Přidat komentář" name="komentar">  
      <input type="reset" value="Napsat komentář znovu">  
    </form>
      </div>
      </div></td></tr></table>
      
     
  </body>
</html>
Davex
Profil
Milan Sobotka:
Teď to nefunguje ten čas už vůbec.
Pokud jde jen o vypsání data před komentářem, tak přidej mezi řádky 40 a 41 kód

echo "<b>Datum:</b> ".$koment['datum']."<br>";

Jinak pro uložení komentářů by asi bylo vhodnější použít CSV (fputcsv(), fgetcsv()) nebo serializované pole (serialize(), unserialize()), ale to záleží na vkusu každého soudruha.
Milan Sobotka
Profil
Děkuji. Jdu to zkusit. :D


Jo. To je přesně, jak jsem si představoval. Jenom ještě. Nevíte, jak vytáhnout údaj z databáze, takže když bude přihlášený, tak to misto toho od napise od: jmeno z databaze. Asi tam musi bejt nejakej connect. Ten mám ale jak by mělo vypadat to echo?
Milan Sobotka
Profil
Ještě bych měl jeden dotaz. :D Jak bych udělal aktualizaci stranky, aniž by to narušilo psaní do té textarey? :D
Kubo2
Profil
Milan Sobotka:
Skús pomocou js priebežne ukladať obsah príspevku do localStorage. Takisto môžeš pomocou js aj aktualizovať stránku, aby sa tým bez javascriptu len tak nevymazal príspevok.
Milan Sobotka
Profil
No to jsem přiliž nepochopil. A neexistuje nějaký skript, co tu stránku aktualizuje, ale člověk může psát dál v textaree?
Kubo2
Profil
Milan Sobotka:
Môžeš využiť AJAX.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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