Preg_match, problème difficilement compréhensible

sailsee Messages postés 4 Date d'inscription dimanche 16 mai 2010 Statut Membre Dernière intervention 4 juin 2010 - 4 juin 2010 à 20:44
aquewel Messages postés 143 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 6 juin 2010 - 4 juin 2010 à 22:27
Bonjour,

Je travaille sur le contrôle d'un formulaire.

J'ai deux variables à vérifier avec une expression regulière $ip et $mail, une ip et un mail.
Si je fait :
echo preg_match('#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$#',$mail);
echo '
';
echo preg_match("/^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$/",$ip);


J'obtiens 1 si le mail ou l'ip est correcte, 0 sinon.

Mais si je crée une condition

if (preg_match('#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$#',$mail)==0)
{ 
$erreur =  $erreur  . '
le mail est invalide';
}
if (preg_match('/^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$/',$ip)==0)
{ 
$erreur =  $erreur  . ' 
l\'ip est invalide' ;
}


Ca ne fonctionne pas... Je n'obtiens jamais le message d'erreur au bon moment.
J'ai tout essayé : remplacer 0 par FALSE, utiliser !(preg_match(...

Ca ne fonctionne pas. Ca fait des heures que je cherche et je ne trouve pas !

3 réponses

aquewel Messages postés 143 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 6 juin 2010
4 juin 2010 à 21:31
yop, bon voila une petite rectification de ton code qui fonctionne...

<?php

$mail = 'aaa@a';
$ip = 'aaa@a';

/**
 * preg_match => renvoi 1 si ok
 * !preg_match => renvoi 0 si pas ok
 * empty / !empty => pour tester si le champ mail est completé
 */
if (!preg_match('#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$#', $mail) )
{ 
echo '
le mail est invalide';
}
if (!preg_match('/^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$/', $ip) )
{ 
echo ' 
l\'ip est invalide' ;
}
?>


en esperant que cela te conviendra.
++
0
sailsee Messages postés 4 Date d'inscription dimanche 16 mai 2010 Statut Membre Dernière intervention 4 juin 2010
4 juin 2010 à 21:58
Ben, ça ne fonctionne pas voici mon code complet. Ce que je ne comprend pas c'est que mes expressions regulières fonctionnent je les utilisent ailleurs et à part ce que j'ai indiqué plus haut, tout fonctionne

function checkuser($nom,$prenom,$pwd1,$pwd2,$droits,$role,$ip,$mail)
{
echo preg_match('#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$#',$mail);
echo '
';
echo preg_match("/^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$/",$ip); // affichage pour vérifier que mes exp regulières marchent

$erreur = 'Les erreurs suivantes ont été rencontrées :' ;
if ($nom '' or $prenom '' or $pwd1 == '' or $pwd2 == '' or $droits == '...' or $role == '...' or $mail='' or $ip='')
{
$erreur = '
Les champs ne sont pas tous remplis';
}
else
{
if (!preg_match('#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$#', $mail) )
{ 
$erreur =  $erreur  . '
le mail est invalide';
}
if (!preg_match('/^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$/',$ip))
{ 
$erreur =  $erreur  . ' 
l\'ip est invalide' ;
}
if (!(preg_match("#0|1|2|3#",$droits))) 
{ 
$erreur =  '
les droits sont invalides' ;
}
if (!(preg_match("#utilisateur|referent|manager#",$role)))
{ 
$erreur =  $erreur  . ' 
le rôle est invalide'; 
}
if (strlen($pwd1)>=255) 
{ 
$erreur =  $erreur  . ' - le mot de passe dépasse les 255 caractères';
}
if ($pwd1 != $pwd2) 
{ 
$erreur =  $erreur  . '
les mots de passe saisis sont différents' ;
}
}
throw new Exception ($erreur); 
}
0
aquewel Messages postés 143 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 6 juin 2010
4 juin 2010 à 22:27
ah ok lol.

Je propose pas souvent mon aide !
Ta fonction c'est pas du tout comme ca que je ferais.
Tu devrais t'orienter vers une classe (sur le site ya des codes et il y a phpclasses), parce que pour un formulaire ca peut aller mais plus tu vas avancer et tu vas etre perdu !

je te reecris pas tout, c'est pas le but, mais je te propose ca

<?php
/** 
 * FONCTION VERIFIE SI CHAMPS COMPLETE
 */
function checkuser($Donnees)
{
$erreur = 'Les erreurs suivantes ont été rencontrées :' ;

if(is_array($Donnees) ) {
foreach($Donnees as $cle=>$valeur) 
    	{ 
$valeurAtester = (!empty($valeur)) ? 'ok' : 'non';
   			$erreur .= $cle.' : '. $valeurAtester .'
'; 
    	} 

}

return $erreur;
}

/**
 * TABLEAU DES DONNES
 */ 
 $ArrayDonnees = array(
 		'nom' => $nom,
'prenom' => 'MonPrenom',
'pwd1' => $pwd1,
'pwd2' => $pwd2,
'droits' => $droits,
'role' => $role,
'ip' => $ip,
'mail' => $mail,
);

// APPEL FONCTION
echo checkuser($ArrayDonnees);
?>


ca te fait deja quelques pistes pour te debrouiller un peu plus tout seul !!!

deja lorsque tu fais $erreur = $erreur . ' ca me semble un peu bizare!
fais plutot $erreur .=

tu aurais du chercher comment faire une variable sur plusieurs lignes
0
Rejoignez-nous