REGEX ou expression régulière ne marchan pas

boss0211 Messages postés 264 Statut Membre -  
lami20j Messages postés 21644 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   -
Bonjour,
je souhaiterais savoir pourquoi il n'y a que la regex mail qui fonctionne.
car enfaite mon problème c'est que lorsque ladresse de site ou la description son trop court ou invalide je voudrais que le message qui est dans else apparaisse mais rien n(aparais!
Quel est le problème??
http://boss021190.free.fr/ajoutpub.php
MERCI BIEN!!

<?php

    if (!empty($_POST['pseudo']) AND  !empty($_POST['mail']) AND !empty($_POST['boutton']) AND !empty($_POST['site']) AND !empty($_POST['description'])) // Si on a quelque chose à enregistrer
    {
	   if(preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $_POST['mail']))
	    {
		   if(preg_match("#^http://[a-a0-9._-]{3,}\.[a-z]{2,4}$#", $_POST['boutton'] && $_POST['site']))
		    {
			 if(preg_match("#^[a-z0-9._-]{4,255}#", $_POST['description']))
			    {
	                  	   
	              	   
		                            
		                    
//Identifiants de connexion à la base de données.
require("config.inc.php");
                       
//Connexion à la base de données.
mysql_connect($host,$username,$password);
mysql_select_db($bdd_name);
                             
        // On utilise la fonction PHP htmlentities pour éviter d'enregistrer du code HTML dans la table
		$pseudo = htmlentities ($_POST['pseudo']);
        $mail = htmlentities ($_POST['mail']);
		$boutton = htmlentities ($_POST['boutton']);
		$site = htmlentities ($_POST['site']);
		$nom = htmlentities ($_POST['nom']);
		$description = htmlentities ($_POST['description']);
		$description = nl2br($description);      
                                 
        // Ensuite on enregistre le message
        $env=mysql_query("INSERT INTO pub VALUES('', '$pseudo', '$mail', '$boutton', '$site', '$nom','$description')");
                                                
        // On se déconnecte de MySQL
        mysql_close();
		        }   
		       else
		         {
		            echo '<strong>Votre description est sois trop long, sois trop court, elle doit contenir au minimum 4caractère</strong><br />';
		         }
			}
		   else 
		    { 
		      echo '<strong>Veuillez mettre des adresses de site valide!</strong><br />'; 
		    }
		}
		else
		{ 
		echo'<strong>Veuillez mettre une adresse mail valide!</strong><br />'; 
		}
    }
?>
A voir également:

4 réponses

RegCrazy
 
Some people, when confronted with a problem, think “I know, I’ll use regular expressions.”
Now they have two problems.


Jamie Zawinski, in comp.lang.emacs
0
Darshu Messages postés 303 Statut Membre 64
 
Excellente cette citation, et tellement vraie ... Je garde ! :)
0
Utilisateur anonyme
 
Pas mal la citation ^^

$_POST['boutton'] && $_POST['site'] renvoie un booléen ce qui fait que tu teste ta regex sur un booleen.
0
lami20j Messages postés 21644 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

Just pour l'info.


$a && $b : vaut 1 si $a et $b sont vrais.


Chose qui n'est pas spécifique à tous les langages.

Par exemple en Perl && c'est un opérateur court-circuit qui renvoie la partie gauche ou droite en fonction de teste et pas 1 ou 0 comme le fait php ou C par exemple.

$a && $b renvoie $a si $a faux sinon $b

Donc l'auteur de la citation n'a pas pris en compte tous les langages ;) se qui fait apparaître le 3ème problème ;)

Voilà un exemple
#! /usr/bin/perl
#
use warnings;use strict;

my $aa = "hello";
my $bb = "salut";

# la regex teste $aa ou $bb en fonction de ce que && va renvoyer

if ( ($aa && $bb) =~ /salut/ ) {
    print "\$aa vrai\n"; # puisque && renvoi $bb et regex teste $bb
}

# $aa faux
$aa =""; # en Perl une chaine vide est fausse
unless ( ($aa && $bb) =~ /salut/ ) {
    print "\$aa faux\n"; # puisque && renvoi $aa et regex teste $aa
}
lami20j

P.S. Ce qui est valable pour un langage n'est pas forcément valable dans les autre et vice versa
0