2012-07-04 56 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