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 :

preg_match , checkdate et champ date


Sujet :

Langage PHP

  1. #1
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut preg_match , checkdate et champ date
    Salam ; pour un champ date , j'ai choisi de mettre dans un formulaire un champs de type input avec placeholder ( JJ/MM/AAAA) .
    voua allez dire qu'il y'a calendar en javascript et d'autre en php , techniquement en deux cliques la date est affecter dans le champ , par contre dans mon champ l'utilisateur tape 10 caractères , je crois qu'il y'a bien une différence.
    pourquoi ce choix ?
    je préfère faire des contrôle coté serveur.
    j'ai pas essaye de développez une fonction calendar en php ( php et moi ça fait ).
    je me demande est ce que pour le champ date ma proposition est une bonne résolution ?
    qu'elle est la méthode la plus sur pour vérifier le champ date ?
    merci

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    ton format, JJ/MM/AAAA est un format non standard, le format (français) est JJ/MM/AA, si t'as l'extension Intl pas de problème, sinon oublie et fait un format plus standard AAAA-MM-JJ

  3. #3
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Re ;
    si t'as l'extension Intl
    tu peut être plus explicite svp.
    un format plus standard AAAA-MM-JJ
    là ou je suis le type de date JJ/MM/AAAA ou JJ/MM/AA fait partie des habitudes de l'utilisateur.

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par redoran Voir le message
    Re ;
    tu peut être plus explicite svp.
    http://php.net/manual/fr/book.intl.php

    Citation Envoyé par redoran Voir le message
    là ou je suis le type de date JJ/MM/AAAA ou JJ/MM/AA fait partie des habitudes de l'utilisateur.
    C'est pas une habitude, ça part quand même d'une manière officiel d’écrire une date.

  5. #5
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    là ou je suis le type de date ( je voulais dire format )JJ/MM/AAAA ou JJ/MM/AA fait partie des habitudes de l'utilisateur.
    pour le lien je vais me mettre

  6. #6
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Re ;
    pour un champ date , j'ai choisi de mettre dans un formulaire un champs de type input avec placeholder ( JJ/MM/AAAA) .
    un moment de reflexion et je constate que cette méthode n'est pas la bonne résolution!!!
    pourquoi ?
    • je dois vérifier les jours: soit inférieur a 31.
    • je dois vérifier les mois : entre 1 et 12.
    • et les années.!!! aucune idée.
    • ensuite faut combiné:
    • vérification jour et mois : pour les mois de 30 jours et mois de 31 jours.
    • mois de février 28 jours et 29 jours.

    alors là pour faire un algorithme c'est du
    la solution javascript je la laisse en dernier.
    j'aimerai bien le faire en php mais sans vous c'est du
    ok je vais tenté une expérience et on verra le résultat.

  7. #7
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Tu peux décomposer ta date sur le séparateur / et ensuite la passer dans checkdate.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  8. #8
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Salam ; j'ai pris un peut de temps en cherchant la possibilité de faire un genre de maskedit (delphi) mais en html ou en php sur les input. le placeholder affiche le format mais il fait pas fonction.
    est ce qu'il y'a une possibilité de faire ça (bien sur sans javascript) ?
    je crois avec preg_match sa simule le maskedit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // On vérifie que les élément sont valides
    if ( empty($_POST['datedec']) || !preg_match('#^([0-9]{2})([/])([0-9]{2})\2([0-9]{4})$#', $_POST['datedec']))
    {
    $erreurs_msg['datevide'] = 'Veuillez saisir une date valide SVP.';
    }
    dans le code cidessus je verifier si la variable est vide ou elle ne respecte pas le format dans le preg_match le code marche bien, c'est un code que j'ai repris du web toute en me poussant a lire les regex.
    j'ai bien compris le regex sauf cette partie
    ...\2..
    !!!!
    en 2 j'arrive pas a inclure le checkdate ( genre !checkdate....) !!
    merci

  9. #9
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    bien sur sans javascript
    Il y a une raison rationnelle à ne pas vouloir utiliser JavaScript ?
    Parce qu'autant que je sache, les interactions avec l'utilisateur en PHP, c'est pas gagné (à moins bien sûr que chaque utilisateur vienne naviguer dans le data center qui héberge ton site)...
    Pour le placeholder, tu as bien l'attribut du même nom en HTML5, mais pour la compatibilité sur tous les navigateurs, JavaScript me semble incontournable et vouloir s'en passer, ben, c'est juste irréaliste...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  10. #10
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Slt;merci Bovino
    donc si je résume c'est faisable de crée un input genre maskedit sur le plan visuel avec du javascript !!!
    pourquoi je cherche toujours des alternative en php ?
    tous simplement les applications passeront par toute un arsenal de test , alors j'essaye de minimisé les failles du moment pour l'instant. ( problématique a discutée dans un post a part sinon les modérateur vont étre ).
    une aide serai souhaitable.

  11. #11
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Re ;
    code de vérification de date:
    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
     
    if (isset($_POST['validform'])) 
    	{
    // On vérifie que les élément sont valides
    if ( empty($_POST['datedec']) || !preg_match('#^([0-9]{2})/([0-9]{2})/([0-9]{4})$#', $_POST['datedec']))
    		{
    		$erreurs_msg['datevide'] = 'Veuillez saisir une date valide SVP.';
    		}
     
    elseif ( preg_match('#^([0-9]{2})/([0-9]{2})/([0-9]{4})$#', $_POST['datedec']))
    {
    datevalid($j,$m,$y)=explode("/",$_POST['datedec']);
    	if checkdate($j,$m,$y)
    		{
                     // si ok n'affiche rien
    		}
    	else
    		{
    		$erreurs_msg['daterron'] = 'Date non valide.';
    		}
     
    }
    le deuxiéme if vérifier si la variable est vide ou ne respecte pas le mask génère un message d’erreur.
    le elseif preg_match : si la date respect le mask alors on vérifier la validité de la date , si c'est ok j'affiche rien sinon un message d’erreur.
    que vaut ce code ?
    en plus j'ai un message d'erreur :
    Fatal error: Can't use function return value in write context in C:\wamp\www\s3g\mod\controlenreg.inc.php on line 18
    le problème est a la ligne 18 !!!!!

  12. #12
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    ce serait pas cette ligne là, la ligne 18 par hasard ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    datevalid($j,$m,$y)=explode("/",$_POST['datedec']);
    A quoi correspond la fonction datevalid ? Ce serait pas plutot list que tu veux utiliser ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    list($j,$m,$y)=explode("/",$_POST['datedec']);
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  13. #13
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    pas besoin de preg_match, un strtotime et un checkdate suffit

  14. #14
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Re ; Celira
    A quoi correspond la fonction datevalid ? Ce serait pas plutôt list que tu veux utiliser ?
    oui oui c'est exacte "List" .
    après correction j'ai le message suivant:
    Parse error: syntax error, unexpected T_STRING, expecting '(' in C:\wamp\www\s3g\mod\controlenreg.inc.php on line 20
    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
     
    if (isset($_POST['validform'])) 
    	{
    		// On vérifie que les élément sont valides
    		if ( empty($_POST['datedec']) || !preg_match('#^([0-9]{2})/([0-9]{2})/([0-9]{4})$#', $_POST['datedec']))
    			{
    				$erreurs_msg['datevide'] = 'Veuillez saisir une date valide SVP.';
    			}
     
    		elseif ( preg_match('#^([0-9]{2})/([0-9]{2})/([0-9]{4})$#', $_POST['datedec']))
    			{
    				list($j,$m,$y)=explode("/",$_POST['datedec']);
     
    				if checkdate ($j,$m,$y)
    					{
    					}
    				else
    					{
    					$erreurs_msg['daterron'] = 'Date non valide.';
    					}
     
    			}
    la ligne 20 correspond a:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if checkdate ($j,$m,$y)

  15. #15
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    il manque les parenthèses ....

  16. #16
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Merci stealth35 ,
    pas besoin de preg_match, un strtotime et un checkdate suffit
    le strtotime lit les dates en format anglais , par contre la mienne est au format francais JJ/MM/AAAA.

  17. #17
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par redoran Voir le message
    Merci stealth35 ,
    le strtotime lit les dates en format anglais , par contre la mienne est au format francais JJ/MM/AAAA.
    non le format français c'est JJ/MM/AA, pour le reste utilise soit IntlDateFormatter, soit date_create_from_format

  18. #18
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    excuse pour le format ta raison.
    la ligne 20 correspond a:
    Code :

    if checkdate ($j,$m,$y)
    le format de checkdate qui n'étais pas correcte , et le parenthèse qui étais manquant
    normalement c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (checkdate ($m,$j,$y))
    maintenant tous est entré dans l'ordre mais le checkdate ne fonctionne pas !!!

  19. #19
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    fais un var_dump($m,$j,$y);

  20. #20
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    ouf! c'est bon le code fonctionne avec var_dump.
    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
     
    elseif ( preg_match('#^([0-9]{2})/([0-9]{2})/([0-9]{4})$#', $_POST['datedec']))
    {
    	list($j,$m,$y)=explode("/",$_POST['datedec']);
     
    	if (checkdate ($m,$j,$y))
    	{
     
    	}
    	else
    	{
    	$erreurs_msg['daterron'] = 'Date non valide.';
            }
     
    }
    quand je test avec la date 29/02/2007 c'est bon affichage de message d'erreur.
    dans le cas d'une date exacte "22/02/2011" j'arrive pas a passé au contrôle du champs suivant. !!!

Discussions similaires

  1. formater un champ date dans un select
    Par sbeu dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 24/04/2006, 16h44
  2. Champ Date à '01/01/0001' -> Pb conversion de variant !!!
    Par AnnSo dans le forum Bases de données
    Réponses: 6
    Dernier message: 04/06/2004, 16h54
  3. récuperer année d'un champ date
    Par tomm dans le forum Bases de données
    Réponses: 11
    Dernier message: 12/05/2004, 16h24
  4. [CR] Problème de sélection sur un champ date
    Par noluc dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 21/11/2003, 16h56
  5. procedure stockée champ date
    Par tripper.dim dans le forum SQL
    Réponses: 5
    Dernier message: 25/04/2003, 09h47

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