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;
}
检查到的jQuery和验证插件
这是在客户端,可以很容易被绕过,可能造成巨大的安全问题。 – nickb
客户端验证很好,但应该始终验证服务器端是否有任何关键值......我认为理想的,用户友好的和安全的解决方案是同时执行这两个操作。 – Aerik
从UI的角度来看,它吮吸不得不提交的东西只是为了发现有错误。 – rogerlsmith
你需要稍微调整一下,以检查所有的字段是否已发布 - 现在,如果某个字段没有发布,它将显示为有效(好吧,在现实世界中可能不会发生,除非有人试图欺骗形式,但可能是这种情况 – Aerik
好点,稍微调整一下逻辑 –
@MarcB - 谢谢!现在工作得很完美,更干净了,以前从未见过'==='操作符,所以很好了解这个。这是什么语法调用:'$ errors [] = $ errmsg;'?我从来没有看到它,不知道它做了什么,所以我想看看它。 – CHawk