使用PHP验证表单最方便的方式是什么,“最佳”方式是什么?我不希望像Javascript这样的语言来验证我的表单,我想知道使用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 :(得分:1)
验证取决于您的程序逻辑。将适当的逻辑应用于用户输入的每个字段。不相信它。我会谈谈消毒。在db查询中使用之前进行清理。在打印到HTML之前也要清理。 2种不同的消毒方式。
清理数字是最简单的:
$var = (int)$var;
现在$var
无法伤害任何事情。 db和html输出的安全性。
对于字符串数据我执行preg_replace
或str_replace
并删除任何我不期望的字符。只需谷歌获取您需要的正则表达式并与preg_replace
一起使用。
对于发布到网站的用户提交的文字,请在输出之前使用htmlspecialchars()
或htmlentities()
。
密码:无论何时输入密码,都要立即使用单向哈希(md5()
或更好)。比较哈希是否相等。你永远不必知道或存储实际的PW。通过将PW存储为哈希值,攻击用户表的人将看到一堆哈希值,这些哈希值在输入PW字段时不起作用。腌制哈希值会使反向加密变得更加困难。即在散列之前将“9827345978457”添加到每个密码。 (总是同样不可食用的盐)。
电子邮件:验证是检查@和点。但它只是为了帮助用户拼错。清理电子邮件:db的参数化或转义,输出时使用htmlspecialchars()
。
注意,当用户可以输入任何文本并使其有效(即PW)时,preg_replace不适用。这些是最难对付的投入。
答案 1 :(得分:0)
如果您正在验证服务器端的数据,并且您的验证不需要应用程序业务逻辑(即您没有检查用户是否在其帐户中有足够的信用),您应该在控制器中进行验证。 / p>
如果验证需要业务逻辑,请在模型中实现它并通过控制器调用它。
您应该查看此stackoverflow链接Best Place for Validation in Model/View/Controller Model?
答案 2 :(得分: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;
}
?>
使用用户定义的函数验证请求的值。
答案 3 :(得分:0)