php中的注册表单验证

Posted

技术标签:

【中文标题】php中的注册表单验证【英文标题】:Registration form Validation in php 【发布时间】:2016-01-22 21:26:33 【问题描述】:

这里我有几个关于验证的问题

    下面的代码运行良好,但可以使用这么多elseif 吗?

    我还将使用客户端验证,因此我可以在同一页面上同时拥有服务器端验证和客户端验证代码。

    if( $firstname == "" ) 
      $er='Enter your First name';
    
    elseif( $lastname == "" ) 
      $er='Enter your Last name';
    
    elseif( $firstname == $lastname ) 
      $er='First name and last name cannot be same';
    
    elseif( $username == "" ) 
      $er='Enter your username';
    
    elseif( $password == "" ) 
      $er='Enter your password';
    
    elseif( strlen($password) < 6 ) 
      $er='Password must be more than 6 characters';
    
    elseif( $password != $password2 ) 
      $er='Password and confirm password does not match!';
    
    elseif( $email != "" && !preg_match( "/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $_POST["email"] ) ) 
      $er='Enter valid email';
    
    elseif($q->rowCount() > 0)  // $q is statement used to select username from db 
      $er='The username '.$username.' is already taken!';
     
    elseif($s->rowCount() > 0)  // $s is statement used to select email from db 
      $er='The email '.$email.' is already registered, choose another!';
    
    else 
      // some pdo statement to insert data 
      if ($stmt->rowCount() == 1) 
        header("Location:userarea.php");
       
      else 
       echo "error";
      
    
    

【问题讨论】:

1.是的,这很好,只要它可读(这是)。 2. 如果您愿意,客户端代码将在浏览器中运行,使用另一种语言 (js),因此不会发生冲突。如果你把它分成一个 js 文件,你可能会发现你有更好的组织 您应该分别测试每个字段并在数组中收集错误消息以一次全部输出。但是,如果您也使用 javascript 进行验证,则可以忽略此步骤,专注于项目中其他重要的事情,只要后端是安全的,就是这样。 【参考方案1】:

1) 太多的 if-else 语句是糟糕设计的良好表现。您应该使用验证类或编写自己的验证类。有点跑题了,但这段代码让我想起了我们在 1990 年代的日子 :) 你为什么不至少使用一个微框架而不是一次又一次地重新发明***......

2) 可以检测调用是否使用ajax:

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') 
  ...

因此,在控制器中,您在数组中收集验证错误,如果它是 AJAX 请求,则将其转换为 JSON 并进行 ajax 验证(检查 jquery 验证器),如果不是像不使用 ajax 那样简单地处理错误。我必须警告,这显然不会像纯客户端验证那样响应迅速,但是,是的,一遍又一遍地定义所有这些验证规则很无聊。这就是为什么我们现在使用框架来减轻痛苦......

【讨论】:

【参考方案2】:

试试这个:

if (empty($_POST["fname"]))

    $nameErr = "Your First Name Is Missing";

        else
    
        $name = $_POST['name'];

        if (!preg_match("/^[a-zA-Z a-zA-Z]*$/", $name))
        $nameErr = "Your Name Is Missing";



if (empty($_POST["age"]))
     
    $ageErr = "Your Age Is Missing";

        else
    
        $age = $_POST['age'];

        if (!preg_match("/^[0-9]*$/", $age))
        $nameErr = "Your Age Is Missing";

【讨论】:

我认为你的意思是 $_POST['fname'] 不是 $_POST['name']$ageErr 不是 $nameErr【参考方案3】:

当您验证如此多的字段时,您将需要 JS 或 jQuery 来验证而不是刷新页面,因为这可能会让用户感到恼火,因为页面不断重新加载并出现不同的错误。最好的选择是使用 jQuery 验证。

【讨论】:

请同时发布您的 html 以提供进一步帮助。

以上是关于php中的注册表单验证的主要内容,如果未能解决你的问题,请参考以下文章

什么是表单验证?

php js表单验证问题

Thinkphp框架 表单自动验证登录注册 ajax自动验证登录注册

如何在 PHP 中验证表单,然后重定向到外部页面

表单验证 - Django 中的注册和登录错误处理

laravel 5.5 修改注册表单验证规则