PHP类,html论坛,在页面上打印$ _POST数组

时间:2019-03-14 09:29:22

标签: php html5 oop

我是PHP初学者,iv一直在尝试创建一个小程序,该小程序从论坛获取输入,然后在提交后我希望将其打印在屏幕上。我以为简单又容易,我一直在尝试并且可疑地似乎对1个文本字段工作正常,当我添加了剩下的2个称为[fam] [user]的文本字段时,我的代码停止将内容返回到屏幕。我也开始收到unindex数组的错误,因此我不得不使用isset来解决此问题,而且,尽管我从未隐式设置析构函数,但是为什么我的代码调用了析构函数。我不知道该怎么问这些问题,因为错误始终没有发生。

  • 代码无法显示我的[姓名] [家族] [用户]
  • 当[fam] [user]的所有内容都从代码中省略时,
  • 代码会显示[name]。
  • -有时也称为析构函数的代码
  • -代码不会清除html先前的输入(例如,使用一个文本字段时,假设我输入了[name] john,然后单击提交 显示提交,然后刷新页面,名称仍然是john 显示,为什么析构函数不会从我的名字中清除名字的记忆 提交。

         <form class="nameform" action="book.php" method="post">
             <input type="text" name="Name" value="1">
             <input type="text" name="Fam" value="2">
             <input type="text" name="User" value="3">
             <input type="button" name="submit" value="Submit">
         </form>
    

          private $name; private $familyName; private $userName;
          function __construct($names,$familyNames,$userNames)
          {
            $this->name = $names;
            $this->familyName = $familyNames;
            $this->userName = $userNames;
          }
          function getName()
          {
            return $this->name;
          }
          function getFamilyName()
          {
            return $this->familyName;
          }
          function getUserName()
          {
            return $this->userName;
          }
          public function __destruct()
          {
            echo "destroyed again";
            $this->name;
            $this->familyName;
            $this->userName;
          }
        }
    
        if(!isset( $_POST["Name"])||!isset($_POST["Fam"])||!isset($_POST["User"]))
        {
            echo "Please fill in the data";
        } else {
          $p1 = new Person($_POST["Name"],$_POST["Fam"],$_POST["User"]);
          print $p1->getName();
          print $p1->getFamilyName();
          print $p1->getUserName();
          print_r($_POST);
        }
    
        // $n = $_POST["Name"];
        // $f = $_POST["Fam"];
        // $u =  $_POST["User"];
        // $p1 = new Person($_POST["Name"],$_POST["Fam"],$_POST["User"]);
    
    
     ?>
    

1 个答案:

答案 0 :(得分:0)

  

代码不显示我的[姓名] [家族] [用户]

您永远不会将它们从消解器中回荡

  public function __destruct()
  {
    echo "destroyed again";
    $this->name; //<---- does nothing
    $this->familyName;
    $this->userName;
  }

所以我不确定这应该做什么。您将它们放在底部

  print $p1->getName();
  print $p1->getFamilyName();
  print $p1->getUserName();

但是从destruct方法中得到的唯一一件事是

 "destroyed again"

并且您只会看到表单中的所有内容都已设置。提交表单时总是这样,因为类型text总是与表单一起提交。

这带给我的是,您应该检查empty而不是那里的isset

if ('POST' === $_SERVER['REQUEST_METHOD']) { //check if POST
    if(empty($_POST["Name"])||empty($_POST["Fam"])||empty($_POST["User"])){
        echo "Please fill in the data";
    } else {
        $p1 = new Person($_POST["Name"],$_POST["Fam"],$_POST["User"]);
       print $p1->getName();
       print $p1->getFamilyName();
       print $p1->getUserName();
       print_r($_POST);
    }
}

请注意,任何虚假都是空白,false[]''0'0',{{ 1}}等。

我不知道这是否可以解决您所有的问题,但是这些事情可能会产生您所遇到的某些行为。

检查这些内容的另一种更高级的方法是这样的:

null

输出

if ('POST' === $_SERVER['REQUEST_METHOD']) { //check if POST
     $post = array_filter( $_POST, function($item){
           return strlen($item); //any thing of a length of 0 is removed
     });

     if(count($post) != count($_POST)){
           foreach(array_diff_key( $_POST, $post)  as $missing=>$empty) {
                  echo "Please fill in $missing\n";
           }
     }else{
       $p1 = new Person($_POST["Name"],$_POST["Fam"],$_POST["User"]);
       print $p1->getName();
       print $p1->getFamilyName();
       print $p1->getUserName();
       print_r($_POST);
    }
}

您可以在线https://plot.ly/pandas/multiple-axes/#simple-secondary-y-axis-with-secondaryy进行测试

干杯!