Page 1 sur 2

fonction de filtrage d'entrer de formulaire

Posté : 12 mars 2006, 21:34
par BeRoots
salut à tous :D

ce que je veut savoir en faite, c'est si je peut definir une variable globale pour tout mes champs de formulaire via $_POST afin de pouvoir simplement la verifier avec preg_match_all :-k

(au lieu de faire un preg_match_all pour chacun de mes champs et ce en double car j'ai deux filtre)

donc en claire, comment faire pour avoir une seul variable $_post pour tout un formulaire (avec plusieur champs)?

MERCI D'AVANCE :wink:

Posté : 12 mars 2006, 21:48
par ouckileou
Salut,

$_POST est un tableau, donc en mettant tes filtres de vérification dans une fonction, tu as moyen de l'appliquer facilement à tous les champs/cellules du tableau, soit avec une boucle, soit avec la fonction qui permet de passer une fonction sur tout un tableau (je ne me rappelle plus du nom)

Edition : la fonction en question est array_map()
http://fr3.php.net/manual/fr/function.array-map.php

Posté : 13 mars 2006, 20:27
par BeRoots
voila j'ai essayer de faire tout ça mais sans succes :cry:

j'ai essayer ceci (ça passe mais aucun message d'erreur :? )
if(isset($_POST['envoi']))
{
    /* Récupération des données du formulaire */
    $pseudo    = isset($_POST['pseudo'])    ? trim($_POST['pseudo'])    : "";
    $pass      = isset($_POST['pass'])      ? trim($_POST['pass'])      : "";
    $passverif = isset($_POST['passverif']) ? trim($_POST['passverif']) : "";
    $prenom    = isset($_POST['prenom'])    ? trim($_POST['prenom'])    : "";
    $nom       = isset($_POST['nom'])       ? trim($_POST['nom'])       : "";
    $adresse   = isset($_POST['adresse'])   ? trim($_POST['adresse'])   : "";
    $ville     = isset($_POST['ville'])     ? trim($_POST['ville'])     : "";

    /**
     * Définition des variables servant au traitement de l'adresse électronique et du numéro de
     * téléphone: on utilise ici des expressions régulières.
     */

/* ici la regex de touts les caracteres accepter*/
    $invalid_insert_security1 = "#([[:blank:]]+|[\w]+|[-)/(!?.,;:@]+)#";

/* ici la regex de touts les caracteres banit*/
    $invalid_insert_security2 =  "#((\" {1,}\")|(\"\"{1,})|(\"\"))|((\' {1,}\')|(\'\'{1,})|(\'\'))#";

    /* filtrage des entrées du formulaire */
    /* fonction de verification */
    function filtre_security ($a)
    {
             if (!(preg_match_all($invalid_insert_security1, $a)) && !(preg_match_all($invalid_insert_security2, $a)))
             {
             /* si caractere invalide */
             return $error1 = "true";
             }
             if ((preg_match_all($invalid_insert_security2, $a)))
             {
             /* si injections */
             return $error2 = "true";
             }
     }
     /* mise en tableau des contenus des champs du formulaire */
     $a = $_POST['envoi'];
     $post_list = array_map("filtre_security", $a);

    /**
     * Traitement des champs invalides
     */
    if ($error1 == 'true'||$error2 == 'true')
    {
        if ($error1 == 'true')
        {
        /* si caractere invalide */
             print "<p class='error'>ALERTE DE SECURITE N°1:<br />Vous avez utilis&eacute;s des caract&egrave;res interdits</p>\n";
        }
        if ($error2 == 'true')
        {
        /* si caractere invalide */
             print "<p class='error'>ALERTE DE SECURITE N°2:<br />Vous avez utilis&eacute;s des caract&egrave;res interdits</p>\n";
        }
    }
    else
    {
      print "tout est correct"
    }
}
?>
ce n'est qu'une breve de mon code mais le reste fontionne parfaitement :wink:

j'ai surement dut mal m'y prendre mais lorsque je met des caractère invalide dans les champs j'ai le message "tout est correct" :?

si vous comprenner mon erreur au niveau de la fonction filtre_security :ccool:

Posté : 13 mars 2006, 20:35
par Cyrano
Ta fonction est bizarrement conçue :
return $error1 = "true";
C'est illogique:
return true;
Ça je le comprendrais;
$error1 = true;
return $error1;
Ça aussi.
Ce qui pose problème, c'est que quelques lignes plus loin tu as la même chose avec $error2 : dans ce cas, au lieu de retourner un booléen, retourne un tableau. initialise un tableau avec des valeurs à false par exemple et modifie les valeurs si les alternatives sont vérifiées.
<?php
function filtre_security ($a)
{
    $erreurs = array(1 => false, 2 => false);
    if (!(preg_match_all($invalid_insert_security1, $a)) && !(preg_match_all($invalid_insert_security2, $a)))
    {
        /* si caractere invalide */
        $erreurs[1] = true;
    }
    if ((preg_match_all($invalid_insert_security2, $a)))
    {
        /* si injections */
        $erreurs[2] = true;
    }
    return $erreurs;
}
?>
À partir du retour, tu peux vérifier les résultats individuels des deux expressions.

