【问题标题】:php - missing old data when insert new dataphp - 插入新数据时丢失旧数据
【发布时间】:2019-03-14 13:17:15
【问题描述】:

我有两个 File , index.phpClassProveContakt.php 。我必须在我的 ClassProveContakt.php 上构建一个表单数据,在 index.php 中显示数据和 Webformular 。每次写入数据(姓名、电子邮件和消息)时都会显示它,但是如果我写入新数据,则旧日期丢失并更改为我的新数据 ....

我的问题,我怎样才能将所有新旧数据保留在 index.php 上。

ClassProveContakt.php 代码:

<?php

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

class ClassProveContakt
{

  private $Name;
  private $Email;
  private $Message;



       function __construct()
       {

          $this->Name="";
          $this->Email="";
          $this->Message="";

       }

       function Form()
       {

           echo('<table>');


                echo('<label for="name">Name </label>');

                echo('<input type="text" name="Name" value="'.$this->Name.'">');


                echo('<label for="email"> Email </label>');

                echo('<input type="email" value="'.$this->Email.'" name="Email" ');



               echo('<tr>');

                   echo('<td>');

                    echo('<br>');

                      echo('<label> Message: <br><textarea cols="45" rows="6" name="Message">'.$this->Message.'</textarea></label>');

                       echo('<br><br>');

                       echo('<input  type="submit" name="post" value="POST COMMENT" id="comment">');


               echo('</td>');



             echo('</tr>');

        echo('</table>');


   }


   function PostOk()

   {

     if(empty($_POST['Name'])  || 
       empty($_POST['Email']) || 
       empty($_POST['Message'])) 
    {


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



        $this->Name=$_POST["Name"];
        $this->Email=$_POST["Email"];
        $this->Message=$_POST["Message"];


    }

    else {

        $name = filter_input( INPUT_POST, 'Name', FILTER_SANITIZE_STRING);
        $email = filter_input(INPUT_POST, 'Email', FILTER_SANITIZE_STRING);
        $message = filter_input(INPUT_POST, 'Message', FILTER_SANITIZE_STRING);

        $datetime = date('m/d/Y h:i:s a', time());

        echo "<br>"

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

        }  

  }

} 

?>

index.php 代码:

<?php

 include 'ClassProveContakt.php';
 header('Content-Type: text/html; Charset=utf-8');
 mb_internal_encoding('UTF-8');
 date_default_timezone_set('Europe/Paris');
 error_reporting(-1);

$ProveContackt=new ClassProveContakt();
?> 


<!DOCTYPE html>
<html lang="en_mx">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>

   <form name="form" id="form" method="post" action="" >

<?php

     $ProveContackt->form();

     $ProveContackt->PostOk();

?>

</form>
</body>
</html>

截图我的页面如何显示https://i.imgur.com/xSstxcD.png

【问题讨论】:

  • 将它存储在某个地方。会话、文本文件、数据库。
  • 我没有数据库..
  • 还有会话或普通文件。
  • 普通文件..,对不起我的英文...,我的电脑上有这两个文件,文件 index.php 用浏览器 firefox 显示
  • 请求之间的数据未保存,您必须手动保存。到文件,到数据库,到会话。并在下一次请求时加载此数据。

标签: php forms class display


【解决方案1】:

所以,现在我可以只使用 php 代码,没有 Json...

@雨果,谢谢,你给我指路....

index.php 保持不变,在 ClassProveContakt.php 我必须更改为...

<?php

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

class ClassProveContakt {
 private $Name;
 private $Email;
 private $Message;

function __construct() {
  $this->Name="";
  $this->Email="";
  $this->Message="";
}

function Form() {
 echo('<table>');
 echo('<label for="name">Name </label>');
 echo('<input type="text" name="Name" value="'.$this->Name.'">');
 echo('<label for="email"> Email </label>');
 echo('<input type="email" value="'.$this->Email.'" name="Email" ');
 echo('<tr>');
 echo('<td>');
 echo('<br>');
 echo('<label> Message: <br><textarea cols="45" rows="6" name="Message">'.$this->Message.'</textarea></label>');
 echo('<br><br>');
 echo('<input  type="submit" name="post" value="POST COMMENT" id="comment">');
 echo('</td>');
 echo('</tr>');
 echo('</table>');
}


function PostOk() {

  $file = "test.txt"; 

  $this->Name=$_POST["Name"];
  $this->Email=$_POST["Email"];
  $this->Message=$_POST["Message"]; 

  if(empty($_POST['Name']) || empty($_POST['Email']) || empty($_POST['Message'])) {

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

  } 

  else 
  {

    $name = filter_input( INPUT_POST, 'Name', FILTER_SANITIZE_STRING);
    $email = filter_input(INPUT_POST, 'Email', FILTER_SANITIZE_STRING);
    $message = filter_input(INPUT_POST, 'Message', FILTER_SANITIZE_STRING);
    $datetime = date('m/d/Y h:i:s a', time());



    $data = array("name" => $name, "email" => $email, "message" => $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["message"])
            . "<br><hr>";
      }   


  }

}



