2012-07-04 60 views
-1

我使用Zend的insert()功能的嵌入式数据库中的表中的记录。例如, 从数据库模型对象,我打电话Zend_Db_Table's insert()函数并传递输入数据作为数组 - $data,即验证/调用插入之前验证数据()

$this->insert($data); 

$data是一个数组。的$data内容是混合数据类型-integer,钱,文本等

的为了验证传入$data阵列,我写的函数,verifyData($data)

private function verifyData(&$data) { 
    //Trim whitespace characters from incoming data. 
    foreach($data as $key => $val) 
    { 
     $data[$key] = trim($val); 
     if(empty($data[$key])) { 
      unset($data[$key]); 
     } 
    } 

    //Checking for not null table columns 
    if(empty($data['id']) || empty($data['name']) || empty($data['age'])) { 
     error_log("One of the required fields is missing"); 
     return false; 
    } 
    else { 
     return true; 
    } 
} 

如上,写功能:

  1. 修剪传入数据和从$数据阵列取消设置的任何字段,如果它们是空的。
  2. 然后所需字段的存在这个功能检查,并且如果任何所需的字段缺失,则返回false。在这个特定的定义中,id,name和age是必需的。但是,也可能有其他非必填字段,我想验证。例如:$数据[“薪水”]

我需要在/添加以下验证上述功能可以任何其他方式帮助/建议:

  1. 我要检查,如果每个元素的数据类型的数组与我们所期望的/在插入数据之前将其转换为特定的数据类型。
  2. 我想转换/处理传入数据,以防止任何SQL注入威胁。

处理数据类型检查的一种方法是循环传入数据数组并将特定列值转换为其数据类型并进行验证。但我想知道是否有任何有效/标准的方法来实现上述两点。

一个示例场景,例如在我的网页表单,在添加新的人分贝,我需要输入姓名,年龄和薪水外面的姓名和年龄是强制性的。年龄和工资只能作为整数输入。我想在PHP级别实现这个限制,我使用Zend Framework。

任何帮助/建议将非常感激。

+1

你在哪里卡住了?你有什么尝试? – CodeZombie

+0

如果您想要就如何调整现有功能提出建议,至少您必须显示该功能的代码。 – jeroen

+0

ZombieHunter和Jeroen:对不起,如果它不明确。我现在更新了我的问题。谢谢 –

回答

0

insert应该已经照顾你可能会遇到任何SQL注入问题护理。至于类型检查和转换,PHP中有几种可用的方法。例如,检查并转换为int

if(ctype_digit($something)) { 
    $something = (int)$something; 
} 

这真的取决于你所需要的特定的验证。

+0

感谢@minitech。我同意一种方法是我检查特定数据类型的特定字段。但是,如果我在一张表中有太多列,我希望找到一个更好的解决方案来完成上述操作,而不是逐一检查每一列。 –

+0

@Parminder:不是。 – Ryan

1

一个简单的方式开始可能与Zend_filter_Input,它采用Zend_Validation Zend_Filter的,并套用筛选和验证的数据集。

//A simple exaample of how you might use Zend_Filter_Input 
private function verifyData(&$data) { 
    //Add any filters you want there are many standard filters, order of filters may matter 
    $filters = array(
     '*' => 'StringTrim', //trim all fields 
     'id' => 'Digits'  //filter for digits on id field 
    ); 
    //add any validators you want there are many standard validators, order of validators may matter 
    $validators = array(
     '*' => 'NotEmpty' //check all fields for empty() 
    ); 
$input = new Zend_Filter_Input($filters, $validators, $data) { 
    if ($input->isValid() { 
     return TRUE; 
    } else { 
     return FALSE 
    }  
} 

不用说这是一个不完整的例子,它如何工作,但它应该给你的基本想法。有许多不同的方式来完成验证,找到你喜欢的并且为之付出。

我个人最喜欢的是在输入阶段(窗体,控制器...)进行基本的过滤和验证,然后在将数据发送给映射器之前在域模型中应用任何其他过滤或验证插入到数据库中。

好运...

Standard Filters
Standard Vaildators