【问题标题】:method returns false when it should return true方法在应该返回 true 时返回 false
【发布时间】:2013-09-20 21:19:59
【问题描述】:

我不明白为什么这个方法总是返回 false。我正在检查输入的密码的长度。绝对超过5个字符。输入字段的名称是正确的。但它总是抛出异常throw new Exception("Password must contain at least 6 characters.");。

方法:

public function checkPassword(){
        if(strlen($this->post_data['register_password']) > 5){

        }else{
            throw new Exception("Password must contain at least 6 characters.");
        }
    }

来电:

if( isset($_POST['register-submit'])){  
    $error = '';
    $register = new register($_POST, $dbh);
        try {
            if($register->checkUsername()){
                if($register->checkPassword()){

                }
            }
        } catch (Exception $e) {
            $error .= '<span style="color:red;">' . $e->getMessage() . '</span>';
        }
}

编辑:添加更多类

public $post_data = array();
private $dbh;
public function __construct($post_data, PDO $dbh){
        $this->error = array();
        $this->post_data = array_map('trim', $post_data);
        $this->dbh = $dbh;

    }

【问题讨论】:

  • 你的函数是否抛出错误?
  • $this-&gt;post_data['register_password'] 中有什么内容?
  • Erm... 如果密码长度相同,则您认为密码相同。所以“fish”和“j2o3”会被认为是一样的。
  • @crm:var_dump( $this-&gt;post_data['register_password'] ); 输出什么?
  • @Kolink 我认为这是用于注册目的。他只是在验证密码至少包含 6 个字符,以确保密码足够强大以创建帐户。

标签: php oop exception methods pdo


【解决方案1】:

尝试将var_dump($_POST) 放在调用代码的顶部。确保您有正确的密码变量名。我注意到您有register-submit 用于提交按钮,register_password 用于密码。您是否将连字符 (-) 与下划线 (_) 混合在一起?

【讨论】:

  • 不错的收获。不过,如果你陈述它而不是提出问题会更好。无论如何 +1!
  • @AmalMurali 我刚刚从上面复制了我的评论。足以说明问题并给出接受/关闭的答案。
【解决方案2】:

您使用$_POST 创建类register,然后使用$this-&gt;post_data 获取register_password。怀疑$this-&gt;post_data有问题,添加var_dump调试:

public function checkPassword(){
    if(strlen($_POST['register_password']) > 5){
        return true;

    }else{
        // for debug
        // var_dump($this->post_data['register_password']);
        throw new Exception("Password must contain at least 6 characters.");
    }
}

添加var_dump调试__construct:

public function __construct($post_data, PDO $dbh){
    $this->error = array();
    $this->post_data = array_map('trim', $post_data);
    var_dump($this->post_data);
    $this->dbh = $dbh;
}

【讨论】:

  • 好点,他实际上并没有返回真实。不返回任何东西,这意味着返回结果为空,这是假的。可能会更好地解释代码。
  • 如果这个答案能解释这个事实而不是仅仅转储一个代码片段,那就太好了。
  • @srain:请参阅 OP 的 this 评论。它正在返回NULL。
  • @AmalMurali,我觉得$this-&gt;post_data 有问题,所以你可以用$_POST 代替$this-&gt;post_data,我更新了答案。或者你可以粘贴register类或整个类的__construct函数。我们会检查的。
  • @AmalMurali,添加var_dump 以调试__construct,将输出粘贴到您的问题中,我认为register_password 将是null。
猜你喜欢
  • 1970-01-01
  • 2019-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-07
  • 2023-03-26
  • 1970-01-01
相关资源
最近更新 更多