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 :

fournir des données correctes à checkdate [PHP 7]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 495
    Billets dans le blog
    1
    Par défaut fournir des données correctes à checkdate
    Bonjour,
    dans mon code, je teste les variables saisies par l'utilisateur pour tracker les mauvaises saisies. Notamment, je teste que les dates sont valides.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                $line=$line_csv['ACTIVATEDATE'];
                $thisisanarray=explode('/',$line);
                list($jour,$mois,$annee)=$thisisanarray;
                if ((is_int($jour))||(is_int($mois))||(is_int($annee))||(!checkdate($mois,$jour,$annee)))
                {
                    exit("Non valid activedate for SESA=".$line_csv['SESAID']);
                }
    Pour tester, j'ai saisi une date foireuse : 26/07/2018-- et bien que je teste si les variables retournées par list sont bien des entiers,
    ( ! ) Notice: A non well formed numeric value encountered in C:\projets\ticket_rawsrc\model\license\LCSVInBDD2.php on line 239
    la ligne 239 est ici la ligne 4.
    Comment faut-il faire ?

  2. #2
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 60
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Bonsoir Laurent,

    Je ne connais qu'une façon rapide et solide de tester une date.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $d = new DateTime($ma_date_ou_mon_datetime_au_format_SQL);
    if($d instanceof DateTime){
     echo 'OK';
    }
    else{
     echo 'KO';
    }
    Mais ton problème vient de là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     if ( ! (is_int($jour) &&  is_int($mois) &&  is_int($annee) && checkdate($mois,$jour,$annee)) ){
    echo 'ko';
    }
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  3. #3
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 495
    Billets dans le blog
    1
    Par défaut
    Merci pour ta réponse Sylvie.
    J'ai essayé les 2 solutions. Mais :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                $line=$line_csv['ACTIVATEDATE'];    // 26/07/2018---
                $d = new DateTime($line);
                if(!$d instanceof DateTime){
                    exit("Non valid activedate for SESA=".$line_csv['SESAID']);
                }

    ( ! ) Fatal error: Uncaught Error: Class 'ticket_rawsrc\model\license\DateTime' not found in C:\projets\ticket_rawsrc\model\license\LCSVInBDD2.php on line 240
    La ligne 240 est ici la ligne 3

    L'erreur est là même en mettant la date au format SQL !
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                $line=$line_csv['ACTIVATEDATE'];
                $thisisanarray=explode('/',$line);
                list($jour,$mois,$annee)=$thisisanarray;
                $date_SQL_format=$annee."-".$mois."-".$jour;
                $d = new DateTime($date_SQL_format);
                if(!$d instanceof DateTime){
                    exit("Non valid activedate for SESA=".$line_csv['SESAID']);
                }

  4. #4
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 60
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Tu es à quelle version de PHP ?

    (PHP 5 >= 5.2.0, PHP 7)
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  5. #5
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 495
    Billets dans le blog
    1
    Par défaut
    Je viens seulement de te lire...

    PHP Version 7.4.7

  6. #6
    Membre émérite
    Femme Profil pro
    Autre
    Inscrit en
    Janvier 2017
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2017
    Messages : 340
    Par défaut
    Bonjour,
    Citation Envoyé par laurentSc Voir le message
    ( ! ) Fatal error: Uncaught Error: Class 'ticket_rawsrc\model\license\DateTime' not found in C:\projets\ticket_rawsrc\model\license\LCSVInBDD2.php on line 240
    A priori, un problème d'espace de noms.
    \DateTime
    https://www.php.net/manual/fr/langua...s.fallback.php

  7. #7
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 495
    Billets dans le blog
    1
    Par défaut
    Merci pour ton intervention Loralina. Une petite recherche m'a aussi donné cette piste, et si j'écris $d = new \DateTime($date_SQL_format);, le message d'erreur change, mais y en a encore un :
    PHP Fatal error: Uncaught Exception: DateTime::__construct(): Failed to parse time string (2018----07-26) at position 4 (-): Unexpected character in /C:/projets/ticket_rawsrc/model/license/LCSVInBDD2.php on line 241
    J'ai l'impression qu'il n'aime pas que j'ai mis des tirets au bout de l'année, car du coup, ce n'est plus le format SQL. Comment faire ?

  8. #8
    Membre émérite
    Femme Profil pro
    Autre
    Inscrit en
    Janvier 2017
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2017
    Messages : 340
    Par défaut
    Oui, mais je suis un peu perplexe devant la solution de Dendrite.
    J'attends de voir un exemple où on passe dans le else.

    Sinon, pourquoi ne pas adapter le premier exemple des contributeurs ici :
    https://www.php.net/manual/en/functi...ate.php#113205
    Quelque chose dans ce style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function validateDate($date,$format='d/m/Y')
    	{
    	$d=DateTime::createFromFormat($format,$date);
    	return $d!==false && $d->format($format)===$date;
    	}
    $line_csv=['ACTIVATEDATE'=>'40/08/2020','SESAID'=>357];
    if(validateDate($line_csv['ACTIVATEDATE'])===false)
    	{
    	echo 'Non valid activedate for SESA='.$line_csv['SESAID'];
    	}
    else
    	{
    	echo 'Date valide.';
    	}

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

Discussions similaires

  1. Yahoo continue de scanner vos mails pour fournir des données aux annonceurs
    Par Stéphane le calme dans le forum Webmarketing
    Réponses: 10
    Dernier message: 29/08/2018, 17h29
  2. Réponses: 225
    Dernier message: 26/04/2018, 18h38
  3. Réponses: 0
    Dernier message: 16/11/2017, 12h14
  4. Réponses: 4
    Dernier message: 16/09/2010, 23h33
  5. Formater correctement des données dans un fichier texte
    Par arnaudperfect dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 15/08/2007, 23h44

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