fonction de filtrage d'entrer de formulaire

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : fonction de filtrage d'entrer de formulaire

par BeRoots » 18 mars 2006, 16:10

EUREKA \:D/

j'avait juste un petit oublie de guillemet sur les ligne d'insertion au tableau autour de value ;)

merci à tous pour votre aide =D>

sujet resolu :pouce:

par BeRoots » 18 mars 2006, 15:06

j'ai fait un echo de $string et j'ai bien les chaines de mes champs de formulaire :)

par contre c'est surement au niveau de ma façon de renseigner les resultats dans un tableau qui ne va pas:
if ((preg_match($invalid_insert_security, $string)))
                 {
                   $tableau_result[$cle] = true;
                 }else
                 {
                   $tableau_result[$cle] = false;
                 } 
si quequ'un peut m'aider :wink:

MERCI D'AVANCE :pouce:

par BeRoots » 17 mars 2006, 21:44

Pas de crochets dans un foreach :
foreach ( $_POST as $cle = $val) { }
tu avait oublié le > il me semble :-k

de toute façon j'ai été submergé d'erreur et apres moulte modif, j'ai laiser tomber cette methode qui ne me plaisait pas vraiment :?

j'ai encore tout refais pour essayer de faire ça avec une boucle :wink:

voila ce que ça donne (je remet tout le code au cas où, mais commenter pour mieux sibler la boucle):
<!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);

    /*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx*/
    /*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX MA BOUCLE EST ICI XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx*/

    /* boucle de filtrage */
      $cle = 1;
      while ( $cle <= 7 )  /* car je ne filtre que 7 champs */
      {
          $tableau = array(1 => "$pseudo", "$pass", "$passverif", "$prenom", "$nom", "$adresse", "$ville");
          $invalid_insert_security = "!([<>#$%&])|(SELECT)|(UPDATE)|(INSERT)|(DELETE)|(REVOKE)|(GRANT)|(UNION)|(CREATE)|(ALTER)|(DROP)|((" {1,}")|(""{1,})|(""))|((\' {1,}\')|(\'\'{1,})|(\'\')|("\')|(\'"))!";
          $string = $tableau[$cle];
                 if ((preg_match($invalid_insert_security, $string)))
                 {
                   $tableau_result[$cle] = true;
                 }else
                 {
                   $tableau_result[$cle] = false;
                 }
      $cle++;
      }
      return $tableau_result;

