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


PHP check input type for 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;
         }
     } 
     }

从$_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];
    }
  }

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

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

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

您可以编写一个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的数据,但它可能在安全的(如intranet)系统中工作。