PHP - 清洁,更优雅的方式来验证表单内容

问题描述:

我目前正在上传页面,其中用户在表单中输入值,然后单击提交。我要检查表格是否已经提交,如果提交表明它们不是空的。这里是我现在的代码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; 
    } 
} 

有没有更好的方法来检查这个?我计划在未来增加对这些表格提交的内容的更多支票,我觉得这是一个马虎的做法。

谢谢!

假设所有领域都将检查非零串仅长度:

$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

检查到的jQuery和验证插件

+1

这是在客户端,可以很容易被绕过,可能造成巨大的安全问题。 – nickb

+1

客户端验证很好,但应该始终验证服务器端是否有任何关键值......我认为理想的,用户友好的和安全的解决方案是同时执行这两个操作。 – Aerik

+0

从UI的角度来看,它吮吸不得不提交的东西只是为了发现有错误。 – rogerlsmith