如何只允许从HTML表单传递预定义的值?

时间:2015-06-14 14:13:48

标签: php html-form

我有一个带有select输入和预定义值的HTML表单。实际上,它完成了它的工作,但我在Chrome中注意到,如果我更改代码,通过内置的插件"搜索元素",值为100000005555555,它也会被接受但是它只应接受函数中的预定义值。

select输入的验证不存在,因为我不知道如何实现这一点。

HTML代码:

<select id="category1" name="category1" class="levels">
<option value="">Category</option>
<?php $listings->listCategoriesName();?>
</select>

ListCategoriesName功能:

class listings{
    /* Get * Categories FROM MYSQL */
    public function listCategoriesName(){
        global $pdo;
        $result = $pdo->query("SELECT * FROM class_categories");
        $row = $result->fetchALL(); 
        foreach($row as $row) {echo '<option value="'.$row['id'].'">'.$row['name'].'</option>';}}
    }
}

该功能的输出是:

<option value="107">Beauty & Wellness</option>
<option value="108">Category 2</option>

依旧......

有没有人有想法?

4 个答案:

答案 0 :(得分:0)

  

选择输入的验证不存在,因为我不知道如何实现。

你要求的东西需要验证。 实现起来并不难。 将POST中的category1值与数据库中包含in_array()的类别名称数组匹配:http://php.net/manual/en/function.in-array.php

答案 1 :(得分:0)

检查服务器端的有效响应是可行的方法。浏览器最终通过HTTP请求发送提交数据,该请求可被篡改并用于发送非预期的响应。检查提交的数据是否被篡改的一种技术是使用您的密钥对数据进行散列并检查服务器端的提交数据。 你可以做点什么

构建表单时

<?php 
$hashedstring=crypt($key+$value,"yoursecretkey");
$delimiter="*";//any symbol
?>
<option value="<?php echo $key+$delimiter+$hashedstring; ?>">
<?php echo $value; ?> 
</option>

在服务器端类似

//if the submissions are in $keywithdigest and $val
$tampered=false;
$debris=explode($delimiter,$keywithdigest);
$digest=array_pop($debris);
$key=implode($debris);
//check if the submissions are tampered
if(crypt($key+val,"yoursecretkey")!=$digest)
  $tampered=true;
if($tampered){
  //do what has to be done when data has been tampered
}

答案 2 :(得分:0)

public function listCategoriesIdArray(){
  global $pdo; 
  $result = $pdo->query("SELECT id FROM class_categories"); 
  $row = $result->fetchALL(PDO::FETCH_ASSOC);
  return $row;
}

// And use only array values 
$categories = array_values($listings->listCategoriesIdArray());
if(!in_array($_POST['category1'], $categories)){ 
  echo "not in array"; 
}

答案 3 :(得分:0)

只有在服务器端提交表单后,才能使用预定义的函数数据验证输入数据。因为浏览器只显示html,它可以被任何元素编辑器轻松操作。