Page 1 sur 1

Verifier si une fonction retourne TRUE dans une class

Posté : 26 août 2011, 17:37
par rimie
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

Re: Verifier si une fonction retourne TRUE dans une class

Posté : 26 août 2011, 18:54
par xTG
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". ;)

Re: Verifier si une fonction retourne TRUE dans une class

Posté : 14 sept. 2011, 08:48
par rimie
desole xTG pour le retard, j'avais un probleme de connexion, est ce que tu peux me donner un exemple??

Re: Verifier si une fonction retourne TRUE dans une class

Posté : 14 sept. 2011, 09:54
par Mazarini
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.

Re: Verifier si une fonction retourne TRUE dans une class

Posté : 14 sept. 2011, 20:59
par Ryle
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...

Re: Verifier si une fonction retourne TRUE dans une class

Posté : 20 sept. 2011, 08:22
par rimie
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 :(

Re: Verifier si une fonction retourne TRUE dans une class

Posté : 20 sept. 2011, 09:13
par Mazarini
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.