所以你在这里问了很多不同的问题。我将一一介绍。
PHP应该去哪里,嵌入在html文件中,在表单action =“”提交的单独的php文件中,或者在包含文件中?
PHP 永远不会直接嵌入到 HTML 文档中。相反,将 PHP 视为动态 HTML 生成器。它创建发送到浏览器的 HTML(或 JSON,或其他),但实际上从未发送到浏览器本身。这就是为什么它被称为服务器端语言,而不是 JavaScript(也可以是服务器端,但这不相关)。所以你应该可以把你的验证放在你想要的任何地方。它需要在action
调用表单时发生,所以它需要在发生的任何地方发生。像下面这样的东西应该可以工作:
<?php
function validate($data) {
// Do your validation here, and return an array of errors.
return $errors;
}
// Run the validation on the data posted from the form.
$errors = validate($_POST);
if (empty($errors)) {
// The data was valid, save it to the database
// (be sure to sanitize the data first).
} else {
// The data was not valid, redirect the user or whatever.
}
如果我使用的是盐、散列或加密函数,那么安全方面的最佳做法是什么?它应该在包含文件中吗?
是的,使用加密功能。它不需要位于单独的文件中以确保安全:加密功能提供了安全性,而不是用户看不到文件的事实(阅读:实际安全性,而不是通过混淆的安全性)。但是,无论您使用什么盐来散列该值,都应该位于无法通过 Web 访问的单独文件中。如果用户可以看到您的哈希算法和盐,他们就可以开始暴力破解您的数据。
jQuery 验证是浪费时间吗,用 PHP 来做会更好吗?
jQuery 验证应该更多地被视为 UI/UX 改进而不是实际验证。由于您已经提到的原因,客户端(阅读:JavaScript)验证永远不应取代服务器端(阅读:PHP)验证。但我确实认为它可以为更好的用户体验做出贡献,所以有时两者都值得。
我会做的一件事是使用相同的方法来验证服务器端和客户端,这样您就不必编写两次验证代码。例如,如果您将验证函数放在另一个文件中,您可以使用 AJAX 将表单数据发送给它,然后接收返回的表单错误。
希望这可以帮助!
更新:另外,如果您正在做的是登录用户,请查看password_compat
,它将成为 PHP 5.5 中 PHP 标准库的一部分。该库应该以可升级的方式为您解决许多安全问题。