Condition IF avec un preg_match

Résolu/Fermé
Slylia Messages postés 58 Date d'inscription jeudi 27 mai 2010 Statut Membre Dernière intervention 4 février 2011 - 20 déc. 2010 à 17:02
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 - 20 déc. 2010 à 17:37
Bonjour à tous,

J'ai un soucis avec ma condition IF. Je cherche à vérifier que le champ Nom contient seulement des majuscules et minuscules. S'il n'en contient pas j'affiche un message d'erreur sinon j'insère l'information dans une base de données.
Le problème c'est que même si le champ contient autre chose que des caractères l'information est remplie dans la base de données.

Voila mon code :
$LAB_Nom = $_POST['LAB_Nom'];
$LAB_Nom = addslashes($LAB_Nom); 

if (preg_match("/([^A-Za-z])/"))
	{
	echo "Le nom du laboratoire ne doit contenir que des lettres !";
	}
	else
	{
$req_insertLabo = "INSERT INTO laboratoire (LAB_Id, LAB_Nom)
				  VALUES ('', '$LAB_Nom')";			  
$insertLabo = mysql_query($req_insertLabo, $connect) or die($req_insertLabo . " - " . mysql_error());
echo " /!\ Laboratoire ajouté /!\\" ;
}


Pouvez-vous m'aider ?

3 réponses

heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 130
20 déc. 2010 à 17:10
Sur "8274 Aerien 634 Aerostat 7676 Aeronautique"

la RE "/([^A-Za-z])/" va faire matcher la regex avec 'Aerien'



Pour indiquer que le match doit avoir lieu sur toute la chaîne testée, il faut dire à la regex: " tu dois matcher à partir du tout début, et tu dois aller comme ça jusqu'à la toute fin"



Soit une RE égale à ceci

"/^([^A-Za-z])\z/"



ou

"/^([^A-Za-z])\Z/" , je ne sais plus, à toi de regarder
0
Slylia Messages postés 58 Date d'inscription jeudi 27 mai 2010 Statut Membre Dernière intervention 4 février 2011 1
20 déc. 2010 à 17:17
J'ai essayé les 2 synthaxes et une nouvelle ligne de la table se crée quand même.
J'ai modifié un peu mon code pour prendre en compte les valeurs nulles :
if (preg_match("/^([^A-Za-z])\Z/"))
	{
	echo "Le nom du laboratoire ne doit contenir que des lettres !";
	include 'gestionlabo.php';
	}
	elseif ($LAB_Nom = "")
		{
		echo "Le nom du laboratoire ne doit pas être vide !";
		include 'gestionlabo.php';
		}
			else
			{
$req_insertLabo = "INSERT INTO laboratoire (LAB_Id, LAB_Nom)
				  VALUES ('', '$LAB_Nom')";			  
$insertLabo = mysql_query($req_insertLabo, $connect) or die($req_insertLabo . " - " . mysql_error());
echo " /!\ Laboratoire ajouté /!\\" ;
			}


Mais ça ne fonctionne toujours pas.
0
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 130
20 déc. 2010 à 17:37
Pardon, je n'ai pas fait gaffe:

il faut répéter le symbole [^A-Za-z]

Ce symbole représente UNE lettre. Disons qu'il represente ce qui doit se trouver à UNE position. Et ce quelque chose n'est pas fixé, c'est l'une des valeurs d'un ensemble, c'est à dire un des caractères définis entre [ ]





if (preg_match("/^([^A-Za-z]+)\Z/"))





En mettant un + au lieu d'une *, on s'assure qu'une chaîne vide ne serait pas acceptée.
0