Posté : 14 mars 2006, 15:27
par BeRoots
ok, j'ai fait la modif mais maintenant j'ai le message d'erreur suivant:
Warning: array_map(): Argument #2 should be an array in c:\program files\easyphp1-8\www\chart_php2\admin\form_inscription23_final.php on line 92
mon code est maintenant:
if(isset($_POST['envoi']))
{
    /* Récupération des données du formulaire */
    $pseudo    = isset($_POST['pseudo'])    ? trim($_POST['pseudo'])    : "";
    $pass      = isset($_POST['pass'])      ? trim($_POST['pass'])      : "";
    $passverif = isset($_POST['passverif']) ? trim($_POST['passverif']) : "";
    $prenom    = isset($_POST['prenom'])    ? trim($_POST['prenom'])    : "";
    $nom       = isset($_POST['nom'])       ? trim($_POST['nom'])       : "";
    $adresse   = isset($_POST['adresse'])   ? trim($_POST['adresse'])   : "";
    $ville     = isset($_POST['ville'])     ? trim($_POST['ville'])     : "";

/* ici la regex de touts les caracteres accepter*/
    $invalid_insert_security1 = "#([[:blank:]]+|[\w]+|[-)/(!?.,;:@]+)#";

/* ici la regex de touts les caracteres banit*/
    $invalid_insert_security2 =  "#((\" {1,}\")|(\"\"{1,})|(\"\"))|((\' {1,}\')|(\'\'{1,})|(\'\'))#";

    /* filtrage des entrées du formulaire */
    /* fonction de verification */
function filtre_security ($a)
    {
        $erreurs = array(1 => false, 2 => false);
        if (!(preg_match_all($invalid_insert_security1, $a)) && !(preg_match_all($invalid_insert_security2, a)))
        {
            /* si caractere invalide */
            $erreurs[1] = true;
        }
        if ((preg_match_all($invalid_insert_security2, $a)))
        {
            /* si injections */
            $erreurs[2] = true;
        }
        return $erreurs;
    }
     /* mise en tableau des contenus des champs du formulaire */
     $a = $_POST['envoi'];
     $post_list = array_map("filtre_security", $a);

    /**
     * Traitement des champs invalides
     */
    if ($erreurs[1] = true||$erreurs[2] = true)
    {
        if ($erreurs[1] = true)
        {
        /* si caractere invalide */
             print "<p class='error'>ALERTE DE SECURITE N°1:<br />Vous avez utilis&eacute;s des caract&egrave;res interdits</p>\n";
        }
        if ($erreurs[2] = true)
        {
        /* si caractere invalide */
             print "<p class='error'>ALERTE DE SECURITE N°2:<br />Vous avez utilis&eacute;s des caract&egrave;res interdits</p>\n";
        }
    }
    else
    {
      print "tout est correct"
    }
}
?>
en plus de ça, j'ai mes deux messages ALERTE DE SECURITE N°1 et N°2 même si mes champs sont correct :?

cela vient peut être de mes regex :-k

Pour en revenir au problème de array_map, je croyait pourtant que $_POST etait un tableau donc je voit pas trop :?

si quelqu'un comprend mon erreur :wink:

merci d'avance

Posté : 14 mars 2006, 15:36
par ouckileou
oui $_POST est un tableau, mais toi tu ne passes qu'une cellule...
 /* mise en tableau des contenus des champs du formulaire */
     $a = $_POST['envoi']; // <----- ICI
     $post_list = array_map("filtre_security", $a); 

Posté : 14 mars 2006, 15:56
par BeRoots
j'ai bien essayer de mettre le mon de chaque cellule mais aucun succes :cry:
     /* analyse champs par champs du formulaire par l'analyse du tableau $_POST*/
     $a = $_POST['pseudo', 'pass', 'passverif', 'prenom', 'nom', 'adresse', 'ville'];
     $post_list2 = array_map("filtre_security", $a);
j'ai aussi essayer de mettre les numeros de ligne mais rien nom plus :cry:
     /* analyse champs par champs du formulaire par l'analyse du tableau $_POST*/
     $a = $_POST[0, 1, 2, 3, 4, 7, 9];
     $post_list2 = array_map("filtre_security", $a);
