PHP检查输入类型以进行验证

PHP检查输入类型以进行验证,php,forms,validation,Php,Forms,Validation,我想知道是否有办法检查$\u POST信息使用了什么类型的输入。然后我想使用该类型进行验证。例如,如果输入type=“text”,那么我希望能够为该类型的输入创建某些验证 这是我生成表单的代码: $fields = array( array( 'label' => 'Name:', 'id' => $meta.'_nhm_lead_name', 'class' => 'field-name input', // optio

我想知道是否有办法检查$\u POST信息使用了什么类型的输入。然后我想使用该类型进行验证。例如,如果输入type=“text”,那么我希望能够为该类型的输入创建某些验证

这是我生成表单的代码:

$fields = array(
    array(
        'label' => 'Name:',
        'id' => $meta.'_nhm_lead_name',
        'class' => 'field-name input', // optional
        'wrapper_class' => 'four columns', // optional
        'type' => 'text',
        'required' => true,
    ),
)
这就是我生成html的方式:

    public function make_fields(){
    foreach($this->fields as $field => $value){
        switch ($value['type']) {
            case 'text':
                $inputs .= '<li class="field '.$value['wrapper_class'].'">';
                $inputs .= '<input type="text" name="'.$value['id'].'" class="'.$value['class'].'" />';
                $inputs .= '<span class="error-message"></span>';
                $inputs .= '</li>';
            break;
         }
     } 
     }
公共函数make_字段(){
foreach($this->fields as$field=>$value){
开关($value['type'])){
案例“文本”:
$inputs.='
  • ”; $inputs.=''; $inputs.=''; $inputs.='
  • '; 打破 } } }
    您可能希望根据$\u POST数组中键的名称执行此操作。用户可以在不使用任何类型(例如Javascript)的情况下提交数据,从而使您要求执行的操作变得不切实际。他们将发送没有类型的数据

    发布到页面的数据可以来自任何地方


    为了实现可重用性,请为表单提交创建一个数据对象,其中包含每个输入的验证,或者编写一个验证函数。将其保留在服务器上,以便恶意用户无法操作数据并更改验证提交内容的方式。

    从$\u POST接收数据时,仅传递值。但是,您可以使用如下结构:

    $Fields = array( 
      array('type' => 'text',   'name' => 'name'),
      array('type' => 'text',   'name' => 'password'),
      array('type' => 'number', 'name' => 'age'));
    
    然后从中生成html表单。因此,您可以使用相同的变量来生成验证。但是,对于很少的表单(引擎从数组生成表单输入)来说,这通常是太多的工作,除非您已经使用了具有此功能的框架,否则最好将其“硬编码”

    为了给你一个想法,表格如下:

    <form method = "POST" action = "/post.php">
      <?php foreach ($Fields as $Input) {
        switch($Input['type']) {
          case "text": 
            echo "<input type = 'text' name = '" . $Input['name'] . "'>";
            break;
          case "number":
            echo "<input type = 'number' name = '" . $Input['name'] . "'>";
            break;
          }
        }
       ?>
     </form>
    

    您可以编写一个jQuery脚本来检查输入的
    prop
    ,然后将其添加到
    $\u POST
    。比如:

    HTML:

    如果不能影响原始HTML,则最好使用此选项


    请注意,这是危险的,您不能信任来自www的数据,但它可能在安全的(如intranet)系统中工作。

    使用客户端验证程序,如jQuery Validate.No。客户端很容易操作。我永远不会使用它…不,但你已经知道,因为你写了它,所以你可以写服务器端验证No@scrowler请不。你应该根据预期的输入进行验证某些文本输入可能需要比其他文本输入更多的约束,这正是我正在做的。下面是我用来生成html的数组示例:$fields=array(数组('label'=>'Name:','id'=>$meta.''nhm\u lead\u Name','class'=>'fieldname input',//可选的'wrapper\u class'=>'four columns',//可选的'type'=>'text','required'=>true,),抱歉,我不知道为什么它不显示为代码,但这是我使用的一般概念。注释中没有输入,也没有“正确的代码”,您只能执行一行。我将尝试对其进行解密(;但是你可能想把它放在你的OP中,让其他人知道你到目前为止做了什么。那么问题是什么?如果你已经有了这个,为什么你要问你原来的问题?可以。这将是我发布的第一件事,它将是开源的。在不透露太多的情况下,我正在尝试创建一个WP帖子,并将元数据添加到所有这些都将由前端的用户完成。
    foreach ($Fields as $Input) {
      $Name = $Input['name'];
      if (array_key_exists($Name, $_POST) &&
          // You need to define this:
          checktype($_POST[$Name], $Input['type'])) {
        $Posted = $_POST[$Name];
        }
      }
    
    <form method="POST" action = "here.php" id="myform">
       <input type="text" value="hello" id= "input1" />
    </form>
    
    var input1type="&input1type=" + $('#input1').prop('type');
    $.post('here.php', $('#myform').serialize()+input1type );