课堂设计 - 验证用户输入

时间:2011-09-30 20:17:37

标签: php

我使用下面的clas来验证用户输入。最初它只是一组静态功能组合在一起。

但是,我将其修改为对象样式并添加到私有memeber中以保存用户输入数组。使这个类具有适应性的下一步是什么,即更通用,以便其他人可以将它作为库的一部分使用?

$ message是验证失败时显示给用户的文本。

图书馆代码:

class validate
  {
  private $input;
  function __construct($input_arg)
    {
    $this->input=$input_arg;
    } 
  function empty_user($message)    
    {
    if((int)!in_array('',$this->input,TRUE)) return 1;
    echo $message;return 0; 
    }
  function name($message)          
    {
    if(preg_match('/^[a-zA-Z-\.]{1,40}$/',$this->input['name'])) return 1;
    echo $message;return 0; 
    }
  function email($message)
    {
    if(preg_match('/^[a-zA-Z0-9._s-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{1,4}$/',$this->input['email'])) return 1;
    echo $message;return 0; 
    }
  function pass($message)
    {
    if(preg_match('/^[a-zA-Z0-9!@#$%^&*]{6,20}$/',$this->input['pass'])) return 1;
    echo $message;return 0;
    }
  }

申请代码:

  function __construct()
    {
    parent::__construct();
    $obj=check_new($this->_protected_arr);
    $a='<si_f>Please enter both an email and a password!';
    $b='<si_f>Please enter a valid email!';
    $c='<si_f>Please enter a valid password!';
    if($obj->empty_user($a) && $obj->email($b) && $obj->pass($c) && self::validate())
      {
      self::activate_session();
      echo "<si_p>";
      }
    }

2 个答案:

答案 0 :(得分:1)

也许值得看看Zend Validate?或者任何其他PHP框架验证类。然后扩展它们以添加您想要的功能。

在回答你的问题时,是否值得在课堂上使用另一个变量,以便检查错误?

  class validate
  {
  private $input;
  public $error = false;
  function __construct($input_arg)
    {
    $this->input=$input_arg;
    } 
  function empty_user($message)    
    {
    if((int)!in_array('',$this->input,TRUE)) return 1;
    echo $message;$this->error = "Empty message";
    }
 ... else
  }
$validate = new validate($empty_message);
if( !$validate->empty_user('this input is empty') === false)
{
    echo "Was not empty";
}

答案 1 :(得分:1)

我不会在泛型类中编写所有这些函数。我宁愿拥有执行特定检查的单独函数,也许是一个在我的特定输入上调用这些检查的特定类。

这个类现在回声了,这对于像这样的类来说永远不是一个好的解决方案。只是让它执行检查并在出现问题时引发异常。如果异常太难,或者不适合您的体系结构,请让您的函数返回false,并设置一个可以在以后读取的属性。

关于您的具体检查:

  • 您的电子邮件检查非常严格,不允许所有电子邮件地址。例如,域也可以是IP地址,用户名(@之前的部分)可以包含许多模糊字符,包括@。是的,真的!

  • 为什么密码必须至少为6个字符?为什么你要将密码限制为20个字符?我使用超过20个字符的密码,我也知道很多其他人也这样做。让每个人都输入他们想要的一切。任何东西。如果愿意的话,让他们发布3MB的文字。如果他们想要,让他们包括unicode字符。将一堆汉字作为密码有什么更好的保护?如果他们只想进入a,那也是他们的责任。 你永远不应该存储密码本身,所以只要哈希他们输入的内容并存储给你的32个字符(如果你使用MD5哈希)。您可以拒绝的唯一密码是空密码。别的什么都应该去。

  • 名称相同。 40个字符?真。我可以想象人们的名字很长。添加更多空间。字节数并不昂贵,并不是说你将拥有20亿用户。