Php If-условие с переменными класса не работает - PullRequest
0 голосов
/ 18 ноября 2011
class SignUp
{
      var $pass;
      var $repass;
      var $eMail;
      var $userName;

    function __construct($p,$rep,$uName,$mail)
    {
        $this->pass     = $p;
        $this->repass   = $rep;
        $this->userName = $uName;
        $this->eMail    = $mail;
    }

    public function checkData() 
    {
        if ($this->pass != $this->repass)
        {
            return 2;
        }
     }
}

Этот код, кажется, не работает, и я не знаю почему .. Он всегда возвращает 2, даже если они одинаковы.

Вот как я называю объект

$ch = new SignUp($_POST['password'], $_POST['repassword'], $_POST['uname'], $_POST['emailID']);
echo $ch->checkData();

Любая помощь будет оценена.

Ответы [ 4 ]

3 голосов
/ 18 ноября 2011

Хаос имени переменной

Скорее всего, проблема вызвана тем, что я называю очень заметным запахом кода.У вас есть ТРИ различных имени для каждой переменной, а не просто ОДИН.С таким большим количеством разных имен переменных легко ошибиться, и тогда мы получим результат, потому что одна из переменных будет всегда иметь значение NULL .

Например, пароль - пароль -pass - p

и т. д.

Используйте пароль везде!То же самое для остальных.

Каждый результат должен что-то возвращать

Возвращать что-то (и я бы возвратил TRUE / FALSE) также в случае равенства, например:

if ($this->password == $this->passwordRepeat)
{
    return TRUE;
}

return FALSE;

Неверное имя метода

Переименуйте ваш метод.Он сравнивает пароли, поэтому назовите его passwordsIdentical или comparePasswords.

2 голосов
/ 18 ноября 2011

Вы могли бы легко изолировать его, чтобы ваши переменные $ _POST не работали. В классе нет ничего плохого в том смысле, что сравнение не работает:

<?php
class SignUp{

      var $pass;
      var $repass;
      var $eMail;
      var $userName;

    function __construct($p,$rep,$uName,$mail){
        $this->pass=$p;
        $this->repass=$rep;
        $this->userName=$uName;
        $this->eMail=$mail;
    }


    public function checkData(){
        if($this->pass!=$this->repass)
        return 2;

    }
}

$a = new SignUp( "php", "notphp", "", "" );
$b = new SignUp( "php", "php", "", "" );

var_dump( $a -> checkData() );
//int(2)
var_dump( $b -> checkData() );
//NULL
var_dump( $a -> checkData() === $b -> checkData() ); 
//bool(false), they return different results.
?>

Как выглядит форма отправки HTML?

0 голосов
/ 18 ноября 2011

заменить это

если ($ this-> пройдет! = $ This-> снова проходить)

до

if(trim($this->pass) != trim($this->repass)) будет работать

0 голосов
/ 18 ноября 2011
<?php

/ * Проверьте этот код * /

 class SignUp{

      public $pass;
      public $repass;
      public $eMail;
      public $userName;

function __construct($p,$rep,$uName,$mail){
    $this->pass=$p;
    $this->repass=$rep;
    $this->userName=$uName;
    $this->eMail=$mail;
}


public function checkData(){
    if($this->pass!=$this->repass)
        return 2;

}



}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...