Nombre des erreurs s'affiche sans les erreurs

Mammouth du PHP | 725 Messages

02 juin 2011, 04:55

bonjour,

je fais une verification des champs avec une fonction, le nombre des erreurs s'affichent meme s'il n y a pas une erreur:
<?php

$this->error [] = '<li>La valeur '.$value.' ne correspond pas a la clef '.$key.'</li>;
						return false;


public final function getError(){
	
		$ret_err = ''; // ret_err a rien
		 if(count($this->error)>0)
		 {
		 	echo '<br>nbre d\'erreurs est: '.count($this->error).'<br>';
		 	var_dump($this->error).'<br>';
		 
         foreach($this->error as $erreur)// on loop pour chercher les erreurs
         {
         	
         	$ret_err .= $erreur; // on les recupere
         }
         
         echo '<br><hr width="200"><br>';
         echo '<font color="red"><b>Veuillez verifier les erreurs ci-dessous:</b></font><br>';
         echo '<ul>'; 
         echo $ret_err;
         echo '</ul>';
         }
         }
?>
et le resultat de var_dump:
nbre d'erreurs est: 6
array(6) { [0]=> NULL [1]=> NULL [2]=> NULL [3]=> NULL [4]=> NULL [5]=> NULL }
merci pour votre aide

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

02 juin 2011, 10:22

C'est parce que tu ne comptes pas le nombre d'erreur, mais le nombre d'éléments dans le tableau...

Le plus simple serait donc que lorsqu'un de tes tests ne retourne pas d'erreur, tu n'ajoutes rien dans le tableau (au lieu d'ajouter un null)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 725 Messages

03 juin 2011, 02:45

C'est parce que tu ne comptes pas le nombre d'erreur, mais le nombre d'éléments dans le tableau...

Le plus simple serait donc que lorsqu'un de tes tests ne retourne pas d'erreur, tu n'ajoutes rien dans le tableau (au lieu d'ajouter un null)
meme si j'ai ajoute un return false pour ne pas la considerer etant une erreur :(

si j'ai bien compris voila le code, mais ca marche pas
if($this->error === true)
{
foreach($this->error as $erreur)// on loop pour chercher les erreurs
         {
               
                $ret_err .= $erreur; // on les recupere
         }
         
         echo '<br><hr width="200"><br>';
         echo '<font color="red"><b>Veuillez verifier les erreurs ci-dessous:</b></font><br>';
         echo '<ul>';
         echo $ret_err;
         echo '</ul>';
         }
}

Mammouth du PHP | 725 Messages

06 juin 2011, 04:13

est ce que vous pouvez m'expliquer le methode a utiliser afin de le resoudre?

merci

ViPHP
xTG
ViPHP | 7331 Messages

06 juin 2011, 07:59

if($this->error === true)
#-o

N'est-ce pas un array ? Pourquoi tester un booléen ?

Mammouth du PHP | 725 Messages

07 juin 2011, 02:48

if($this->error === true)
#-o

N'est-ce pas un array ? Pourquoi tester un booléen ?
if (is_array($this->error) && (count($this->error)>0))
ca me retourne la meme chose sans citer qu'il y ait des erreurs :(

nbre d'erreurs est: 5
Veuillez verifier les erreurs ci-dessous:

ViPHP
xTG
ViPHP | 7331 Messages

07 juin 2011, 08:13

Et quel est ton code pour logguer les erreurs ?
Car à priori il log n'importe quoi (cf NULL).

Mammouth du PHP | 725 Messages

07 juin 2011, 15:30

Et quel est ton code pour logguer les erreurs ?
Car à priori il log n'importe quoi (cf NULL).
le voila:
$this->error [] = '<li>La valeur '.$value.' ne correspond pas a la clef '.$key.'</li>;
return false;

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

07 juin 2011, 22:15

Je sais qu'en général on râle parce qu'il y a trop de code, mais là, c'est un peu court jeune homme :)

La question est surtout : qu'est ce que tu mets dans ce tableau quand tu n'as pas d'erreur ? En effet, il semblerait que tu colles des null dedans alors qu'il ne faudrait rien ajouter pour éviter de comptabiliser des erreurs qui n'existent pas...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 725 Messages

08 juin 2011, 04:37

voila des exemples:
$this->error[] = '<li>The function <font color="red"><b>'.$fname.'</b></font> does NOT exists in '.__CLASS__.' class</li>';
    	return false;

if(($this->InptType == 'radio') OR ($this->InptType == 'checkbox'))
			{
				$this->error [] = (empty($this->InptValue)) ? '<li>The value for the '.$this->InptType.' is a MUST</li>' : Null;
			}

if(!in_array($this->InptType, $this->InptTypesArray))
				{
					$this->error[] = '<li><b>'.$this->InptType.'</b> is NOT a valid type, please choose one of the following types: <b>'.implode(', ',$this->InptTypesArray).'</b>.';
             		return false;
				}


ViPHP
xTG
ViPHP | 7331 Messages

08 juin 2011, 07:58

$this->error [] = (empty($this->InptValue)) ? '<li>The value for the '.$this->InptType.' is a MUST</li>' : Null;
:roll:

S'il n'y pas d'erreur pourquoi mettre null ?
if(empty($this->InptValue))
  $this->error [] = '<li>The value for the '.$this->InptType.' is a MUST</li>';

Mammouth du PHP | 725 Messages

08 juin 2011, 11:52

on ne peut pas la mettre de cette maniere:
$this->error [] = (empty($this->InptValue)) ? '<li>The value for the '.$this->InptType.' is a MUST</li>' : Null;

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

08 juin 2011, 21:24

Tu peux... Mais vu que cela ne fonctionne pas, ça vaut peut être le coup d'essayer la suggestion de xTG ;)

Le problème, c'est que "null", c'est quelque chose. Quelque chose qui n'est pas initialisé, mais c'est quelque chose. Du coup quand tu comptes le nombre d'erreurs contenue dans ton tableau, chaque null est comptabilisé comme une erreur..

Si tu ne mets rien (et mettre null, c'est mettre quelque chose) dans ton tableau quand il n'y a pas d'erreur le reste de ton code devrait fonctionner sans problème...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 725 Messages

09 juin 2011, 03:46

sinon cette methode:
if(is_array($this->error))
		{	
			foreach($this->error as $eK=>$eV)
			{
				if($eV != Null)
				{
	echo '<br><hr width="200"><br>';
         echo '<br>nbre d\'erreurs est: '.count($eV).'<br>';
         echo '<font color="red"><b>Veuillez verifier les erreurs ci-dessous:</b></font><br>';
         echo '<ul>'; //<font color="#FF00EE">
         echo $eV; // on les affiche
         echo '</ul>'; //</font>
					
				}
			}
		}

devlop78
Invité n'ayant pas de compte PHPfrance

09 juin 2011, 04:57

Non, tu détournes le problème ...

Le principe du tableau d'erreurs, est de lister les erreurs. Si tu mets null, c'est qu'il n'y pas d'erreurs, et ça perd du coup tout son sens logique. Ca marche, ça marchera, mais c'est pas propre. Là c'est vraiment un problème de conception.