toujour le même message d'erreur:
Parse error: parse error, expecting `']'' in c:\program files\easyphp1-8\www\chart_php2\admin\form_inscription23_final.php on line 90
je vais retourner à la doc mais y'a pas grand chose sur $_POST :?

si quelqu'un pouvait m'expliquer plus en detail :wink:

Posté : 14 mars 2006, 15:59
par ouckileou
Plus c'est simple moins on comprend :lol:

$_POST est un tableau, dont chaque cellule contient une donnée de ton formulaire
la fonction attend un tableau, pour appliquer ta fonction de vérification à chaque cellule

donc... tu passes directement $_POST
$post_list = array_map("filtre_security", $_POST);

Posté : 14 mars 2006, 16:22
par BeRoots
ok, je venait justement d'essayer ça au dire de la doc :oops:

j'ai donc du mettre à jour ma fonction avec $_POST et maintenant le problème viens de la fonction :?

en faite ça vient plus précisement des deux conditions if de celle ci:
    function filtre_security ($_POST)
    {
        $erreurs = array(1 => false, 2 => false);
        if (!(preg_match_all($invalid_insert_security1, $_POST)) && !(preg_match_all($invalid_insert_security2, $_POST)))
        {
            /* si caractere invalide */
            $erreurs[1] = true;
        }
        if ((preg_match_all($invalid_insert_security2, $_POST)))
        {
            /* si injections */
            $erreurs[2] = true;
        }
        return $erreurs;
    }
     /* analyse champs par champs du formulaire par l'analyse du tableau $_POST*/
     $post_list = array_map("filtre_security", $_POST);
j'ai une pluie des messages suivant pour les deux ligne if:
Notice: Undefined variable: invalid_insert_security1 in c:\program files\easyphp1-8\www\chart_php2\admin\form_inscription23_final.php on line 77
Warning: preg_match_all() expects at least 3 parameters, 2 given in c:\program files\easyphp1-8\www\chart_php2\admin\form_inscription23_final.php on line 77
Notice: Undefined variable: invalid_insert_security2 in c:\program files\easyphp1-8\www\chart_php2\admin\form_inscription23_final.php on line 77
je ne voit pas pourquoi mes variables invalid_insert_security 1 et 2 sont indefinie mais le problème doit certainement venir de l'utilisation de preg_match_all :-k
le truc c'est que je ne voit pas trop quel 3ème parametre ajouter :-k

je retourne à la doc, si quelqu'un a une idée :wink:

merci d'avance :ccool:

Posté : 14 mars 2006, 16:31
par ouckileou
tes variables sont définies, mais en dehors de la fonction, donc dans la fonction tu ne peux pas les utiliser

définis les à l'intérieur ou passe les en paramètre

Posté : 14 mars 2006, 17:04
par BeRoots
ok, merci :wink:
j'y avait pensé mais j'étais pô sur :oops:
pour ce qui est du message pour preg_match_all:
Warning: preg_match_all() expects at least 3 parameters, 2 given in c:\program files\easyphp1-8\www\chart_php2\admin\form_inscription23_final.php on line 77
vue que c'est pour une detection de caractère non conforme dans le premier cas et pour une detection de chaines interdites dans le second cas, il risque d'y avoir une petite difference entre les deux :-k

j'ai mis $out et $out2 pour chacun des cas et maintenant plus de message d'erreur :)

par contre j'ai mes deux message ALERTE DE SECURITE (1 et 2) qui s'affiche or il n'y a aucun caractère invalide dans mes champs de formulaire :?

histoire de me faire comprendre, je tiens à preciser que ma regex n°1 definie touts les caractère que j'accepte et la regex n°2 definie toutes les chaines à refuser:
$invalid_insert1 = "#([[:blank:]]+|[\w]+|[-)/(!?.,;:@]+)#";
$invalid_insert2 =  "#((\" {1,}\")|(\"\"{1,})|(\"\"))|((\' {1,}\')|(\'\'{1,})|(\'\'))#";

je vous remet le code mis à jour de la fonction:
/* filtrage des entrées du formulaire */
    /* fonction de verification */
    function filtre_security ($_POST)
    {
$invalid_insert1 = "#([[:blank:]]+|[\w]+|[-)/(!?.,;:@]+)#";
$invalid_insert2 =  "#((\" {1,}\")|(\"\"{1,})|(\"\"))|((\' {1,}\')|(\'\'{1,})|(\'\'))#";
$erreurs = array(1 => false, 2 => false);
        if (!(preg_match_all($invalid_insert1, $_POST, $out)) && !(preg_match_all($invalid_insert2, $_POST, $out2)))
        {
            /* si caractere invalide */
            $erreurs[1] = true;
        }
        if ((preg_match_all($invalid_insert2, $_POST, $out2)))
        {
            /* si injections */
            $erreurs[2] = true;
        }
        return $erreurs;
    }
     /* analyse champs par champs du formulaire par l'analyse du tableau $_POST*/
     $post_list = array_map("filtre_security", $_POST);

    /**
     * Traitement des champs invalides
     */

    if ($erreurs[1] = true||$erreurs[2] = true)
    {
        if ($erreurs[1] = true)
        {
        /* si caractere invalide */
             print "<p class='error'>ALERTE DE SECURITE N°1:<br />Vous avez utilis&eacute;s des caract&egrave;res interdits</p>\n";
        }
        if ($erreurs[2] = true)
        {
        /* si caractere invalide */
             print "<p class='error'>ALERTE DE SECURITE N°2:<br />Vous avez utilis&eacute;s des caract&egrave;res interdits</p>\n";
        }
    }
    else
    {
      print "tout est correct"
    }
} 
si quelqu'un comprend mon soucis :wink:

je retourne à la doc mais sans trop d'espoir ce coup là :?

Posté : 15 mars 2006, 01:12
par BeRoots
bon j'ai tout refais histoire de simplifier en ne faisant qu'un seul filtre via une regex et j'utilise preg_match car il n'y a pas d'interet à rechercher plus loin que le premier cas interdit détecté:wink:

mais j'ai toujour ce dernier detail à regler:

lorsque je remplis correctement le formulaire, j'ai toujour mon message "ERREUR DE SECURITE: vous avez entrer des caractères interdits".

pourtant la fonction filtre_security ne devrait trouver aucun caractères interdits car ma regex $invalid_insert_security a été tester et retester et elle fonctionne à merveille :-k

c'est donc ma fonction qui bug :?

Je vous est arranger le code afin que vous puissiez faire des tests en local depuis un simple copier/coller :wink:

ne vous laisser pas abbatre par la longeur du code. j'ai encadrer la fonction de commentaire pour cibler le problème ;)

voici le code :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<html>

<head>

<title>:: Formulaire d'inscription ::</title>
<style type="text/css">
/* <![CDATA[ */
body {
text-align: center;
background-color: white;
}
#page {
width : 525px;
margin-left: auto;
margin-right: auto;
color: black;
background-color: gray;
border: 1px solid black;
text-align: center;
padding: 10px;
}
.titre {
font-family: verdana, helvetica, sans-serif; 
font-size: 1.4em;
font-weight: bold;
text-decoration: underline;
text-align: center;
margin: 0;
padding: 0;
color: red;
}
p {
font-family: verdana, helvetica, sans-serif;
font-size: 10pt;
font-weight: bold;
text-align: left;
color: black;
}
label {
float: left;
font-family: verdana, helvetica, sans-serif;
font-size: 10pt;
font-weight: bold;
}
fieldset {
width: 500px;
padding: 10px;
text-align: right;
border: 3px double #FF8C00;
margin: 0;
clear: left;
background-color: navy;
}
input {
border: 1px solid #066; 
background-color: #ff9; 
color: black;
}
input.cases {
width: 200px;
margin-top: 3px;
}
input.verif  {
width: 150px;
height: 30px;
background-color: blue;
font-weight : bold;
padding: 0;
margin: 0;
border: 0;
cursor: pointer;
}
input.verif:hover {
background-color: cyan;
}
div.c3 {
text-align:center;
margin-top: 1em;
}
.etoile {
color: red;
font-size: 1.3em;
font-weight: normal;
vertical-align: middle;
margin-right: 5px;
}
.legend {
background-color: red;
border: 3px double #FF8C00;
margin-top: 10px;
margin-bottom: 5px;
float: left;
}
.error {
text-align: left;
color: red !important;
}
.info {
font-family: verdana, helvetica, sans-serif;
font-size: 14pt;
font-style: italic;
font-weight: normal;
text-decoration: none;
cursor: help;
color: black ;
}
.info:hover {
color: gray;
}
/* ]]> */
</style>

</head>
<body>
<div id="page">
<?php
/**
* On commence par vérifier si le bouton soumettant le formulaire a été
* cliqué, "envoi" étant l'attribut "name" du bouton "submit"
* Sinon, on saute à la ligne 220 de ce code.
*/
if(isset($_POST['envoi']))
{
    /* Récupération des données du formulaire */
    $pseudo    = isset($_POST['pseudo'])    ? trim($_POST['pseudo'])    : "";
    $pass      = isset($_POST['pass'])      ? trim($_POST['pass'])      : "";
    $passverif = isset($_POST['passverif']) ? trim($_POST['passverif']) : "";
    $prenom    = isset($_POST['prenom'])    ? trim($_POST['prenom'])    : "";
    $nom       = isset($_POST['nom'])       ? trim($_POST['nom'])       : "";
    $phone     = isset($_POST['phone'])     ? trim($_POST['phone'])     : "";
    $email     = isset($_POST['email'])     ? trim($_POST['email'])     : "";
    $adresse   = isset($_POST['adresse'])   ? trim($_POST['adresse'])   : "";
    $postal    = isset($_POST['postal'])    ? trim($_POST['postal'])    : "";
    $ville     = isset($_POST['ville'])     ? trim($_POST['ville'])     : "";
    $datenaiss = isset($_POST['datenaiss']) ? trim($_POST['datenaiss']) : "";


    /**
     * Définition des variables servant au traitement de l'adresse électronique et du numéro de
     * téléphone: on utilise ici des expressions régulières.
     */
    $valid_mail = "#^[^-_\.][a-z0-9-_\.]+[^-_\.]@[^-_\.][a-z0-9-_\.]+[^-_\.]\.[a-z]{2,4}$#";
    $valid_phone = "#^\d{10}$#";
    $valid_postal = "#^\d{5}$#";
    $valid_format_datenaiss = "#(\d{2})/(\d{2})/(\d{4})$#";

    /* Définition des variables de verification de la validité de la date */
    $jour = substr($datenaiss, 0, 2);
    $mois = substr($datenaiss, 3, 2);
    $annee = substr($datenaiss, 6, 4);

/*------------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------------*/
/*-------------------------ICI DEBUT FONCTION-----------------------------*/
/*------------------------------------------------------------------------------*/
/*------------------------------------------------------------------------------*/

    /* filtrage des entrées du formulaire */
    /* fonction de verification */
    function filtre_security ($_POST)
    {
        $invalid_insert_security = "!([<>#$%&])|(SELECT)|(UPDATE)|(INSERT)|(DELETE)|(REVOKE)|(GRANT)|(UNION)|(CREATE)|(ALTER)|(DROP)|((\" {1,}\")|(\"\"{1,})|(\"\"))|((\' {1,}\')|(\'\'{1,})|(\'\')|(\"\')|(\'\"))!";
        $security = false;
        if ((preg_match($invalid_insert_security, $_POST)))
        {
            /* si injections de code */
            $security = true;
        }
        return $security;
    }
     /* analyse champs par champs du formulaire par l'analyse du tableau $_POST*/
     $post_list = array_map("filtre_security", $_POST);

/*------------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------------*/
/*-------------------------ICI FIN FONCTION---------------------------------*/
/*-------------------------------------------------------------------------------*/
/*------------------------------------------------------------------------------*/

    /**
     * Traitement de vérification des champs vides ou invalides (phone, date, postal et/ou email)
     * Conditions de mauvaises réponses (champ vide par exemple)
     */

/*-------------------------------------------------------------------------------*/
/*-------------------------ICI $secutity POUR VERIF------------------------*/
/*------------------------------------------------------------------------------*/


    if ($security = true||$pseudo == '' || $pass == '' || $passverif == '' || $prenom == '' || $nom == '' || $email == '' || $phone == '' || $adresse == '' || $postal == '' || $ville == '' || $datenaiss == '' || !(preg_match($valid_phone,$phone)) || $email == '' || !(preg_match($valid_mail, $email)) || !(preg_match($valid_postal, $postal)) || !(preg_match($valid_format_datenaiss,$datenaiss)) || (($datenaiss) && (preg_match($valid_format_datenaiss,$datenaiss)) && (checkdate($mois, $jour, $annee) == false)))
    {
        /* Action à adopter */
?>
                <p class="titre">Informations incomplètes</p>
                <p>Un (ou plusieurs) champ(s) obligatoire(s) n'a(ont) pas été correctement rempli(s).</p>

<?php

/*-------------------------------------------------------------------------------*/
/*----------------ICI MESSAGE ERREUR pour $security--------------------*/
/*------------------------------------------------------------------------------*/


        if ($security = true)
        {
        /* si caractere invalide */
             print "<p class='error'>ALERTE DE SECURITE:<br />Vous avez utilis&eacute;s des caract&egrave;res interdits</p>\n";
        }
        if ($pseudo == '')
        {
            /* Si le champ pseudo est vide, */
            print "<p class='error'>Vous n'avez pas précisé votre pseudo</p>\n";
        }
        if ($pass == '')
        {
            /* Si le champ pass est vide, */
            print "<p class='error'>Vous n'avez pas précisé votre mot de pass</p>\n";
        }
        if ($passverif == '')
        {
            /* Si le champ pass est vide, */
            print "<p class='error'>Vous n'avez pas reprécisé votre mot de pass</p>\n";
        }
        if ($passverif != $pass)
        {
            /* Si le champ pass et passverif sont different */
            print "<p class='error'>Veuillez repréciser votre mot de pass !</p>\n";
        }
        if ($prenom == '')
        {
            /* Si le champ prenom est vide, */
            print "<p class='error'>Vous n'avez pas précisé votre prénom</p>\n";
        }
        if ($nom == '')
        {
            /* Si le champ nom est vide, */
            print "<p class='error'>Vous n'avez pas précisé votre nom</p>\n";
        }
        if ($phone == '')
        {
            /* Si le champ phone est vide, */
            print "<p class='error'>Vous n'avez pas précisé votre numéro de téléphone</p>\n";
        }
        if (($phone) && !(preg_match($valid_phone,$phone)))
        {
            print "<p class='error'>Le numéro de téléphone doit comporter seulement des chiffres, de 6 à 10 chiffres sans espaces ni tirets !</p>\n";
        }
        if(!$email)
        {
            /* Si le champ email est vide, */
            print "<p class='error'>Vous avez omis de mentionner une adresse électronique</p>\n";
        }
        if(($email) && !(preg_match($valid_mail, $email))) /* Si il y a une adresse inscrite mais invalide */
        {
            /* On vérifie LES DEUX conditions réunies (avec le sugne "&&"): si on ne vérifie que la validité, en ne
            mettant pas d'adresse dans le formulaire, on obtient l'affichage des deux messages, or l'adresse à
            ce moment là n'est pas invalide, elle est absente: le message d'invalidité ne s'applique donc pas. */
            print "<p class='error'>L'adresse électronique saisie est invalide !</p>\n";
        }
        if(!$adresse)
        {
            /* Si le champ adresse est vide, */
            print "<p class='error'>Vous avez omis de mentionner votre adresse</p>\n";
        }
        if(!$postal)
        {
            /* Si le champ code postal est vide, */
            print "<p class='error'>Vous avez omis de mentionner votre code postal</p>\n";
        }
        if(($postal) && !(preg_match($valid_postal, $postal)))
        {
            /* Si il y a un code postal inscrit mais invalide */
            print "<p class='error'>Le code postal saisie est invalide !</p>\n";
        }
        if ($ville == '')
        {
            /* Si le champ ville est vide, */
            print "<p class='error'>Vous n'avez pas précisé votre ville</p>\n";
        }
        if(!$datenaiss)
        {
            /* Si le champ datenaiss est vide, */
            print "<p class='error'>Vous avez omis de mentionner votre date de naissance</p>\n";
        }
        if(($datenaiss) && !(preg_match($valid_format_datenaiss, $datenaiss)))
        {
            /* Si il y a une date inscrite mais invalide */
            print "<p class='error'>Le format de la date de naissance saisie est invalide !</p>\n";
        }
        /* Si il y a une date inscrite, au bon format, mais invalide */
         if (($datenaiss) && (preg_match($valid_format_datenaiss,$datenaiss)) && (checkdate($mois, $jour, $annee) == false))
         {
            print "<p class='error'>La date de naissance saisie est invalide !</p>\n";
         }

        /**
         * Si les vérifications ont généré des erreurs, affichage du formulaire
         * contenant les données déjà saisies.
         */
?>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post">
  <p class="legend"><b>&nbsp;Donn&eacute;es de connexion&nbsp;</b></p>
  <fieldset>
  <label for="label_pseudo">Votre pseudo :</label><span class="etoile">*</span><input type="text" id="label_pseudo" name="pseudo" maxlength="20" class="cases" value="<?php echo $pseudo ?>" /><a href="#" class="info" title="Chiffres et lettre uniquement !">?</a><br />
  <label for="label_pass">Votre mot de pass :</label><span class="etoile">*</span><input type="password" id="label_pass" name="pass" maxlength="20" class="cases" value="" /><a href="#" class="info" title="Chiffres et lettre uniquement !">?</a><br />
  <label for="label_passverif">Confirmation mot de pass :</label><span class="etoile">*</span><input type="password" id="label_passverif" name="passverif" maxlength="20" class="cases" value="" /><a href="#" class="info" title="Chiffres et lettre uniquement !">?</a><br />
  </fieldset>
  <p class="legend"><b>&nbsp;Donn&eacute;es personnelles&nbsp;</b></p>
  <fieldset>
  <label for="label_prenom">Votre pr&eacute;nom :</label><span class="etoile">*</span><input type="text" id="label_prenom" name="prenom" maxlength="40" class="cases" value="<?php echo $prenom ?>" /><a href="#" class="info" title="Lettres uniquement !">?</a><br />
  <label for="label_nom">Votre Nom de famille :</label><span class="etoile">*</span><input type="text" id="label_nom" name="nom" maxlength="40" class="cases" value="<?php echo $nom ?>" /><a href="#" class="info" title="Lettres uniquement !">?</a><br />
  <label for="label_phone">Votre numéro de t&eacute;l&eacute;phone :</span></label><span class="etoile">*</span><input type="text" id="label_phone" name="phone" maxlength="10" class="cases" value="<?php echo $phone ?>" /><a href="#" class="info" title="10 chiffres uniquement !">?</a><br />
  <label for="label_email">Votre adresse &eacute;lectronique :</span></label><span class="etoile">*</span><input type="text" id="label_email" name="email" maxlength="40" class="cases" value="<?php echo $email ?>" /><a href="#" class="info" title="Protection contre le spam assurer">?</a><br />
  <label for="label_adresse">Votre adresse :</label><input type="text" id="label_adresse" name="adresse" maxlength="40" class="cases" value="<?php echo $adresse ?>" /><a href="#" class="info" title="Les caract&egrave;res spéciaux sont interdits (sauf &minus; et &rsquo; ) !">?</a><br />
  <label for="label_postal">Votre code postal :</span></label><input type="text" id="label_postal" name="postal" maxlength="5" class="cases" value="<?php echo $postal ?>" /><a href="#" class="info" title="Chiffres uniquement !">?</a><br />
  <label for="label_ville">Votre ville :</label><input type="text" id="label_ville" name="ville" maxlength="40" class="cases" value="<?php echo $ville ?>" /><a href="#" class="info" title="Les caract&egrave;res spéciaux sont interdits (sauf &minus; et &rsquo; )!">?</a><br />
  <label for="label_datenaiss">Votre date de naissance :</label><input type="text" id="label_datenaiss" name="datenaiss" maxlength="10" class="cases" value="<?php echo $datenaiss ?>" /><a href="#" class="info" title="Format JJ/MM/AAAA !">?</a><br />
  <div class="c3">
  <input type="submit" class="verif" name="envoi" value="Envoyer" />&nbsp;<input type="reset" class="verif" value="Recommencer" />
  </div>
  </fieldset>
</form>
<?php
    }
    else
    {
        /**
         * Si aucun des champs obligatoire n'est vide et les données sont valides:
         * Traitement des données
         */
        print "TOUT DOIT ETRE CORRECT DANS LES ENTREE DU FORMULAIRE, MERCI DU COUP DE MAIN\n";
      print("<p>Retour vers le formulaire de base, cliquez <a href=\"". $_SERVER['PHP_SELF'] ."\" title=\"Retour vers le formulaire\">ICI</a></p>");
    }
}
/**
* Si cette page s'ouvre pour la première fois sans que le bouton soumettant le formulaire n'ait
* été cliqué, alors on affiche le formulaire normalement
*/
else
{
?>
<p class="titre">Complétez les informations pour ajouter votre nom à la liste des membres</p>
<p>Notez que les champs précédés d'une <span class="etoile">*</span>doivent obligatoirement être remplis.</p>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post">
  <p class="legend"><b>&nbsp;Donn&eacute;es de connexion&nbsp;</b></p><br /><br />
  <fieldset>
  <label for="label_pseudo">Votre pseudo :</label><span class="etoile">*</span><input type="text" id="label_pseudo" name="pseudo" maxlength="20" class="cases" tabindex="1" value="" /><a href="#" class="info" title="Chiffres et lettre uniquement !">?</a><br />
  <label for="label_pass">Votre mot de pass :</label><span class="etoile">*</span><input type="password" id="label_pass" name="pass" maxlength="20" class="cases" tabindex="2" value="" /><a href="#" class="info" title="Chiffres et lettre uniquement !">?</a><br />
  <label for="label_passverif">Confirmation mot de pass :</label><span class="etoile">*</span><input type="password" id="label_passverif" name="passverif" maxlength="20" class="cases" tabindex="3" value="" /><a href="#" class="info" title="Chiffres et lettre uniquement !">?</a><br />
  </fieldset>
  <p class="legend"><b>&nbsp;Donn&eacute;es personnelles&nbsp;</b></p>
  <fieldset>
  <label for="label_prenom">Votre pr&eacute;nom :</label><span class="etoile">*</span><input type="text" id="label_prenom" name="prenom" maxlength="40" class="cases" tabindex="4" value="" /><a href="#" class="info" title="Lettres uniquement !">?</a><br />
  <label for="label_nom">Votre Nom de famille :</label><span class="etoile">*</span><input type="text" id="label_nom" name="nom" maxlength="40" class="cases" tabindex="5" value="" /><a href="#" class="info" title="Lettres uniquement !">?</a><br />
  <label for="label_phone">Votre numéro de t&eacute;l&eacute;phone :</span></label><span class="etoile">*</span><input type="text" id="label_phone" name="phone" maxlength="10" class="cases" tabindex="6" value="" /><a href="#" class="info" title="10 chiffres uniquement !">?</a><br />
  <label for="label_email">Votre adresse &eacute;lectronique :</span></label><span class="etoile">*</span><input type="text" id="label_email" name="email" maxlength="40" class="cases" tabindex="7" value="" /><a href="#" class="info" title="Protection contre le spam assurer">?</a><br />
  <label for="label_adresse">Votre adresse :</label><input type="text" id="label_adresse" name="adresse" maxlength="40" class="cases" tabindex="8" value="" /><a href="#" class="info" title="Les caract&egrave;res spéciaux sont interdits (sauf &minus; et &rsquo; ) !">?</a><br />
  <label for="label_postal">Votre code postal :</span></label><input type="text" id="label_postal" name="postal" maxlength="5" class="cases" tabindex="9" value="" /><a href="#" class="info" title="Chiffres uniquement !">?</a><br />
  <label for="label_ville">Votre ville :</label><input type="text" id="label_ville" name="ville" maxlength="40" class="cases" tabindex="10" value="" /><a href="#" class="info" title="Les caract&egrave;res spéciaux sont interdits (sauf &minus; et &rsquo; )!">?</a><br />
  <label for="label_datenaiss">Votre date de naissance :</label><input type="text" id="label_datenaiss" name="datenaiss" maxlength="10" class="cases" tabindex="11" value="" /><a href="#" class="info" title="Format JJ/MM/AAAA !">?</a><br />
  <div class="c3">
  <input type="submit" class="verif" name="envoi" tabindex="12" value="Envoyer" />&nbsp;<input type="reset" class="verif" tabindex="13" value="Recommencer" />
  </div>
  </fieldset>
</form>
<?php
}
?>
</div>
</body>
</html>
voila, si quelqu'un peut m'aider à finir de mettre au point cette fonction :wink:

MERCI D'AVANCE :pouce:

Posté : 15 mars 2006, 11:45
par Cyrano
Tu as des petites erreurs de conception.

D'abord, la variable $security qui est dans la fonction filtre_security() est locale à l'intérieur de la fonction, donc quand tu essayes de la récupérer ligne 195, tu utilises en réalité une variable indéfinie.

Sur cette même ligne 195, tu fais une affectation sur cette même variable en la mettant à "true" au lieu de faire une comparaison pour vérifier si elle vaut "true" :
if($security = true)
//... n'a pas le même sens que :
if($security == true)
La fonction comporte également une erreur : tu fais un preg_match sur $_POST : $_POST est un tableau associatif, il faudrait précider sur quel index tu veux vérifier la validité de la chaine : tel que tu l'as écrit, ça retournera toujours true.

Il faudrait donc faire précéder cette ligne de :
$security = filtre_security($_POST['quel_index']);
Et remplacer le paramètre dans la fonction
function filtre_security($champ)
{
  //... etc... remplace $_POST par $champ partout dans la fonction

Posté : 15 mars 2006, 15:25
par BeRoots
Merci Cyrano pour ces indication pertinente :wink:

par contre tu me dit:
Il faudrait donc faire précéder cette ligne de :
$security = filtre_security($_POST['quel_index']);
est tu sur que c'est bien $security et non $champ? :-k

en plus je comprend pas trop car j'utilise ceci pour passer chaque champs avec la fonction:
$post_list = array_map("filtre_security", $_POST);
ou alors j'ai mal interpreter ce que m'expliquait Ouckileou :?

si quelqu'un peut m'eclairer encore un petit peu sur ces derniers points ;)

Posté : 15 mars 2006, 16:44
par Cyrano
BOn, il faut arriver à faire une distinction entre une variable que tu envoies en paramètre dans l'appel d'une fonction et la paramètre qui est inscrit dans le code de cette même fonction. Exemple:
<?php
/* Déclaration de la fonction */
function addition($nb1, $nb2)
{
    return $nb1 + $nb2;
}
/* Appel de la fonction */
$nombre_1 = 12;
$nombre_2 = 30;
echo(addition($nombre_1, $nombre_2));
?>
Ce petit bout de code va afficher l'addition de 12 + 30 : pourtant, dans l'appel de fonction, je n'envoie pas $nb1 mais bien $nombre_1 :

Quand j'appelle une fonction en envoyant des paramètres, la seule chose qui est vraiment importante au niveau de ces paramètres est leur ordre. J'envoie des valeurs, c'est tout.

Dans la déclaration d'une fonction, les paramètres sont en réalité des contenants vides qui seront initialisés avec les valeurs envoyées par un appel extérieur : ce n'est pas leur nom qui est important, c'est ce qu'elles vont contenir. À l'intérieur de la fonction, j'utilise ces variables pour effectuer les opération, mais la portée reste locale à l'intérieur de la fonction. De même, mes variables $nombre_1 et $nombre_2 sont invisibles depuis l'intérieur de la fonction, d'autant plus qu'elles sont iitialisées après la fonction.

Est-ce que tu saisis un peu mieux comme ça ?