2016-01-13 83 views
0

什麼是最方便的方式,是使用PHP驗證表單的「最佳」方式?我不希望JavaScript這樣的語言驗證我的表單,我想知道使用PHP進行表單驗證的最佳方法,更乾淨的方法來完成它。使用PHP驗證表單的最佳方法

我是新來的PHP,我在註冊頁面上工作,我完成了它,我想知道我做的方法是否可以接受,以及是否有最佳,方便,乾淨的方法來驗證形成。

這是我使用的方法:

if (post form submitted (action same page)) { 
    $errors = array(); // Initialize the variable error as an array 

    if (various controls for the username which must not occur) { 
    $errors[] = 'Inputnot valid.'; 
    } 

    // for example: 
    if (empty($_POST['username']) || !ctype_alnum($_POST['username'])) { 
    $errors[] = 'Username not valid.'; 
    } 

    if (empty($_POST['email']) || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { 
    $errors[] = 'Email not valid.'; 
    } 

    if (empty($errors)) { // Check if the array is empty so that there are no errors 
    echo 'everything is ok'; 
    } else { // There is errors 
    foreach ($errors as $error) { 
     echo $error; 
    } 
    } 
} 
// Begin HTML 
<!DOCTYPE html> 
+0

服務器端驗證對於安全原因非常重要。你可以使用PHP框架。框架將以非常簡單的方式進行表單驗證。 –

回答

0

如果你驗證服務器端的數據,您的驗證不需要應用程序的業務邏輯(即你不檢查,看看用戶在他的賬戶中有足夠的信用),你應該在控制器中進行驗證。

如果驗證需要業務邏輯,請在模型內實現並通過控制器調用它。

你應該有這個計算器鏈接Best Place for Validation in Model/View/Controller Model?

0

一看就試試這個示例代碼:

<?php 
// define variables and set to empty values 
$name = $email = $gender = $comment = $website = ""; 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    $name = test_input($_POST["name"]); 
    $email = test_input($_POST["email"]); 
    $website = test_input($_POST["website"]); 
    $comment = test_input($_POST["comment"]); 
    $gender = test_input($_POST["gender"]); 
    if(empty($name) || empty($email) || empty($website) || empty($comment)){ 
    $errors = 'Input not valid.'; 
    } 
    else { 
    //Do success stuff here... 
    } 
} 


function test_input($data) { 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 
    return $data; 
} 
?> 

使用用戶定義的函數驗證請求的值。

1

驗證取決於您的程序邏輯。對用戶輸入的每個字段應用適當的邏輯。不信任。我會談論消毒。在使用db查詢之前進行清理。在打印到html之前也要進行消毒。 2種不同的消毒方式。

消毒數字是最簡單的: $var = (int)$var; 現在有沒有辦法可以$var傷害任何東西。數據庫和html輸出安全。

對於字符串數據我做了preg_replacestr_replace並刪除了我不期待的任何字符。只需谷歌的正則表達式,您需要和使用preg_replace

對於發佈到網站的用戶提交的文本,在輸出之前使用htmlspecialchars()htmlentities()

密碼:無論何時輸入密碼,立即使用單向散列(如md5()或更高版本)。比較哈希值是否相等。你永遠不需要知道或存儲實際的PW。通過將PW存儲爲散列,攻擊用戶表的人將看到一堆散列,當進入PW字段時將不起作用。醃製你的哈希將使它更難以扭轉加密。即在散列之前將每個密碼都準確地加上「9827345978457」。 (總是相同的不可猜測的鹽)。

電子郵件:驗證將檢查@和點。但它只是爲了幫助用戶拼寫錯誤。消毒電子郵件:爲數據庫設置參數或轉義,並在輸出時使用htmlspecialchars()

請注意,preg_replace不適用於用戶可以輸入任何文本並使其有效(即PW)。這些是最難處理的投入。

+0

但是,是否有必要使用preg_replace,例如密碼/電子郵件,如果我要將這個值與PDO綁定,然後準備並執行查詢?因爲在註冊期間編譯密碼輸入時更多的特殊字符可以使用這個人,他的賬戶更安全。 – Keaire

+0

我加了3段。 HTH。 @Keaire – Dor1000

0

我會建議從packagist選擇一個包。

有幾十個用於PHP形式相關的擴展,但這裏有幾個常見的:

這些鏈接轉到相應框架的文檔頁面。給他們一個閱讀,並選擇最適合你的那一個。

您應該使用composer進行安裝。

相關問題