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é
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
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
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és des caractè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> Données de connexion </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> Données personnelles </b></p>
<fieldset>
<label for="label_prenom">Votre pré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élé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 é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ères spéciaux sont interdits (sauf − et ’ ) !">?</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ères spéciaux sont interdits (sauf − et ’ )!">?</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" /> <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> Données de connexion </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> Données personnelles </b></p>
<fieldset>
<label for="label_prenom">Votre pré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élé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 é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ères spéciaux sont interdits (sauf − et ’ ) !">?</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ères spéciaux sont interdits (sauf − et ’ )!">?</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" /> <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
MERCI D'AVANCE
