Mam plik php file_put_contents, więc;

file_put_contents($file, $data . "\n", FILE_APPEND|LOCK_EX);

Kiedy zapisuje do mojego pliku test.txt , dane wyjściowe zawierają liczbę bajtów zapisanych w pliku .

a:4:{s:4:"imię";s:4:"aaaa";s:5:"e-mail";s:10:"aaa@gmx.de";s:7:"wiadomość";s :27:"mm";s:8:"datagodzina";s:22:"11.10.2018 17:20:35";}

Chcę , aby dane TYLKO zapisywały BEZ liczby bajtów , każdy może mi pomóc , dzięki !

Mój kod;

<?php

header('Content-Type: text/html; Charset=utf-8');
mb_internal_encoding('UTF-8');
date_default_timezone_set('Europe/Berlin');
error_reporting(E_ALL);


class ClassProveContakt3 
{

  private $Name;
  private $Email;
  private $Message;
  private $PostOK;
  private $DateTime;
  private $items; 


   function __construct() 
   {


      $this -> DateTime = date('m/d/Y h:i:s a');  
      $this -> items = ['Name', 'Email', 'Message']; 

      $flag = true;
      foreach ( $this -> items as $key ) {  
                   if ( empty ( $_POST[$key] ) )  {
                     $flag = false;    
                   } else {    
                     $this -> $key = trim( filter_var( $_POST[$key], FILTER_SANITIZE_STRING ) );
                    }    
       }         
     $this -> PostOk = $flag; 
 }





 function ShowForm() 
 {
 ?>
   <form method="POST">
     <label for="name">Name </label>
     <input type="text" id="name" name="Name" value="<?= $this->Name ?>">
     <label for="email">E-mail </label>
     <input type="email" id="email" name="Email" value="<?= $this->Email     

      ?>">
     <br><br>
     <label> Message: <br>
       <textarea cols="45" rows="6" name="Message"><?= $this->Message ?></textarea>      
     </label>
     <br><br>
     <input  type="submit" name="post" value="POST COMMENT" id="comment">
   </form>
 <?php
 }




 function PostOkT() 
 {

   if ($this -> PostOK) 
   {
      return;

   }     
   if (empty($this->Name) ||  empty($this->Email) || empty($this->Message))
   {

     echo "<br>" . "<b>" . "<h3>*** Please enter all required fields ***</h3>" . "</b>";  


   } 
   else 
   {

        $file = "test.txt"; 

        $datetime = date('m/d/Y h:i:s a', time());
        $data = array("name" => $this->Name, "email" => $this->Email, "message" => $this->Message, "datetime" => $datetime);           


        $data = serialize($data);
        file_put_contents($file, $data . "\n", FILE_APPEND|LOCK_EX);

        $messages = file($file);

        foreach ($messages as $value) {
            $data = unserialize($value);


                 echo "<br>"

                       . "<b>From: </b>" . htmlspecialchars( $data["name"])
                       . "<b> at: </b>" . htmlspecialchars( $data["datetime"])
                       . "<br><br>" . htmlspecialchars( $data["email"])                                     
                       . "<br><br>" . htmlspecialchars( $data["message"])
                       . "<br><hr>";

                   }

                }




    }

}       

?>
-2
3edf1w 10 listopad 2018, 19:58

1 odpowiedź

Najlepsza odpowiedź

@ Nigel Ren , muszę zrobić to, co mi każesz ... z json .. , muszę spróbować bez Json , ale ponieważ jestem bardzo nowy w PHP , nie wiem, jak to zrobić ....

Może tytuł mojego pytania, php file_put_contents bez zapisanych bajtów, nie jest najlepszy....ponieważ nie jest to odpowiedzialność według liczby moich bajtów, a raczej funkcja serializacji. .... . Być może najlepszym tytułem byłby , PHP – Jak wyświetlacz zwraca wartość bez liczby bajtów i bez Json .

Ponieważ w kodzie mam tablicę

$data = array("name" => $this->Name, "email" => $this->Email, "message" => $this->Message, "datetime" => $datetime);

Powinien użyć funkcji serialize , dlatego otrzymuję dane wyjściowe z liczbą bajtów .

Funkcja serializacji

Tablica lub obiekt PHP lub inna złożona struktura danych nie może być transportowana, przechowywana lub w inny sposób używana poza uruchomionym skryptem PHP. Jeśli chcesz zachować tak złożoną strukturę danych poza pojedynczym uruchomieniem skryptu, musisz ją serializować. Oznacza to po prostu umieszczenie struktury w "niższym wspólnym mianowniku", który może być obsługiwany przez rzeczy inne niż PHP, takie jak bazy danych, pliki tekstowe, gniazda. Standardowa funkcja PHP serialize jest po prostu formatem do wyrażenia takiej rzeczy, serializuje strukturę danych w reprezentację ciągu znaków, która jest unikalna dla PHP i może zostać odwrócona do obiektu PHP za pomocą unserialize. Istnieje jednak wiele innych formatów, takich jak JSON lub XML.

Z tutaj (Pierwsza odpowiedź..)

Tak więc , ponieważ nie otrzymam moich zwracanych wartości wraz z liczbą bajtów i nie wiem, co robić tylko z PHP, używam Json .W moim kodzie mam tylko zmienić >else , reszta z kodu pozostaje identyczna .

else 
{

      $file = "test.txt"; 

      $datetime = date('m/d/Y h:i:s a', time());
      $data = array("name" => $this->Name, "email" => $this->Email, "message" => $this->Message, "datetime" => $datetime);


      $data = json_encode($data);
      file_put_contents($file, $data . "\n", FILE_APPEND|LOCK_EX);


      $messages = file($file);

      foreach ($messages as $value) {
           $data = json_decode($value, true);


                  echo "<br>"

                             . "<b>From: </b>" . htmlspecialchars( $data["name"])
                             . "<b> at: </b>" . htmlspecialchars( $data["datetime"])
                             . "<br><br>" . htmlspecialchars( $data["email"])                                     
                             . "<br><br>" . htmlspecialchars( $data["message"])
                             . "<br><hr>";

      }

}

I teraz moje wyjście z mojego pliku test.txt

{"name":"aaaa","email":"aaa@gmx.de","message":"mmmmmmmmmmmmmmmmmmmmmmmmmm","datetime":"11.12.2018 14:49:46"}

0
3edf1w 17 listopad 2018, 14:09