?>

我的截图现在如何显示it

【讨论】:

    【解决方案2】:

    因此,作为评论,我向您发送了此解决方案。

    要恢复数据:

    $json_get_data = file_get_contents('myfile.json');

    保存数据:

    file_put_contents('myfile.json', $save_data);

    ClassProveContakt.php 代码:

     <?php
    
    header('Content-Type: text/html; Charset=utf-8');
    mb_internal_encoding('UTF-8');
    date_default_timezone_set('Europe/Paris');
    error_reporting(-1);
    
    class ClassProveContakt {
        private $Name;
        private $Email;
        private $Message;
    
        function __construct() {
          $this->Name="";
          $this->Email="";
          $this->Message="";
        }
    
        function Form() {
         echo('<table>');
         echo('<label for="name">Name </label>');
         echo('<input type="text" name="Name" value="'.$this->Name.'">');
         echo('<label for="email"> Email </label>');
         echo('<input type="email" value="'.$this->Email.'" name="Email" ');
         echo('<tr>');
         echo('<td>');
         echo('<br>');
         echo('<label> Message: <br><textarea cols="45" rows="6" name="Message">'.$this->Message.'</textarea></label>');
         echo('<br><br>');
         echo('<input  type="submit" name="post" value="POST COMMENT" id="comment">');
         echo('</td>');
         echo('</tr>');
         echo('</table>');
       }
    
    
      function PostOk() {
           if(empty($_POST['Name']) || empty($_POST['Email']) || empty($_POST['Message'])) {
    
            echo "<br>" . "<b>" . "<h3>*** Please enter all required fields ***</h3>" . "</b>";    
    
            $this->Name=$_POST["Name"];
            $this->Email=$_POST["Email"];
            $this->Message=$_POST["Message"];
    
          } else {
            $json_get_data = file_get_contents('myfile.json');
            $array_data = (array)json_decode($json_get_data);
    
    
            $name = filter_input( INPUT_POST, 'Name', FILTER_SANITIZE_STRING);
            $email = filter_input(INPUT_POST, 'Email', FILTER_SANITIZE_STRING);
            $message = filter_input(INPUT_POST, 'Message', FILTER_SANITIZE_STRING);
            $datetime = date('m/d/Y h:i:s a', time());
    
            $data = new stdClass();
            $data->name = $name;
            $data->email = $email;
            $data->message = $message;
            $data->datetime = $datetime;
    
            $array_data[] = $data;
    
    
            $save_data = json_encode($array_data);
            file_put_contents('myfile.json', $save_data);
    
            foreach ($array_data as $key => $value) {
    
              echo "<br>"
              . "<b>From: </b>" . htmlspecialchars( $value->name)
              . "<b> at: </b>" . htmlspecialchars( $value->datetime)
              . "<br><br>" . htmlspecialchars( $value->message)
              . "<br><hr>";
            }
          }
    
      }
    
    } 
    
    ?>
    

    index.php 代码保持不变:

    <?php
    
     include 'ClassProveContakt.php';
     header('Content-Type: text/html; Charset=utf-8');
     mb_internal_encoding('UTF-8');
     date_default_timezone_set('Europe/Paris');
     error_reporting(-1);
    
    $ProveContackt=new ClassProveContakt();
    ?> 
    
    
    <!DOCTYPE html>
    <html lang="en_mx">
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    <body>
    
       <form name="form" id="form" method="post" action="" >
    
    <?php
    
         $ProveContackt->form();
    
         $ProveContackt->PostOk();
    
    ?>
    
    </form>
    </body>
    </html>
    

    【讨论】:

    • @雨果,谢谢你的回答! ,抱歉,因为现在回答你的问题,但因为我之前没有回答你的问题....今天和你一起工作代码,它工作,一个问题..只有 php 代码可以做到这一点?
    • 几乎所有语言都可以,只需尝试在该语言中查找有关“文件系统”和 JSON 管理的库。
    • 但我的意思是,可以只使用没有 Json 的 PHP 代码吗?
    • 哦,对不起。您可以使用 PHP coockies link 请查看链接以获取有关 PHP coockies 的更多信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多