使用PHP验证表单的最佳方法

时间:2016-01-13 05:54:20

标签: php forms validation

使用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>

4 个答案:

答案 0 :(得分:1)

验证取决于您的程序逻辑。将适当的逻辑应用于用户输入的每个字段。不相信它。我会谈谈消毒。在db查询中使用之前进行清理。在打印到HTML之前也要清理。 2种不同的消毒方式。

清理数字是最简单的: $var = (int)$var; 现在$var无法伤害任何事情。 db和html输出的安全性。

对于字符串数据我执行preg_replacestr_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)

我建议您从packagist选择一个包。

PHP有许多与表单相关的扩展,但这里有一些很受欢迎的扩展:

这些链接转到相应框架的文档页面。给他们一个阅读,并选择最适合你的那个。

您应该使用composer进行安装。