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 :

verification heure avec regex


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Août 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2011
    Messages : 112
    Par défaut verification heure avec regex
    bonsoir,
    j'ai voulu créer un formulaire qui demande l'heure (à l'aide du fichier index.html) et ensuite vérifier que l'heure rentrée est de la forme hh.mm.ss (à l'aide du fichier traitement.php)

    pour le fichier index.html
    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
     
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title>Titre</title>
        </head>
     
        <body>
    <!-- début création du formulaire -->
    	<form method="post" action="traitement.php">
    		<p>
    		<label for="heure"> Donner l'heure: </label> 
    		<input name="heure" id ="heure" type="text" />
    		</p>
    	</form>
    <!-- fin création du formulaire -->
    pour le fichier traitement.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
    	if ((isset $_POST['heure']) AND (preg_match(#^[0-9]{2}.[0-9]{2}.[0-9]{2}$#,$_POST['heure'])))
    	{
    	echo "l'heure est valide";
    	}
    	else
    	{
    	echo "l'heure n'est pas valide";
    	}
    ?>

    ça ne fonctionne pas, j'ai peut être (surement fait des erreurs de code) mais pire je ne comprends pas la logique d'exécution du code html ou php(qui génére du html)
    je ne sais pas où placer mon code php ? pouvez vous m'éclairer svp?


    je concois les choses comme cela:
    un utilisateur se connecte sur le site, il attérit sur la page index.html qui lui est envoyé donc il a un formulaire à remplir.
    en appuyant sur le bouton envoi du formulaire, il envoit ce qu'il a rentré dans la variable $_POST['heure'] sur le serveur

    mais le if etc ... du code php dans traitement.php n'est pas lancé ?

    tout est confus dans ma tête

    merci

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    Voici ton code corrigé
    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
    <?php
     
    // au 1er appel => $_POST['heure'] n'est pas défini => le if est passé 
    if (isset($_POST['heure'])) {
       // tu avais oublié de mettre des quotes au pattern ainsi que d'échapper le caractère . (point)
       if (preg_match('#^[0-9]{2}\.[0-9]{2}\.[0-9]{2}$#', $_POST['heure'])) {
          echo "l'heure est valide";
       }
       else {
          echo "l'heure n'est pas valide";
       }
       // une fois le résultat affiché
       // évite de réafficher le formulaire ci dessous
       exit;
    }
     
    ?>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title>Titre</title>
        </head>
     
        <body>
    <!-- début création du formulaire -->
       <form method="post" action="traitement.php">
          <label for="heure"> Donner l'heure: </label>
          <input name="heure" id ="heure" type="text" />
          <input type="submit" value="Envoyer">
       </form>
    <!-- fin création du formulaire -->

  3. #3
    Membre confirmé
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Août 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2011
    Messages : 112
    Par défaut
    bonjour et merci de ton aide, j'ai réussi à faire fonctionner le code en m'aidant de ce que tu as écrit mais même si ça tourne je ne comprends pas l'intérêt de toutes les lignes de code ...

    en prenant ton code rigoureusement:

    question 1: le fichier doit s'appelait traitement.php puisque le formulaire envoie là les données rentrées?

    question 2: dans ton code php au départ , au 1er appel la variable $_POST['heure'] n'existe pas donc le if est FALSE donc on sort d'où le exit
    mais je ne comprends pas ta structure j'aurais fait

    Code x : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if isset($_POST['heure'])
    {
    le preg_match .... là nouveau if avec le alors .... sinon 
    }
    else
    {
    exit;
    }


    question 3: "if isset($_POST['heure']) AND preg_match " ne veut pas tourner je trouve cela bizarre , je réunis les 2 if : si les 2 conditions sont remplies


    merci

  4. #4
    Rédacteur

    Avatar de Torgar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 334
    Par défaut
    Salut,

    Question 1 : Oui, mais c'est à ta convenance. Il a fait comme ceci pour son fichier de test pour ne pas à faire deux fichiers (supposition).

    Question 2 : Si tu mets le exit dans ton else, au premier appel il sera "exécuté" et donc le reste de ta page ne sera pas affiché.

    Question 3 : Si ta question porte sur ton premier code, c'est normal que cela ne fonctionne pas. Comme l'a dit rawsrc, tu n'avais pas mis ton pattern entre parenthèses. De plus, passer par deux conditions te permet de mieux contrôler les erreurs. Ainsi, tu peux déterminer si l'heure a bien été saisie (isset()) et si le format est valide (preg_match()).
    Je ne suis pas schizophrène, nous sommes unanime !!!

    ► Pensez à la balise code et au CODE HTML GENERE !!!!
    ► Au si c'est le cas et au à ceux qui vous ont aidé.
    Vous souhaitez participer aux rubriques CSS et (X)HTML ? Contactez-nous !

    Créer des colonnes de même hauteur en CSS
    Glossaire CSS
    Les bordures en CSS3
    Les transitions en CSS3

  5. #5
    Membre confirmé
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Août 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2011
    Messages : 112
    Par défaut
    je commence à mieux comprendre

    j'ai pigé pour le exit

    c'est cette partie qui n'est pas encore assimilé correctement
    au 1er appel => $_POST['heure'] n'est pas défini => le if est passé
    if (isset($_POST['heure'])) {


    pour moi isset permet de vérifier si la variable $_POST['heure'] existe ou est définie
    donc au 1er appel je me dis que le isset($_POST['heure']) va renvoyer FALSE et que ce qu'il y a dans else va s'éxécuter

    mais d'après vos explications , je me plante ... je ne comprends pas ce qui cloche dans ma façon de voir

    merci

  6. #6
    Rédacteur

    Avatar de Torgar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 334
    Par défaut
    En fait, c'est simple.

    La fonction exit() affiche un message et arrête le script courant.

    Ce qui veux dire que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (isset($_POST)) {
        // traitement
    }
    else {
        exit; // Termine le script et donc n'exécute pas la suite de ton script.
    }
    Fait que, SI on a soumis le formulaire, alors on procède au traitement, SINON, on affiche un message (ici je n'affiche rien) et le script s'arrête.
    Or comme ta page contient, à la fois la vérification du formulaire et le formulaire en question, au premier chargement ton formulaire ne sera jamais affiché puisque tu rentres directement dans le SINON qui stop la suite de ton script.

    Je sais pas si c'est plus clair ?
    Je ne suis pas schizophrène, nous sommes unanime !!!

    ► Pensez à la balise code et au CODE HTML GENERE !!!!
    ► Au si c'est le cas et au à ceux qui vous ont aidé.
    Vous souhaitez participer aux rubriques CSS et (X)HTML ? Contactez-nous !

    Créer des colonnes de même hauteur en CSS
    Glossaire CSS
    Les bordures en CSS3
    Les transitions en CSS3

  7. #7
    Membre confirmé
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Août 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2011
    Messages : 112
    Par défaut
    je pense avoir pigé

    j'ai repris le code de rawsrc est affiché mon interprétation en étant verbeux pour bien me faire comprendre

    si j'ai pigé OUF sinon exit

    dans tous les cas merci à vous 2 pour votre aide


    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
    
    // au 1er appel => $_POST['heure'] n'est pas défini => le if est passé 
    // pourquoi le if est passé ? (isset($_POST['heure']) retourne FALSE puisque la variable n'existe pas donc le else du 1er if s'exécute, mais ce else n'est pas dans le code: conclusion ce if ne fait rien à cause de ce else pas présent. 
    if (isset($_POST['heure'])) {
       
       if (preg_match('#^[0-9]{2}\.[0-9]{2}\.[0-9]{2}$#', $_POST['heure'])) {
          echo "l'heure est valide";
       }
       else {
          echo "l'heure n'est pas valide";
       }
       // une fois le résultat affiché
       // évite de réafficher le formulaire ci dessous
       exit;
    }
     
    ?>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title>Titre</title>
        </head>
     
        <body>
    <!-- début création du formulaire -->
       <form method="post" action="traitement.php">
          <label for="heure"> Donner l'heure: </label>
          <input name="heure" id ="heure" type="text" />
          <input type="submit" value="Envoyer">
       </form>
    <!-- fin création du formulaire -->

  8. #8
    Rédacteur

    Avatar de Torgar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 334
    Par défaut
    conclusion ce if ne fait rien à cause de ce else pas présent
    C'est pas qu'il ne fait pas rien à cause d'un else non écrit.

    La condition n'est pas remplie, donc on ne rentre pas dans la condition pour faire le traitement.

    Qu'il y ait un else ou non, c'est pareil. Tant que la condition n'est pas remplie, on rentrera pas dans le if().

    Le else c'est pour le cas où la condition n'est pas remplie. Or ici, il n'y a pas besoin de faire quelque chose de spécifique, puisqu'il n'y a rien à faire, sauf afficher le formulaire. Chose qu'il n'y a à faire que si le formulaire n'a pas été soumis.

    Le exit(), lui, est là pour stopper le script une fois que l'on sait si l'heure est au bon format, car on sait qu'elle existe, puisque nous sommes dans le if().

    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
    <?php
     
    // au 1er appel => $_POST['heure'] n'est pas défini
    // Si $_POST['heure'] est défini, la condition est donc remplie.
    if (isset($_POST['heure'])) {
       // On procède donc au test de la validité du format de l'heure
       if (preg_match('#^[0-9]{2}\.[0-9]{2}\.[0-9]{2}$#', $_POST['heure'])) {
          echo "l'heure est valide";
       }
       else {
          echo "l'heure n'est pas valide";
       }
     
       // une fois le résultat affiché, il n'y a plus besoin d'afficher le formulaire
       // donc on stop la suite du script avec la fonction exit().
       exit;
    }
     
    // Il n'y a donc pas besoin de else puisqu'il faut afficher le formulaire quoi qu'il arrive, si celui-ci ne nous a pas été soumis.
    ?>
    Je ne suis pas schizophrène, nous sommes unanime !!!

    ► Pensez à la balise code et au CODE HTML GENERE !!!!
    ► Au si c'est le cas et au à ceux qui vous ont aidé.
    Vous souhaitez participer aux rubriques CSS et (X)HTML ? Contactez-nous !

    Créer des colonnes de même hauteur en CSS
    Glossaire CSS
    Les bordures en CSS3
    Les transitions en CSS3

  9. #9
    Membre confirmé
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Août 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2011
    Messages : 112
    Par défaut
    je reprends tes mots, y a pas contradiction ?

    "Tant que la condition n'est pas remplie, on rentrera pas dans le if().
    Le else c'est pour le cas où la condition n'est pas remplie."

  10. #10
    Rédacteur

    Avatar de Torgar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 334
    Par défaut
    Non justement.

    - On entre dans le if si la condition est remplie, sinon on va dans le else.
    Dit autrement
    - Tant que la condition du if n'est pas remplie on va dans le else.

    ps: tu as réussi à me mettre le doute
    Je ne suis pas schizophrène, nous sommes unanime !!!

    ► Pensez à la balise code et au CODE HTML GENERE !!!!
    ► Au si c'est le cas et au à ceux qui vous ont aidé.
    Vous souhaitez participer aux rubriques CSS et (X)HTML ? Contactez-nous !

    Créer des colonnes de même hauteur en CSS
    Glossaire CSS
    Les bordures en CSS3
    Les transitions en CSS3

  11. #11
    Membre confirmé
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Août 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2011
    Messages : 112
    Par défaut
    avant que tu ne remplaces ton message j'ai écrit ça :

    j'ai eu peur d'être encore à côté de la plaque
    j'ai donc bien raison avec mon else du 1er if pas présent?


    bon là je suis paumé tant pis !!!

    merci

  12. #12
    Membre Expert
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Par défaut
    Salut,

    On peut affiner le motif de l'expression rationnelle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match('#^(?:[0-1][0-9]|2[0-3])(?:\.[0-5][0-9]){2}$#', $_POST['heure'])
    pour s'assurer que $_POST['heure'] represente bien une heure de 00.00.00 à 23.59.59

  13. #13
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Voilà comment avoir le même résultat sans recourir au exit :
    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
    <?php
     
    // au 1er appel => $_POST['heure'] n'est pas défini => le if est passé 
    if (isset($_POST['heure'])) {
       // tu avais oublié de mettre des quotes au pattern ainsi que d'échapper le caractère . (point)
       if (preg_match('#^[0-9]{2}\.[0-9]{2}\.[0-9]{2}$#', $_POST['heure'])) {
          echo "l'heure est valide";
       }
       else {
          echo "l'heure n'est pas valide";
       }
    }
    else { 
    ?>
       <!DOCTYPE html>
       <html>
           <head>
               <meta charset="utf-8" />
               <title>Titre</title>
           </head>
     
           <body>
       <!-- début création du formulaire -->
          <form method="post" action="traitement.php">
             <label for="heure"> Donner l'heure: </label>
             <input name="heure" id ="heure" type="text" />
             <input type="submit" value="Envoyer">
          </form>
       <!-- fin création du formulaire -->
    <?php } ?>
    Allez bon courage.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Verification d'un champ avec regex sous Talend
    Par tomlaurent dans le forum Développement de jobs
    Réponses: 0
    Dernier message: 06/11/2008, 10h31
  2. Problème avec RegEx et une Query string
    Par Erakis dans le forum Langage
    Réponses: 6
    Dernier message: 08/11/2005, 15h48
  3. Pb de verif form avec un champ array []
    Par deloo dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/09/2005, 11h33
  4. probleme date et heure avec mysql.
    Par argon dans le forum Langage SQL
    Réponses: 1
    Dernier message: 11/07/2005, 22h42
  5. Réponses: 3
    Dernier message: 13/08/2004, 18h52

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