/*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/ /*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/

    /**
     * Traitement de vérification des champs vides ou invalides (phone, date, postal et/ou email)
     * Conditions de mauvaises réponses (champ vide par exemple)
     */
    if (in_array (true, $tableau_result)||$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
        if (in_array (true, $tableau_result))
        {
        /* 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>
je n'est aucun message d'erreur mais le script ne se poursuit pas apparament :-k

quelqu'un voit il pourquoi ça bug?

par ouckileou » 17 mars 2006, 11:51

Pas de crochets dans un foreach :
foreach ( $_POST as $cle = $val) { }

par BeRoots » 17 mars 2006, 00:11

bon, j'ai repris la fonction depuis le debut histoire de faire exactement ce que voulu.

normalement l'objectif est de faire une fonction qui va soumettre chaque champs de formulaire choisi à un filtre de securité :wink:

voila ce que ça donne:
    /* fonction de filtrage */
    function filtre_security ($_cle)
    {
        $invalid_insert_security = "!([<>#$%&])|(SELECT)|(UPDATE)|(INSERT)|(DELETE)|(REVOKE)|(GRANT)|(UNION)|(CREATE)|(ALTER)|(DROP)|((\" {1,}\")|(\"\"{1,})|(\"\"))|((\' {1,}\')|(\'\'{1,})|(\'\')|(\"\')|(\'\"))!";

         foreach ( $_POST as [$cle =>] $val) /*ICI LE MESSAGE D'ERREUR*/
         {
                 if ((preg_match($invalid_insert_security, $_val)))
                 {
                   $tableau_result[$cle] = true;
                 }else
                 {
                   $tableau_result[$cle] = false;
                 }
         }
         return $tableau_result;
    }
    
    /* tableau des champs a filtrer*/
    $tableau_cle = array(1 => "pseudo", "pass", "passverif", "prenom", "nom", "adresse", "ville");
    
    /* sous-fonction de filtrage pour associer les cles de $_POST choisies à la fonction de filtrage */
    function start_filtre_security ($cle2)
    {
          foreach ( $tableau_cle as [$cle2 =>] $val_2)
         {
           filtre_security ($val_2);
         }
    }

    /* lancement du filtrage */
    start_filtre_security ($cle2);

    /* affichage du tableau des resultats */
    while(list($cle3,$val_3) = each($tableau_result))
    {
    echo "$cle3 : $val_3<br />";
    }
par contre j'ai l'erreur suivante et je n'arrive pas à savoir pourquoi :-k
Parse error: parse error, expecting `T_VARIABLE' or `'$'' à la ligne que j'ai commenté
si quelqu'un peut eclairer mes lanternes :pouce:

par BeRoots » 16 mars 2006, 02:47

ooops j'ai pas dut relire le message car c'est un ancien essai :oops:

voila ma fonction à jour:
    function filtre_security ($_champ)
    {
        $invalid_insert_security = "!([<>#$%&])|(SELECT)|(UPDATE)|(INSERT)|(DELETE)|(REVOKE)|(GRANT)|(UNION)|(CREATE)|(ALTER)|(DROP)|((\" {1,}\")|(\"\"{1,})|(\"\"))|((\' {1,}\')|(\'\'{1,})|(\'\')|(\"\')|(\'\"))!";
        if ((preg_match($invalid_insert_security, $_champ)))
        {
            /* si injections de code */
            $security = true;
        }
        return $security;
    }
     /* analyse champs par champs du formulaire par l'analyse du tableau $_POST*/

     $champ = $_POST['pseudo'];
     echo(filtre_security($champ));
par contre j'ai deux point que je saisi encore mal:

1°) comment recuperer avec dans variable le resultat de la fonction si je peut pas fairececi :-k
if ($security == true)
2°) est on obliger d'appeler la fonction avec un echo? :-k
parce que ça m'affiche le resultat à l'ecran :?
(d'ailleur ici sa m'affiche 1 et pas true :-k)

pour les autres points en suspent de ma fonction, je met en stand by pour le moment car il faut que je comprenne ce que je fait avant tout :roll:

BeRoots, première fonction en php et grosse galère. ](*,) Va falloir faire plus de test sur des cas simple pour bien comprendre je pense :|

par Cyrano » 15 mars 2006, 21:44

ça fait quoi ça dans ta fonction ?
$security = filtre_security($_POST['pseudo']);
À part faire tourner la fonction en boucle récursive, je vois pas bien :-k

par BeRoots » 15 mars 2006, 21:00

bon ce petit cours était très instrucif :) Merci Cyrano de prendre autant de tant pour m'expliquer car sa devient tout de suite plus claire :wink:


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

    /**
     * Traitement de vérification des champs vides ou invalides (phone, date, postal et/ou email)
     * Conditions de mauvaises réponses (champ vide par exemple)
     */
    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
        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";
        }

/*ETC.............*/
par contre, maintenant plus rien ne fonctionne (même si champs vide) :oops:

mais aucun message d'erreur :-k

en plus de ce problème, je ne voit pas l'utilité de array_map :-k
il faut pourtant bien que je verifie tout les champs les un apres les autre donc je sait plus trop quoi faire :(

de plus $security doit rester à true et ne pas revenir à false suite à l'analise d'un autre champ suivant :?

je m'en remet une fois de plus à vos conseil :pouce:

par Cyrano » 15 mars 2006, 16:44

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 ?

par BeRoots » 15 mars 2006, 15:25

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 ;)

par Cyrano » 15 mars 2006, 11:45

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

par BeRoots » 15 mars 2006, 01:12

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:

par BeRoots » 14 mars 2006, 17:04

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à :?

par ouckileou » 14 mars 2006, 16:31

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

par BeRoots » 14 mars 2006, 16:22

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: