2011-11-04 86 views
0

我目前正在上傳頁面,其中用戶在表單中輸入值,然後單擊提交。我要檢查表格是否已經提交,如果提交表明它們不是空的。這裏是我現在的代碼PHP - 清潔,更優雅的方式來驗證表單內容

function validPost() 
{ 
    if(isset($_POST["title"]) && //if a post has been submitted 
     isset($_POST["artist"]) && 
     isset($_POST["genre"]) && 
     isset($_POST["url"]) && 
     isset($_POST["user"])) 
    { 
     if (strlen($_POST['title']) <= 0) { 
      echo 'ERROR: Please enter a title. </ br>'; 
      return false; 
     } 
     else if (strlen($_POST['artist']) <= 0) { 
      echo 'ERROR: Please enter an artist. </ br>'; 
      return false; 
     } 
     else if (strlen($_POST['genre']) <= 0) { 
      echo 'ERROR: Please select a genre. </ br>'; 
      return false; 
     } 
     else if (strlen($_POST['url']) <= 0) { 
      echo 'ERROR: Please enter a url. </ br>'; 
      return false; 
     } 
     else if (strlen($_POST['user']) <= 0) { 
      echo 'ERROR: Please enter a username to submit the song (or make one up). </ br>'; 
      return false; 
     } 
     else 
      return true; 
    } 
    else //if no post was submitted 
    { 
     return false; 
    } 
} 

有沒有更好的方法來檢查這個?我計劃在未來增加對這些表格提交的內容的更多支票,我覺得這是一個馬虎的做法。

謝謝!

回答

7

假設所有領域都將檢查非零串僅長度:

$field_checks = array(
// 'fieldname' => 'errormessage' 
    'title' => 'Please enter a title', 
    'url' => 'Please enter a URL', 
    etc... 
); 

$errors = array();  
foreach ($field_checks as $field => $errmsg) {  
    if (!isset($_POST[$field]) || ($_POST[$field] === '')) { 
     $errors[] = $errmsg; 
    } 
} 

if (count($errors) > 0) { 
    print_r($errors); // probably want a nicer error display than this 
    return false; 
} 
+2

你需要稍微調整一下,以檢查所有的字段是否已發佈 - 現在,如果某個字段沒有發佈,它將顯示爲有效(好吧,在現實世界中可能不會發生,除非有人試圖欺騙形式,但可能是這種情況 – Aerik

+0

好點,稍微調整一下邏輯 –

+0

@MarcB - 謝謝!現在工作得很完美,更乾淨了,以前從未見過'==='操作符,所以很好了解這個。這是什麼語法調用:'$ errors [] = $ errmsg;'?我從來沒有看到它,不知道它做了什麼,所以我想看看它。 – CHawk

-2

檢查到的jQuery和驗證插件

+1

這是在客戶端,可以很容易被繞過,可能造成巨大的安全問題。 – nickb

+1

客戶端驗證很好,但應該始終驗證服務器端是否有任何關鍵值......我認爲理想的,用戶友好的和安全的解決方案是同時執行這兩個操作。 – Aerik

+0

從UI的角度來看,它吮吸不得不提交的東西只是爲了發現有錯誤。 – rogerlsmith

相關問題