我想知道是否有一种方法可以检查$_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)系统中工作。