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

时间:2013-12-09 21:52:14

标签: php forms validation

我想知道是否有办法检查用于$ _POST信息的输入类型。我想然后使用该类型进行验证。例如,如果输入类型=“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;
         }
     } 
     }

3 个答案:

答案 0 :(得分:1)

从$ _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>

然后在post.php

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];
    }
  }

答案 1 :(得分:0)

您可能希望根据$ _POST数组中键的名称来执行此操作。用户可以在不使用任何类型(例如Javascript)的情况下提交数据,从而使您要求做的事情变得不切实际。他们将发送没有类型的数据。

发布到您网页的数据可以来自任何地方。

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

答案 2 :(得分:0)

您可以编写一个jQuery脚本来检查输入的prop,然后将其添加到$_POST。类似的东西:

HTML:

<form method="POST" action = "here.php" id="myform">
   <input type="text" value="hello" id= "input1" />
</form>

jQuery的:

var input1type="&input1type=" + $('#input1').prop('type');
$.post('here.php', $('#myform').serialize()+input1type );

如果您不能影响原始HTML,最好使用此方法。

请注意,这很危险,您无法信任来自www的数据,但它可能在安全(例如内联网)系统中有效。