Verifier si une fonction retourne TRUE dans une class

Mammouth du PHP | 725 Messages

26 août 2011, 17:37

bonjour,

J'aimerais verifier ma fonction Verif si elle retourne TRUE, si oui la fonction Envoyer va afficher "Merci", le probleme du code c'est qu'il affiche toujours "Des erreurs ont ete trouve" meme si je remplis le champs nom:
<?php

class maClass
{
    
    public function Verif($fields, $method=array(), $Message){
         
         // code
         
            foreach($this->method as $m1=>$m2)
            {
                
                switch($m1)
            {
                case 'min':
                    if(strlen($_POST[$this->fields]) < $m2)
                        {
                            return FALSE;   
                        }
                    return TRUE;    
                    break;
            }
            }
            }

 	public function Envoyer() {
 
        if($this->Verif($this->fields, $this->method=array(), $this->Message))
        {
            return TRUE;
        }
        else
        {
            return FALSE;
        }
    }
    
}


$v = new maClass();

    if(isset($_POST['send'])){
    
            
                $v->Verif('nom', array('min'=>5), 'Minimum de caracteres est 5');
                
                if($v->Envoyer()) {
               
                    echo 'Merci'; 
                        }
                        else
                        {
                        echo 'Des erreurs ont ete trouve<br>';
                        }
                    }
?>
merci a vous

ViPHP
xTG
ViPHP | 7331 Messages

26 août 2011, 18:54

Ta fonction est caduque car quand tu fais le premier return tu quittes la boucle et donc tu sautes les autres champs.
Utilises plutôt un booléen que tu places à false dès que tu rencontres une erreur, et puis à la fin de la boucle tu return le booléen.
De plus ton switch n'a pas de condition default, il est à parier que ta fonction ne fait jamais rien et ne rentre pas dans la condition "min". ;)

Mammouth du PHP | 725 Messages

14 sept. 2011, 08:48

desole xTG pour le retard, j'avais un probleme de connexion, est ce que tu peux me donner un exemple??

ViPHP
ViPHP | 2577 Messages

14 sept. 2011, 09:54

Il faut déplacer le "return true" après la boucle foreach. La conséquence est que tu retourne false à la première erreur rencontrée (interuption du traitement à la première erreur) et en fin du contrôle (après foreach) tu retournes bien true.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

14 sept. 2011, 20:59

Il y a effectivement plusieurs problèmes de conception, la plupart signalées par xTG, mais je pense que l'erreur vient surtout de cet appel à la méthode verif() en passant des attributs qui n'ont pas été définis :
if($this->Verif($this->fields, $this->method=array(), $this->Message)) 
Je pense qu'il te faut suivre ton algorithme pas à pas pour voir ce qu'il fait, cela te permettra d'éliminer pas mal d'erreur...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 725 Messages

20 sept. 2011, 08:22

mais je pense que l'erreur vient surtout de cet appel à la méthode verif() en passant des attributs qui n'ont pas été définis :
if($this->Verif($this->fields, $this->method=array(), $this->Message)) 
ces attributs sont deja pre-definis, je les note pas afin de limiter mon code ici

@Mazarini : j'ai pas compris :(

ViPHP
ViPHP | 2577 Messages

20 sept. 2011, 09:13

public function Verif($fields, $method=array(), $Message) {
    foreach($this->method as $m1=>$m2) {
         switch($m1)   {
                case 'min':
                    if(strlen($_POST[$this->fields]) < $m2) {
                            return FALSE;  
                    }
//                return TRUE;    à supprimer
                    break;
        }
     }
    return TRUE;    // à ajouter
}
Il ne faut retourner true qu'à la fin de la fonction, c'est à dire si aucune erreur n'a été détectée et non pas à la première saisie correcte. J'ai un doute sur $this->fields dont je ne sais pas d'ou il provient.