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

问题描述 投票:-1回答:1

我是初学者php程序员,iv一直试图创建一个小程序,从论坛获取输入,然后提交后我希望它打印在屏幕上。简单易行我想,iv一直在尝试和怀疑它似乎工作正常1文本字段,当我添加剩余的2个文本字段称为[fam] [用户]我的代码停止将内容返回到屏幕。我也开始收到一个unindex数组的错误,因此我不得不使用isset来解决这个问题,而且,为什么我的代码会调用析构函数,尽管我从不隐式设置我的析构函数。我不知道如何提出这些问题,因为错误并不一致。

  • 代码不打印我的[名称] [来自] [用户]
  • 当代码中省略了[fam] [user]的所有内容时,代码打印[name]。
  • -code有时称为析构函数
  • -code没有清除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"]); ?>
php html5 oop
1个回答
0
投票

代码不打印我的[名称] [来自] [用户]

你永远不会从析构函数中回应它们

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

所以我不确定应该做什么。你把它们放在底部

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

但是你从破坏方法中得到的唯一的东西是

 "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'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);
    }
}

产量

Please fill in Name
Please fill in Fam

你可以在线测试Here

干杯!

© www.soinside.com 2019 - 2024. All rights reserved.