Page 1 sur 1

Probleme de verification de champs

Posté : 14 mars 2006, 11:11
par sasg
Bonjour je debute en php , je m'aide du livre "PhP et Mysql pour les nuls"
J'essai de faire un script du livre et la verification des champs ne se fait pas mais il trouve les champs vides.
Voici le code de ma page:
<?php

echo "<html> <head><title>Adresse Client</title></head><body>";

$infos = array("prenom"=>"Prénom :",
				"nom"=>"Nom :",
				"codepostal"=>"Code postal :",
				"telephone"=>"Téléphone :");
//controler les champs
foreach ($_POST as $clé => $valeur)
{
if ($clé != "codepostal") 
	{
    if ($valeur =="") 
		{
        $champvide[$clé]="blanc";
    	}
	}
elseif ($clé=="prenom" or $clé=="nom")
	{
	if (!ereg("^[A-Za-z' -]{1,50}",$valeur)) 
		{
	  	$mauvaisformat[$clé]="mauvais";  
		}
	}
elseif ($clé=="telephone")
	{
	if (!ereg("^[0,9)( -] {7,20} (([xX]|(ext)|(ex))?[ -]{1,7})?$",
	$valeur )) 
		{
	    $mauvaisformat[$clé]="mauvais";
		}
	}
}//fin de la boucle foreach pour $POST

//Si l'un des champs est incorect
if (@sizeof($champvide) > 0 or @sizeof($mauvaisformat) > 0) 
{
//si l'un des champs est vide, afficher le message
	if (@sizeof($champvide)>0)//en cas de champ vide 
	{
	echo"<b>Un des champs obligaoires n'a pas été renseigné. Vous devez saisir:</><br>";
//affichage du nom des informations requises
	foreach ($champvide as $clé =>$valeur)
		{
		echo "&nbsp;&nbsp;&nbsp;{$infos[$clé]}<br>";
		}//fin de la boucle foreach pour les champs vides
	}
	if (@sizeof($mauvaisformat)>0)//en cas de champ vide 
	{
	echo"<b>Un ou plusieurs champs contiennent des informations qui semblent incorrects :</><br>";
//affichage du nom des informations requises
	foreach ($mauvaisformat as $clé =>$valeur)
		{
		echo "&nbsp;&nbsp;&nbsp;{$infos[$clé]}<br>";
		}//fin de la boucle foreach pour les champs vides
	}
//Réaficcher le formulaire
$nom=trim(strip_tags($_POST['nom']));
$prenom=trim(strip_tags($_POST['prenom']));
$codepostal=trim(strip_tags($_POST['codepostal']));
$telephone=trim(strip_tags($_POST['telephone']));

echo "<p><hr>
<form action='catalogue-animaux-chap8_13.php' method='POST'>
<center>
<table width='95%' border='0' cellspacing='0' cellpadding='2'>\n

<tr><td align='right'><b>{$infos['prenom']}</b></td>
		<td><input type='text' name='prenom' value='$prenom' size='35' maxlength='35'></td>
		</tr>\n
<tr><td align='right'><b>{$infos['nom']}</b></td>
		<td><input type='text' name='nom' value='$nom' size='35' maxlength='35'></td>
		</tr>\n
<tr><td align='right'><b>{$infos['codepostal']}</b></td>
		<td><input type='text' name='codepostal'  size='35' maxlength='35' value='$codepostal'></td>
		</tr>\n
<tr><td align='right'><b>{$infos['telephone']}</b></td>
		<td><input type='text' name='telephone' size='35' maxlength='65' value='$telephone'></td>
		</tr>\n

</table>
	<p><input type='submit' value='Validez'></p>
	</form></center>";
	exit();
}
echo "Bienvenue...";
?>
</body>
</html>
je ne comprend pas pourquoi il ne verifie pas les champs

Merci!

Posté : 14 mars 2006, 11:39
par goeb
salut,
if ($clé != "codepostal")
...
elseif ($clé=="prenom" or $clé=="nom")
...
Il y a là une incongruité : si $clé vaut "prenom", le programme va exécuter le if, et jamais le elseif.

Posté : 14 mars 2006, 11:54
par sasg
merci! j'ai rectifier de cette facon la:
//controler les champs
foreach ($_POST as $clé => $valeur)
{
	if ($valeur =="")
	{
			if ($clé != "codepostal") 
	    {
        $champvide[$clé]="blanc";
    	}
	}
elseif ($clé=="prenom" or $clé=="nom")
	{
	if (!ereg("^[A-Za-z' -]{1,50}",$_POST[$clé])) 
		{
	  	$mauvaisformat[$clé]="mauvais";  
		}
	}
Mais j'ai encore un probleme je ne comprend pas ce que cela signifie quelqu'un pourrait-il m'aider sur cette partie:
!ereg("^[0,9)( -]{7,20}(([xX]|(ext)|(ex))?[ -]{1,7})?$",
	$_POST[$clé] ))
c'est surtout la partie ereg avnt la virgule :?

Posté : 14 mars 2006, 17:04
par goeb
je vais essayer de te répondre :
"^[0,9)( -]{7,20}(([xX]|(ext)|(ex))?[ -]{1,7})?$"
- le ^ indique le début de la chaine de caractères
- le [0,9)( -] indique un caractère dans la liste 0,9)( -
- {7,20} indique que le précédent caractère peut etre présent entre 7 et 20 fois
- [xX] : x ou X
- ([xX]|(ext)|(ex))? : le ? dit que l'expression peut etre presente une fois ou bien pas du tout. et le | veut dire "ou bien".
- [ -]{1,7} : espace ou '-' entre 1 et 7 fois
- (...)? : l'expression est présente une fois ou bien pas du tout
- $ : fin de la chaine de caractères.

en somme, voici un exemple de chaine qui correspond à cette expression régulière :
0,0,0,0,0ext-----

voilà voilà.
je te conseille d'assimiler les expressions régulières. c'est un concept utile et intéressant.