Php 验证表单OOP

Php 验证表单OOP,php,html,oop,Php,Html,Oop,我很难确保所有表单输入都填写在OOP中。通常情况下,我可以做到这一点。但我对OOP编程还是有点陌生。我想确保当我的按钮被点击时 它将控制我所有的表单是否为空。如果为空,则必须回显消息消息是荷兰语的,但这基本上意味着您仍有未填充的输入。但是,它不起作用。信息总是显示出来,即使我填写输入并单击submit。我不知道我做错了什么 我的代码: <?php class UserForm{ //Making properties to later use private $Vvoornaam;

我很难确保所有表单输入都填写在OOP中。通常情况下,我可以做到这一点。但我对OOP编程还是有点陌生。我想确保当我的按钮被点击时

它将控制我所有的表单是否为空。如果为空,则必须回显消息消息是荷兰语的,但这基本上意味着您仍有未填充的输入。但是,它不起作用。信息总是显示出来,即使我填写输入并单击submit。我不知道我做错了什么

我的代码:

<?php

  class UserForm{

//Making properties to later use
private $Vvoornaam;
private $Vachternaam;
private $Vemail;
private $Vbericht;
private $Bsubmit;
public function __contruct() {

//Giving the properties a value

$this->Vvoornaam = $_POST["voornaam"];
$this->Vachternaam = $_POST["achternaam"];
$this->Vemail = $_POST["email"];
$this->$Vbericht = $_POST["bericht"];
$this->$Bsubmit = $_POST["submit"];
}

public function Index() {

//Checking if a message has been posted yes or no. If yes, then execute the code from line 21 to 41

if(isset($_POST[$this->Bsubmit]) && empty($this->Vvoornaam) || empty($this->Vachternaam) || empty($this->Vemail) || empty($this->Vbericht)) {
    echo "U moet nog al uw gegevens invullen";
  }
}
}


if ($_SERVER['REQUEST_METHOD'] === 'POST') { 

   $userForm = new UserForm(); $userForm->Index(); 
正如您所看到的,问题是当您提交并且输入为空时,应该会出现此消息。然而,这一信息始终存在

我希望你们能帮我。那太好了

您缺少一个s in uu construct,您可以将其更新为:

public function __construct()
此外,我认为这将是空的$this->Vbericht

尝试从$this中删除前导的美元符号->$

改变

$this->$Vbericht = $_POST["bericht"];
$this->$Bsubmit = $_POST["submit"];

您的函数如下所示:

public function Index() {
    if (isset($this->Bsubmit) && empty($this->Vvoornaam) || empty($this->Vachternaam) || empty($this->Vemail) || empty($this->Vbericht)) {
        echo "U moet nog al uw gegevens invullen";
    }
}

您是否尝试过使用if语句执行类似的操作


此外,请确保在检查完$\u POST数组中的值为空或未设置时设置属性值

我会做一个这样的函数

public function ValidateForm($data) {

    if(!isset($data["voornaam"]) && strlen($data["voornaam"]) < 1) {
      echo "Please fill in the 'voornaam' field";
      return false;
    }
    else {
      $this->SetData($data);
      return true;
    }
name="data[voornaam]"
您的输入名称如下

public function ValidateForm($data) {

    if(!isset($data["voornaam"]) && strlen($data["voornaam"]) < 1) {
      echo "Please fill in the 'voornaam' field";
      return false;
    }
    else {
      $this->SetData($data);
      return true;
    }
name="data[voornaam]"
在html/php文件中,一旦设置了提交,就会触发该函数

$obj = new UserForm();
if(isset($_POST["submit"]) { $obj->ValidateForm($_POST["data"]); }

嗨,谢谢你的回答。我没有看到那个错误,不幸的是,它并没有解决我的问题。检查新的edithi!哈哈哈,我没有看到我忘记了一个s在我的建设。这很有帮助。我知道你有两个注意事项。这是一个步骤,但我的问题没有解决。如果你还愿意帮助我,那就太好了。检查我的新编辑更新!那么现在,代码的设置看起来是这样的,对吗?是的,没错。您可以看到表单的最新屏幕截图。通知不见了。但是,当我单击按钮时,不会弹出“输入为空”的消息。是的,我有完全相同的代码。我可以问一下为什么在第16行到第20行你已经把$u的帖子拿走了吗?你好,谢谢你抽出时间回答我的问题!我使用了你给我的密码。但唯一的问题是消息的所有字段都必须填写。即使我点击submit按钮,它们也不会消失。消息不会切换到“所有内容都已填充”。我不知道如何确保在我填写表格时信息会发生变化。你在前端使用的是什么。是ajax/jquery还是angularjs等@Progrock oops,它应该是strlenisset$data[voornaam]尾括号缺失的。strlen$data[voornaam,无效语法。请测试您的代码。您不应该使用这种方法生成验证表单。使用setters中的验证规则生成用户域对象。
name="data[voornaam]"
$obj = new UserForm();
if(isset($_POST["submit"]) { $obj->ValidateForm($_POST["data"]); }