IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Vérifications d'informations [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 35
    Points : 18
    Points
    18
    Par défaut Vérifications d'informations
    Bonjour.

    Je suis en train de mettre en place un module en PHP afin d'inscrire des utilisateurs sur un site.

    J'ai besoin de créer des conditions qui me vérifient les caractères de différents champs.

    J'en ai plusieurs sur lesquelles je bloque. Je débute tout juste sur les expressions régulières et j'ai du mal.

    En premier lieu la date de naissance.

    Je veux qu'elle soit de la forme 10/02/1989.

    Pour cela j'ai écris le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    if(preg_match("#^[0-30-9]{1}/[0-10-9]{1}/[1-20-90-90-9]{1}$#",$_POST['Date_naissance'])) // Si le nom est valide
    {
     
    // Ajout des valeurs contenues dans les champs du formulaire à la table Inscription_AQCV_individuelle
    $requete = "INSERT INTO Inscription_AQCV_individuelle (Nom, Prenom, Date_naissance, Adresse, Adresse_Email, Ville, Code_postal,
    Telephone, Secteur, Sexe) VALUES
    ('" . $_REQUEST["Nom"] . "' , '" . $_REQUEST["Prenom"] . "' ,
    '" . $_REQUEST["Date_naissance"] . "' , '" . $_REQUEST["Adresse"] ."' , '" . $_REQUEST["Adresse_Email"] . "' ,
    '" . $_REQUEST["Ville"] ."' , '" . $_REQUEST["Code_postal"] . "' , '" . $_REQUEST["Telephone"] . "' ,
    '" . $_REQUEST["Secteur"] . "' , '" . $_REQUEST["Sexe"] . "')";
     
     
    $resultat = mysql_query ($requete, $connexion); // Execution de la requête
    if ($resultat)
    {
    echo "<span class='rouge'>Votre inscription a bien été prise en compte.<br /><br />
    Un email va vous être envoyé à l'adresse que vous avez entré, afin de finaliser votre inscription.<br /><br />
    Vous pouvez maintenant cliquer sur Retour.\n</span>"; // Si la requête a réussi
    }
     
    else
    {
    echo "<span class='rouge'>Exécution de la requête impossible !<br/>\n</span>"; // Si la requête a échoué
    echo "<span class='rouge'>Message de MySQL : </span>", mysql_error($connexion); // Si la requête a échoué
    }
    mysql_close($connexion); // Fin de la connexion à la base
    }
     
    else
    {
    echo'<span class="rouge">Vérifier la syntaxe de votre date de naissance !<br/>
    Elle doit être de la forme : 10/02/1989 !</span>'; // Message d'information
    }
    Mais cela ne marche pas !
    D'où vient le problème ?
    Merci pour votre aide !

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 35
    Points : 18
    Points
    18
    Par défaut
    J'ai trouvé la solution à mon problème de date :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(preg_match("#^[0-3]{1}[0-9]{1}/[0-1]{1}[0-9]{1}/[1-2]{1}[0-9]{1}[0-9]{1}[0-9]{1}$#",$_POST['Date_naissance']))

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 35
    Points : 18
    Points
    18
    Par défaut
    Par contre, je bloque maintenant pour la vérification d'un champ nom.
    Je veux que le champ commence par un caractère majuscule ou minuscule, et que soient autorisés : des caractères, majuscules et minuscules, espaces, apostrophes ', tiret haut -.

    J'ai écris ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(preg_match("#^[a-zA-Z]{1,}[a-zA-Z]{1,}[' -]{1,}[^0-9]{1,}$#",$_POST['Nom']))
    Mais cela ne marche pas...

  4. #4
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Salut,

    Je fais juste un saut, donc malheureusement pas le temps pour l'instant de t'aider vraiment, mais saches juste que le quantifieur {1} est inutile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(preg_match("#^[0-3]{1}[0-9]{1}/[0-1]{1}[0-9]{1}/[1-2]{1}[0-9]{1}[0-9]{1}[0-9]{1}$#",$_POST['Date_naissance']))
    peut être écrite plus simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(preg_match("#^[0-3][0-9]/[0-1][0-9]/[1-2][0-9]{3}$#",$_POST['Date_naissance']))
    Pour le reste, j'aurais plus de temps après m'être remis des fêtes
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Crunkman Voir le message
    J'ai trouvé la solution à mon problème de date :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(preg_match("#^[0-3]{1}[0-9]{1}/[0-1]{1}[0-9]{1}/[1-2]{1}[0-9]{1}[0-9]{1}[0-9]{1}$#",$_POST['Date_naissance']))
    Il n'y a aucune réelle validation avec ce code, checkdate() peut-être utile.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    <?php
     
    $date_naissance = '29/02/1991';
     
    $regex = '@^(?P<jour>\d{1,2})([/ .-])(?P<mois>\d{1,2})\2(?P<annee>\d{4})$@D';
     
    if (
         preg_match($regex, $date_naissance, $match) &&
         checkdate($match['mois'], $match['jour'], $match['annee'])
       )
    {
      echo 'DATE VALIDE: ', $date_naissance;
    }
    else echo 'la DATE ', $date_naissance, ' est fausse.';
     
    ?>
    Citation Envoyé par Crunkman
    Par contre, je bloque maintenant pour la vérification d'un champ nom.
    Avec un moteur PCRE pas trop vieux, il est possible d'utiliser \pL pour les lettres, toutes les lettres (ex. accents) et seulement les lettres. \pL est aussi compatible ISO comme UTF-8 (avec option u).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    <?php
     
    $prenom = 'Jean-Paul';
    $nom = 'de l\'Érable';
     
    $regex = '@^(\pL+[\' -]?)+\pL+$@D'; // ajouter l'option u si UTF8
     
    if (
         preg_match($regex, $prenom) &&
         preg_match($regex, $nom)
       )
    {
      echo 'CONFORME AUX RÈGLES: ', $prenom, ' ', $nom;
    }
    else echo $prenom, ' ', $nom, ' n\'est pas conforme aux règles.';
     
    ?>

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 35
    Points : 18
    Points
    18
    Par défaut
    jml94 --> Merci de ta réponse. J'ai pu amélioré ma regex et ça donne cela pour la date de naissance :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(preg_match("#^[01-31]{2}/[01-12]{2}/[1-2]{1}[0-9]{1}[0-9]{1}[0-9]{1}$#",$_POST['Date_naissance']))
    Tisha Carpenter --> Merci de ton aide pour mon champ nom, cela marche parfaitement !
    Par contre il subsiste un problème pour ce champ : lorsque j'écris par exemple le nom O'Railey et que j'appuie sur mon bouton envoyer, un message d'erreur apparait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "Exécution de la requête impossible !
    Message de MySQL : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Railey' , 'Raf' , '10/02/1900' , '270, sdgfgsdxgsg' , 'cbbbb@dhgdt.fr' ' at line 3"
    Il y a un problème avec l'apostrophe de O'Railey, mais pourquoi ?

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Crunkman Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "Exécution de la requête impossible !
    Message de MySQL : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Railey' , 'Raf' , '10/02/1900' , '270, sdgfgsdxgsg' , 'cbbbb@dhgdt.fr' ' at line 3"
    Il y a un problème avec l'apostrophe de O'Railey, mais pourquoi ?
    mysql_real_escape_string() doit toujours être appliqué sur tous les champs d'un formulaire avant d'utiliser mysql_query().

    Citation Envoyé par Crunkman
    J'ai pu amélioré ma regex et ça donne cela pour la date de naissance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(preg_match("#^[01-31]{2}/[01-12]{2}/[1-2]{1}[0-9]{1}[0-9]{1}[0-9]{1}$#",$_POST['Date_naissance']))
    Ce n'est pas bon du tout. [01-31]{2} veut dire que le caractère 0 ou les caractères de 1 à 3 ou encore le caractère 1 doivent être présent 2 fois. Donc 04 sera rejeté et 32 sera accepté.

    Il faut utilisé la regex de jml94 si le code avec checkdate() semble venir d'une autre planète. Quoi que le 29 Février 1991 n'a jamais existé, pas plus que le 31 Juin 2008... donc checkdate() a son utilité à mon avis.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 35
    Points : 18
    Points
    18
    Par défaut
    Merci ! Je vais donc reprendre la regex de Jml ! Par contre pour mon champ "nom" et mon erreur je ne comprends pas concrètement ce que je dois faire

  9. #9
    Invité
    Invité(e)
    Par défaut
    Le plus simple pour toi sera peut-être d'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    // à ajouter au début du script au cas où magic_quotes soit à ON
    if ( get_magic_quotes_gpc() ) {
      $_POST = array_map('stripslashes', $_POST);
    }
     
    /* code de validation, etc... */
     
    $_POST = array_map('mysql_real_escape_string', $_POST);
     
    $requete = "INSERT INTO Inscription_AQCV_individuelle (Nom, Prenom, Date_naissance, Adresse, Adresse_Email, Ville, Code_postal,
    Telephone, Secteur, Sexe) VALUES
    ('" . $_POST["Nom"] . "' , '" . $_POST["Prenom"] . "' ,
    '" . $_POST["Date_naissance"] . "' , '" . $_POST["Adresse"] ."' , '" . $_POST["Adresse_Email"] . "' ,
    '" . $_POST["Ville"] ."' , '" . $_POST["Code_postal"] . "' , '" . $_POST["Telephone"] . "' ,
    '" . $_POST["Secteur"] . "' , '" . $_POST["Sexe"] . "')";
     
    $resultat = mysql_query($requete, $connexion); // Execution de la requête
    Si l'ordre des champs est celui de ta base, personnellement je ferais plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    // au début du script au cas où magic_quotes soit à ON
    if ( get_magic_quotes_gpc() ) {
      $_POST = array_map('stripslashes', $_POST);
    }
     
    /* code de validation, etc... */
     
    $requete = sprintf("INSERT INTO Inscription_AQCV_individuelle
                        VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')",
                        mysql_real_escape_string($_POST['Nom']),
                        mysql_real_escape_string($_POST['Prenom']),
                        mysql_real_escape_string($_POST['Date_Naissance']),
                        mysql_real_escape_string($_POST['Adresse']),
                        mysql_real_escape_string($_POST['Adresse_Email']),
                        mysql_real_escape_string($_POST['Ville']),
                        mysql_real_escape_string($_POST['Code_Postal']),
                        mysql_real_escape_string($_POST['Telephone']),
                        mysql_real_escape_string($_POST['Secteur']),
                        mysql_real_escape_string($_POST['Sexe'])
                       );
    $resultat = mysql_query($requete, $connexion); // Execution de la requête
    Par contre, j'aime reconstruire un champs avant insertion. Avec les codes du message #5 de cette discussion; sur une table avec seulement les champs Nom, Prenom et Date_Naissance dans cet ordre, j'écrirais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    // au début du script au cas où magic_quotes soit à ON
    if ( get_magic_quotes_gpc() ) {
      $_POST = array_map('stripslashes', $_POST);
    }
     
    /* code de validation, etc... */
     
    $requete = sprintf(
                       "INSERT INTO table VALUES('%s', '%s', '%4d-%02d-%02d');",
                       mysql_real_escape_string($_POST['Nom']),
                       mysql_real_escape_string($_POST['Prenom']),
                       $match['annee'], $match['mois'], $match['jour']
                      );
     
    mysql_query($requete);
    Où la date est reconstruite avec mon format date en base, sur une extraction/validation serrée de preg_match/checkdate.

    Mais c'est loin des Expressions Régulières, peut-être que demander dans un salon de PHP/MySQL sur l'utilité et l'usage de mysql_real_escape_string() serait bon car je ne suis pas une pro des bases de données.

    Bonne année.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 35
    Points : 18
    Points
    18
    Par défaut
    Merci de ta réponse.
    Bonne année à toi aussi !

    J'ai donc mis le code que tu m'as dit qui serait le plus simple à utiliser mais quand j'envoie mon formulaire avec comme nom "O'Railey" il me dit de vérifier la syntaxe de mon nom (en gros il prend l'apostrophe comme un caractère interdit, du coup il envoie pas le formulaire).

    Moi je veux que l'apostrophe soit prise comme un caractère autorisé. Le problème vient-il de la regex ?
    Il me manque plus qu'à arriver à autoriser l'apostrophe après c'est bon.

  11. #11
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par Tisha Carpenter Voir le message
    Avec un moteur PCRE pas trop vieux, il est possible d'utiliser \pL pour les lettres, toutes les lettres (ex. accents) et seulement les lettres. \pL est aussi compatible ISO comme UTF-8 (avec option u).
    Salut Tisha,

    Une petite aparté sur ce sujet : aurais-tu une doc sur le sujet. Je ne connaissais pas et ça semble intéressant.
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  12. #12
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par Crunkman Voir le message
    Merci de ta réponse.
    Bonne année à toi aussi !

    J'ai donc mis le code que tu m'as dit qui serait le plus simple à utiliser mais quand j'envoie mon formulaire avec comme nom "O'Railey" il me dit de vérifier la syntaxe de mon nom (en gros il prend l'apostrophe comme un caractère interdit, du coup il envoie pas le formulaire).

    Moi je veux que l'apostrophe soit prise comme un caractère autorisé. Le problème vient-il de la regex ?
    Il me manque plus qu'à arriver à autoriser l'apostrophe après c'est bon.
    Utilises-tu la regex de Tisha ?
    Code php by Tisha : Sélectionner tout - Visualiser dans une fenêtre à part
    $regex = '@^(\pL+[\' -]?)+\pL+$@D';
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  13. #13
    Membre régulier Avatar de knoodrake
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2007
    Messages : 86
    Points : 86
    Points
    86
    Par défaut
    Citation Envoyé par jml94 Voir le message
    Salut Tisha,

    Une petite aparté sur ce sujet : aurais-tu une doc sur le sujet. Je ne connaissais pas et ça semble intéressant.
    Bonjour,
    http://www.regular-expressions.info/unicode.html

    En revanche, quel est cette option "D" dans le regexp de Tisha ?

  14. #14
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Crunkman Voir le message
    Le problème vient-il de la regex ?
    Ce qu'il y a de merveilleux avec la vie, c'est que tout est possible

    Par contre, la regex semblait fonctionner avant l'ajout de mysql_real_escape_string(). Donc, je pencherais vers l'ajout trop tôt dans le script de mysql_real_escape_string().

    C'est possible de voir ton code?

    Citation Envoyé par knoodrake
    En revanche, quel est cette option "D"
    DOLLAR_ENDONLY... le metacaractère $ n'est valable que sur la fin de la chaine et non pas sur fin de ligne comme dans le comportement normal.

  15. #15
    Membre régulier Avatar de knoodrake
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2007
    Messages : 86
    Points : 86
    Points
    86
    Par défaut
    Citation Envoyé par Tisha Carpenter Voir le message
    Par contre, la regex semblait fonctionner avant l'ajout de mysql_real_escape_string(). Donc, je pencherais vers l'ajout trop tôt dans le script de mysql_real_escape_string().
    Bonne idée ! Il est vrai que si on échappe "O'Railey", ça donne "O\'Railey" et que l'antislashe n'est pas prévu dans l'expr.rég.


    Citation Envoyé par Tisha Carpenter Voir le message
    DOLLAR_ENDONLY... le metacaractère $ n'est valable que sur la fin de la chaine et non pas sur fin de ligne comme dans le comportement normal.
    Je croyai qu'il y avait une option multiligne ( "m" il me semble ) pour ça. Enfin bref, merci, je vais creuser la question avec mon ami google.

  16. #16
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par knoodrake Voir le message
    Je croyai qu'il y avait une option multiligne ( "m" il me semble ) pour ça. Enfin bref, merci, je vais creuser la question avec mon ami google.
    Pas certaine si google aidera sur la petite nuance de D, mais aux conséquences très différentes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    if (  preg_match('@^bonjour$@' , "bonjour\n") ) echo 'Le \n est PASSÉ<br/>';
    if (  preg_match('@^bonjour$@m', "bonjour\n") ) echo 'option m pas mieux<br/>';
    if ( !preg_match('@^bonjour$@D', "bonjour\n") ) echo 'Le \n a été DÉTECTÉ<br/>';
    ?>

  17. #17
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Salut,

    Je vais essayer de recoller au problème : tu veux valider un nom qui ne dois contenir que des lettres, ou apostrophes ou tiret ou espace. C'est bien ça ?

    Dans ce cas, ceci devrait suffire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    <?php
    // pattern
    $pattern = '#^[-\pL\'\s]++$#';
     
    // tests
    $myString = "foobar";
    if ( preg_match($pattern, $myString) )
        print "<p>$myString = ok</p>";
    else
        print "<p>$myString = KO</p>";
     
    $myString = "FooBar";
    if ( preg_match($pattern, $myString) )
        print "<p>$myString = ok</p>";
    else
        print "<p>$myString = KO</p>";
     
    $myString = "foo bar";
    if ( preg_match($pattern, $myString) )
        print "<p>$myString = ok</p>";
    else
        print "<p>$myString = KO</p>";
     
    $myString = "foo'bar";
    if ( preg_match($pattern, $myString) )
        print "<p>$myString = ok</p>";
    else
        print "<p>$myString = KO</p>";
     
    $myString = "foo'bar9";
    if ( preg_match($pattern, $myString) )
        print "<p>$myString = ok</p>";
    else
        print "<p>$myString = KO</p>";
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 35
    Points : 18
    Points
    18
    Par défaut
    Bonjour.

    Voici donc le code avec la regex qui refuse l'apostrophe du champ nom.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    <?php
    	// à ajouter au début du script au cas où magic_quotes soit à ON
    if (get_magic_quotes_gpc()) 
    {
      $_POST = array_map('stripslashes', $_POST);
    }
     
    $_POST = array_map('mysql_real_escape_string', $_POST);
     
     
    	if (isset($_REQUEST['envoyer'])) // Si on presse le bouton envoyer
    	{
    		if (!empty($_REQUEST['Nom'])&&!empty($_REQUEST['Prenom'])
    		&&!empty($_REQUEST['Adresse_Email'])&&!empty($_REQUEST['Telephone'])&&!empty($_REQUEST['Date_naissance'])&&!empty($_REQUEST['Adresse'])
    		&&!empty($_REQUEST['Ville'])&&!empty($_REQUEST['Code_postal'])&&!empty($_REQUEST['Profession'])) // Si les champs ne sont pas vides
    		{ 
    			$Nom=$_REQUEST["Nom"]; // Définition des varibales
    			$Prenom=$_REQUEST["Prenom"]; // Définition des varibales
    			$Date_naissance=$_REQUEST["Date_naissance"]; // Définition des varibales
    			$Adresse=$_REQUEST["Adresse"]; // Définition des varibales
    			$Adresse_Email=$_REQUEST["Adresse_Email"]; // Définition des varibales
    			$Telephone=$_REQUEST["Telephone"]; // Définition des varibales
    			$Ville=$_REQUEST["Ville"]; // Définition des varibales
    			$Code_postal=$_REQUEST["Code_postal"]; // Définition des varibales
    			$Secteur=$_REQUEST["Secteur"]; // Définition des varibales
    			$Sexe=$_REQUEST["Sexe"]; // Définition des varibales
    			$Profession=$_REQUEST["Profession"]; // Définition des varibales
     
    			if(preg_match("#^[a-z0-9._-]{1,}@[a-z0-9._-]{2,}\.[a-z]{2,4}$#",$_POST['Adresse_Email'])) // Si l'adresse Email est valide
    			{
    				if(preg_match("#^0[1-68][0-9]{8}$#",$_POST['Telephone'])) // Si le téléphone est valide
    				{
    					if(preg_match("#^[0-3][0-9]/[0-1][0-9]/[1-2][0-9]{3}$#",$_POST['Date_naissance'])) // Si la date de naissance
    					{
    						if(preg_match("@^(\pL+[\' -]?)+\pL+$@D",$_POST['Nom'])) // Si le nom est valide
    						{
    							if(preg_match("#^[0-9][0-9]{4}$#",$_POST['Code_postal'])) // Si le code postal est valide
    							{
     
    								// Ajout des valeurs contenues dans les champs du formulaire à la table Inscription_AQCV_individuelle
    								$requete = "INSERT INTO Inscription_AQCV_individuelle (Nom, Prenom, Date_naissance, Adresse, Adresse_Email, 
    								Ville, Code_postal, Telephone, Secteur, Sexe, Profession) VALUES 
    												('" . $_REQUEST["Nom"] . "' , '" . $_REQUEST["Prenom"] . "' , 
    								'" . $_REQUEST["Date_naissance"] . "' , '" . $_REQUEST["Adresse"] ."' , '" . $_REQUEST["Adresse_Email"] . "' , 
    								'" . $_REQUEST["Ville"] ."' , '" . $_REQUEST["Code_postal"] . "' , '" . $_REQUEST["Telephone"] . "' , 
    								'" . $_REQUEST["Secteur"] . "' , '" . $_REQUEST["Sexe"] . "' , '" . $_REQUEST["Profession"] . "')"; 
     
     
    								$resultat = mysql_query ($requete, $connexion); // Execution de la requête
    								if ($resultat) 
    								{
    									echo "<span class='rouge'>Votre inscription a bien été prise en compte.<br /><br />
    									Un email va vous être envoyé à l'adresse que vous avez entré, afin de finaliser votre inscription.<br /><br />
    									Vous pouvez maintenant cliquer sur Retour.\n</span>"; // Si la requête a réussi
    								}
     
    								else 
    								{
    									echo "<span class='rouge'>Exécution de la requête impossible !<br/>\n</span>"; // Si la requête a échoué
    									echo "<span class='rouge'>Message de MySQL : </span>", mysql_error($connexion); // Si la requête a échoué
    								}
    								mysql_close($connexion); // Fin de la connexion à la base
    							}
    							else 
    							{
    								echo'<span class="rouge">Vérifiez la syntaxe de votre code postal !<br/>
    								Il doit respecter les règles suivantes : 5 chiffes, aucun autre caractère.</span>'; // Message d'information
    							}
    						}
    						else 
    						{
    							echo'<span class="rouge">Vérifiez la syntaxe de votre nom !<br/></span>'; // Message d'information
    						}
    					}					
    					else 
    					{
    						echo'<span class="rouge">Vérifiez la syntaxe de votre date de naissance !<br/>
    						Elle doit être de la forme : 10/02/1989 !</span>'; // Message d'information
    					}
    				}								
    				else 
    				{
    					echo'<span class="rouge">Vérifiez la syntaxe de votre numéro de téléphone !<br/>
    					Il doit respecter les règles suivantes : commencer par un 0, contenir 10 chiffres, pas d\'espaces, pas de lettres, pas de 
    					caractères spéciaux !</span>'; // Message d'information
    				}
    			}
    			else
    			{
    				echo'<span class="rouge">Votre adresse Email n\'est pas valide !</span>'; // Message d'information
    			}
    		}
    		else 
    		{
    			echo'<span class="rouge">Merci de remplir tous les champs !</span>'; // Message d'information
    		}
    	}
    ?>
    Comment y remédier ?

  19. #19
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Pourrais-tu nous donner le résultat de ce dump ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo'<span class="rouge">Vérifiez la syntaxe de votre nom !<br/></span>'; // Message d'information
    var_dump($_POST['Nom']);
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  20. #20
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Crunkman Voir le message
    Voici donc le code
    J'ai déplacer la ligne contenant mysql_real_escape_string().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
     
    <?php
    	// à ajouter au début du script au cas où magic_quotes soit à ON
    if (get_magic_quotes_gpc())
    {
      $_POST = array_map('stripslashes', $_POST);
    }
     
    /* ENLEVER ICI */
     
     
    	if (isset($_REQUEST['envoyer'])) // Si on presse le bouton envoyer
    	{
    		if (!empty($_REQUEST['Nom'])&&!empty($_REQUEST['Prenom'])
    		&&!empty($_REQUEST['Adresse_Email'])&&!empty($_REQUEST['Telephone'])&&!empty($_REQUEST['Date_naissance'])&&!empty($_REQUEST['Adresse'])
    		&&!empty($_REQUEST['Ville'])&&!empty($_REQUEST['Code_postal'])&&!empty($_REQUEST['Profession'])) // Si les champs ne sont pas vides
    		{
    			$Nom=$_REQUEST["Nom"]; // Définition des varibales
    			$Prenom=$_REQUEST["Prenom"]; // Définition des varibales
    			$Date_naissance=$_REQUEST["Date_naissance"]; // Définition des varibales
    			$Adresse=$_REQUEST["Adresse"]; // Définition des varibales
    			$Adresse_Email=$_REQUEST["Adresse_Email"]; // Définition des varibales
    			$Telephone=$_REQUEST["Telephone"]; // Définition des varibales
    			$Ville=$_REQUEST["Ville"]; // Définition des varibales
    			$Code_postal=$_REQUEST["Code_postal"]; // Définition des varibales
    			$Secteur=$_REQUEST["Secteur"]; // Définition des varibales
    			$Sexe=$_REQUEST["Sexe"]; // Définition des varibales
    			$Profession=$_REQUEST["Profession"]; // Définition des varibales
     
    			if(preg_match("#^[a-z0-9._-]{1,}@[a-z0-9._-]{2,}\.[a-z]{2,4}$#",$_POST['Adresse_Email'])) // Si l'adresse Email est valide
    			{
    				if(preg_match("#^0[1-68][0-9]{8}$#",$_POST['Telephone'])) // Si le téléphone est valide
    				{
    					if(preg_match("#^[0-3][0-9]/[0-1][0-9]/[1-2][0-9]{3}$#",$_POST['Date_naissance'])) // Si la date de naissance
    					{
    						if(preg_match("@^(\pL+[\' -]?)+\pL+$@D",$_POST['Nom'])) // Si le nom est valide
    						{
    							if(preg_match("#^[0-9][0-9]{4}$#",$_POST['Code_postal'])) // Si le code postal est valide
    							{
     
    								// Ajout des valeurs contenues dans les champs du formulaire à la table Inscription_AQCV_individuelle
    /*AJOUTER ICI*/ $_POST = array_map('mysql_real_escape_string', $_POST);
     
    								$requete = "INSERT INTO Inscription_AQCV_individuelle (Nom, Prenom, Date_naissance, Adresse, Adresse_Email,
    								Ville, Code_postal, Telephone, Secteur, Sexe, Profession) VALUES
    												('" . $_REQUEST["Nom"] . "' , '" . $_REQUEST["Prenom"] . "' ,
    								'" . $_REQUEST["Date_naissance"] . "' , '" . $_REQUEST["Adresse"] ."' , '" . $_REQUEST["Adresse_Email"] . "' ,
    								'" . $_REQUEST["Ville"] ."' , '" . $_REQUEST["Code_postal"] . "' , '" . $_REQUEST["Telephone"] . "' ,
    								'" . $_REQUEST["Secteur"] . "' , '" . $_REQUEST["Sexe"] . "' , '" . $_REQUEST["Profession"] . "')";
     
     
    								$resultat = mysql_query ($requete, $connexion); // Execution de la requête
    								if ($resultat)
    								{
    									echo "<span class='rouge'>Votre inscription a bien été prise en compte.<br /><br />
    									Un email va vous être envoyé à l'adresse que vous avez entré, afin de finaliser votre inscription.<br /><br />
    									Vous pouvez maintenant cliquer sur Retour.\n</span>"; // Si la requête a réussi
    								}
     
    								else
    								{
    									echo "<span class='rouge'>Exécution de la requête impossible !<br/>\n</span>"; // Si la requête a échoué
    									echo "<span class='rouge'>Message de MySQL : </span>", mysql_error($connexion); // Si la requête a échoué
    								}
    								mysql_close($connexion); // Fin de la connexion à la base
    							}
    							else
    							{
    								echo'<span class="rouge">Vérifiez la syntaxe de votre code postal !<br/>
    								Il doit respecter les règles suivantes : 5 chiffes, aucun autre caractère.</span>'; // Message d'information
    							}
    						}
    						else
    						{
    							echo'<span class="rouge">Vérifiez la syntaxe de votre nom !<br/></span>'; // Message d'information
    						}
    					}
    					else
    					{
    						echo'<span class="rouge">Vérifiez la syntaxe de votre date de naissance !<br/>
    						Elle doit être de la forme : 10/02/1989 !</span>'; // Message d'information
    					}
    				}
    				else
    				{
    					echo'<span class="rouge">Vérifiez la syntaxe de votre numéro de téléphone !<br/>
    					Il doit respecter les règles suivantes : commencer par un 0, contenir 10 chiffres, pas d\'espaces, pas de lettres, pas de
    					caractères spéciaux !</span>'; // Message d'information
    				}
    			}
    			else
    			{
    				echo'<span class="rouge">Votre adresse Email n\'est pas valide !</span>'; // Message d'information
    			}
    		}
    		else
    		{
    			echo'<span class="rouge">Merci de remplir tous les champs !</span>'; // Message d'information
    		}
    	}
    ?>

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [RegEx] Vérifications d'informations
    Par Crunkman dans le forum Langage
    Réponses: 1
    Dernier message: 20/01/2009, 17h16
  2. MF vérification informations banques
    Par ge-lt dans le forum SAP
    Réponses: 9
    Dernier message: 06/02/2008, 12h15
  3. Réponses: 12
    Dernier message: 08/03/2006, 17h27
  4. JavaScript de vérification de formulaire
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 6
    Dernier message: 26/02/2003, 13h48
  5. [PRO*C] Recherche information
    Par Anonymous dans le forum Interfaces de programmation
    Réponses: 2
    Dernier message: 04/04/2002, 17h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo