try catch throw механизъм

pro12

Registered
Имам няколко въпроса относно механизма.
PHP:
<?php
 
class te  {
    protected $user;
    protected $password;

    public function __construct($user, $password) {
        $this->user=$user;
        $this->password=$password;
    }

    public function b() { 
        
         if ($this->user == NULL) {  
  
              throw new Exception('nod', 22);

    
        } 
            if($this->password == NULL){
                throw new Exception(' no pass', 11);
            }
                
    }    
    public function ve(){
         echo $this->user;
    }
}
 if (isset($_POST['send'])){
   $user = $_POST['username'];
   $password = ($_POST['pass']);
   
   $cpassword = md5($_POST['ccpass']);        
  
   try{                    
   $t = new te($user, $password);
    $t->b();
    $t->ve();
   } catch (Exception $exc){
       echo $exc->getMessage();
   }
   
}
?>
Защо като криптирам паролата с мд5 проверката дали е празно полето парола не дава грешка катоо е празно полето?
Как мога да направя, така че да брои колко празни полета exception има и да показва едновременно кои полета не са попълнени?
 
Защо като криптирам паролата с мд5 проверката дали е празно полето парола не дава грешка катоо е празно полето?

Защото md5 на празен стринг е:

Код:
string(32) "d41d8cd98f00b204e9800998ecf8427e"

Което не е равно на NULL.

Може да направиш нещо от сорта на:

Код:
function b() {
    $errors = [];

    if($this->user === null) {
         $errors[] = 'User is null.';
    }

    if($this->password === null) {
         $errors[] = 'Password is null.';
    }
     if(count($errors) > 0) 
          throw new Exception(implode(', ', $errors), 100);
}
 
Грешен ти е подхода. Първо проверяваш, след това хешираш. Защото по твоята логика, ако направиш проверка дали паролата е по-малка от 4(Да речем, че имаш такова правило в твоя сайт да не допускаш потребителите да пишат по-кратки пароли от 4), то след хеширането, дори да напишеш за парола дори един символ, то ще преминеш проверката, защото ще ти върне дължина от 32 символа.

Ако правиш някакъв такъв клас, за контрол на потребителите, то е добре валидации от този род да ги направиш в класа, а не извън него.
 

Back
Горе