【问题标题】:PHP OOP - How to validate input fields correctlyPHP OOP - 如何正确验证输入字段
【发布时间】:2021-10-20 14:16:06
【问题描述】:
  • 这是我的表单 - 这是一个包含文件。

form_file.php

<section class="container-sm">
   <form method="post" class="par-form">
        <h3 class="par-h2">John Doe Form</h3>

         <p><label class="single-label" for='user_firstname'>Name: <a id='user_firstname_label'></a></label>
                
         <input class="par-input form_login" maxlength="15" name="user_firstname" required value="<?=$obVaga->user_firstname?>" ></input><span class="error">*<?php echo $nameErr;?></span></p>

         <p><label class="single-label" for='user_secondname'>Surname: <a id='user_secondname_label'></a></label>
              
         <input class="par-input form_login" maxlength="40" name="user_secondname" required value="<?=$obVaga->user_secondname?>" ></input></p>
              
         <p><label  class="single-label" for='user_email'>E-mail: <a id='user_email_label'></a></label>
              
         <input class="par-input form_login" maxlength="40" name="user_email" required value="<?=$obVaga->user_email?>" ></input></p>

         <button type="button" onclick="sendData()" class="par-button" id='user_button_sendData'>SEND</button>
        </form>
</section>    
  • 这是接收Form文件的模板页面

single-add.php

<?php 
/**
 * Acess the composer library
 */
require __DIR__.'/vendor/autoload.php';
/**
 * Use a Classe VAGA
 */
use \App\Entity\Vaga; 

$obVaga = new Vaga;

    if (isset($_POST['user_firstname'],$_POST['user_secondname'],$_POST['user_email'])) {

    $obVaga->user_firstname     = $_POST['user_firstname'];
    $obVaga->user_secondname    = $_POST['user_secondname'];
    $obVaga->user_email         = $_POST['user_email'];
    $obVaga->user_cadastrar();
    } 

?>
                
        <!-- Receive the contents of the form include form_file.php  -->
        <?php include __DIR__.'/appincludes/form_file.php' ?>
  • 这是接收数据的类页面

Vaga.php

<?php
namespace App\Entity;

/**
 * Use a Classe Database
 */
use \App\Db\Database;
use PDO;


class Vaga{

    // @var Integer
    public $user_id;

    // @var String
    public $user_firstname;

    // @var String
    public $user_secondname;

    // @var String 
    public $user_email;

    // @var String 
    public $nameErr;

    // @var Boolean

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (empty($_POST["user_firstname"])) {
      $nameErr = "Name is required";
    } else {
      $name = test_input($_POST["user_firstname"]);
      // check if name only contains letters and whitespace
      if (!preg_match("/^[a-zA-Z-' ]*$/",$name)) {
        $nameErr = "Only letters and white space allowed";
      }
    }
    
    if (empty($_POST["user_secondname"])) {
        $nameErr = "Name is required";
      } else {
        $name = test_input($_POST["user_secondname"]);
        // check if name only contains letters and whitespace
        if (!preg_match("/^[a-zA-Z-' ]*$/",$name)) {
          $nameErr = "Only letters and white space allowed";
        }
    }

    if (empty($_POST["user_email"])) {
      $emailErr = "Email is required";
    } else {
      $email = test_input($_POST["email"]);
      // check if e-mail address is well-formed
      if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $emailErr = "Invalid email format";
      }
    }
}


    public function user_cadastrar(){
        // DEFINIR A DATA
        // INSERT STRINGs IN THE TABLE 
        $obDatabase = new Database('tb_partner'); 

        $this->id = $obDatabase->insert([
                                'user_firstname' => $this->user_firstname,
                                'user_secondname'=> $this->user_secondname,
                                'user_email'    => $this->user_email
                            ]);
    }
 
}
  • 我正在尝试使用此脚本来验证字段,但我一直坚持到现在。我正在尝试通过类文件 Vaga.php 执行此脚本
public function par_add_validate(){
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (empty($_POST["user_firstname"])) {
      $nameErr = "Name is required";
    } else {
      $name = test_input($_POST["user_firstname"]);
      // check if name only contains letters and whitespace
      if (!preg_match("/^[a-zA-Z-' ]*$/",$name)) {
        $nameErr = "Only letters and white space allowed";
      }
    }
    
    if (empty($_POST["user_secondname"])) {
        $nameErr = "Name is required";
      } else {
        $name = test_input($_POST["user_secondname"]);
        // check if name only contains letters and whitespace
        if (!preg_match("/^[a-zA-Z-' ]*$/",$name)) {
          $nameErr = "Only letters and white space allowed";
        }
    }

    if (empty($_POST["user_email"])) {
      $emailErr = "Email is required";
    } else {
      $email = test_input($_POST["email"]);
      // check if e-mail address is well-formed
      if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $emailErr = "Invalid email format";
      }
    }
};
}
  • 我将 Var $nameErr 放在 form_file.php 中,如果该字段为空或包含不可接受的字母,它应该显示回显字符串。
  • 这是 debug.log 文件中的结果
  • [18-Aug-2021 16:44:07 UTC] PHP 注意:未定义的变量:C:\xampppserver2\htdocs\project\appincludes\form_file.php 中的 nameErr 位于第 15 行
  • 第 15 行:
<input name="user_firstname" required value="<?=$obVaga->user_firstname?>" ></input><span>*<?php echo $nameErr;?></span></p>
  • 请问我做错了什么或缺少什么?提前谢谢您!

【问题讨论】:

    标签: php html templates tags


    【解决方案1】:

    我相信您这里缺少一些行:

        // @var Boolean
    
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
    

    否则,您将一些逻辑代码放在您的类中(没有方法),这应该会导致 Parse 错误。还有为什么@var Boolean 后面没有布尔属性?

    鉴于您将所有代码包装在一个方法中,您仍然有几个问题。首先,您不能直接访问$nameErr。相反,你想要$this-&gt;nameErr

    form_file.php 中也没有名为$nameErr 的变量。不过,您将 nameErr 作为 $obVaga 对象的属性。您可以使用$obVaga-&gt;nameErr 访问它。

    【讨论】:

    • 您好@rept1d,我按照您的建议对文件进行了所有更改并进行了一些测试。什么都没发生。甚至 debug.log 文件中的错误消息我也没有收到。
    猜你喜欢
    • 2016-11-16
    • 1970-01-01
    • 2021-12-11
    • 2017-05-18
    • 2014-03-08
    • 2013-01-28
    • 1970-01-01
    • 2013-03-21
    相关资源
    最近更新 更多