PHP类,html论坛,在页面上打印$\u POST数组

PHP类,html论坛,在页面上打印$\u POST数组,php,html,oop,Php,Html,Oop,我是初学者php程序员,我一直在尝试创建一个小程序,从一个论坛的输入,然后提交后,我希望它被打印在屏幕上。简单易用我想,我一直在尝试,怀疑它对1个文本字段的效果很好,当我添加剩下的2个名为[fam][user]的文本字段时,我的代码停止将内容返回到屏幕上。我还开始收到一个未索引数组的错误,因此我不得不使用isset来解决这个问题,还有,为什么我的代码调用析构函数,尽管我从未隐式设置析构函数。我不知道怎么问这些问题,因为错误不一致 代码不打印我的[姓名][fam][user] 当[fam][us

我是初学者php程序员,我一直在尝试创建一个小程序,从一个论坛的输入,然后提交后,我希望它被打印在屏幕上。简单易用我想,我一直在尝试,怀疑它对1个文本字段的效果很好,当我添加剩下的2个名为[fam][user]的文本字段时,我的代码停止将内容返回到屏幕上。我还开始收到一个未索引数组的错误,因此我不得不使用isset来解决这个问题,还有,为什么我的代码调用析构函数,尽管我从未隐式设置析构函数。我不知道怎么问这些问题,因为错误不一致

  • 代码不打印我的[姓名][fam][user]
  • 当[fam][user]的所有信息都从代码中删除时,代码将打印[name]
  • -代码有时称为析构函数
  • -代码没有清除以前输入的html(例如,在处理一个文本字段时,假设我输入[name]john,然后单击submit) 显示submit,然后我刷新页面,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>
    
代码不打印我的[姓名][fam][user]

你永远不会从破坏器中发出回声

  public function __destruct()
  {
    echo "destroyed again";
    $this->name; //<---- does nothing
    $this->familyName;
    $this->userName;
  }
但是从destruct方法中得到的唯一结果是

 "destroyed again"
只有当表单中的所有内容都已设置时,您才会看到。提交表单时总是这样,因为type
text
总是与其表单一起提交

这让我想到了这一点,你应该检查
空的
,而不是
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);
    }
}
请注意,任何falsy都将是空的,
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
你可以在线测试


干杯!

1.无论是否覆盖析构函数,都会调用析构函数。您如何知道它(不是)调用?2.表单输入在刷新时保持不变-这是浏览器功能,而不是您的代码,点击硬刷新按钮应该可以修复它。3.到底是什么错误以及从哪里得到的?@Justinas我没有收到任何错误,只是没有收到我想要的输出,print$p1->getName();print$p1->getFamilyName();print$p1->getUserName();单击“提交”后,这些文件不会打印。那么为什么我需要析构函数,我已经写了回音“再次销毁”它会调用析构函数,不再调用了。我尝试了硬刷新,仍然有输入数据there@Justinas-实际上,在这种情况下,它并不总是被调用,如果类从来没有被实例化,因为if通过,那么就没有析构函数,因为没有对象。但是当你有对象时,它总是被调用…你可以有时不用调用它。
echo“destrocted reach”
不是析构函数。
Person::\uu destroct()
是析构函数。你能告诉我们你的
Person
是什么样子吗?另外,你是否打开了错误报告功能?尝试使用
if(isset($\u POST[“Name”],$\u POST[“Fam”],$\u POST[“User”])
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