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

PHP & Base de données Discussion :

Traitement de date champs NULL 01/01/1970


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2015
    Messages : 18
    Par défaut Traitement de date champs NULL 01/01/1970
    Bonjour à tous !

    J'ai un petit soucis au niveau du traitement des dates. J'utilise un petit bout de code php (voir ci-dessous) pour passer la date au format FR. Cela marche bien quand il y a une date. En revanche pour un prospect qui n'a pas été relancé (date_relance est donc = NULL en BDD) cela m'affiche la date 01/01/1970.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $date_relance = $resultat_afficher_prospects['date_relance'];	
    	  $date_relance = date("d/m/Y", strtotime($date_relance));
    Comment faire pour que rien ne s'affiche lorsque le champs date est NULL ?

    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 287
    Par défaut
    Si ta date est NULL dans MySQL, le strtotime va faire comme si elle était zéro.... et la date zéro correspond au 1er janvier 1970 (début de l'époque Unix).

    Tu peux par exemple faire un truc comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $date_relance = $resultat_afficher_prospects['date_relance'];	
    $date_relance = $date_relance ? date("d/m/Y", strtotime($date_relance)) : "";

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2015
    Messages : 18
    Par défaut
    Désolé en fait je me suis mal exprimé. En fait dans la BDD la valeur ne correspond pas a NULL mais à 0000-00-00.
    Après traitement PHP la date qui s'affiche est 01/01/1970.

    A la place je voudrais soit rien afficher soit afficher "xx/xx/xxx"

    Est-ce possible ?

    Merci pour la réponse précédente ca peut tout de même me servir

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 287
    Par défaut
    Ce que je t'ai indiqué devrait marcher aussi que la date soit NULL ou 0.

    Si tu veux afficher xx/xx/xxxx, ça donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $date_relance = $resultat_afficher_prospects['date_relance'];	
    $date_relance = $date_relance ? date("d/m/Y", strtotime($date_relance)) : "xx/xx/xxxx";

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2015
    Messages : 18
    Par défaut
    Non cela ne marche pas, j'ai toujours 01/01/1970 qui s'affiche. Voila mes 2 lignes php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $date_contact = $resultat_afficher_prospects['date_contact'];	
     
    $date_contact = $date_contact ? date("d/m/Y", strtotime($date_contact)) : '--/--/----';
    Est-ce que le type de champs 'date' en BDD poserait problème ?

  6. #6
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2015
    Messages : 18
    Par défaut
    Petite info:

    Dans ma BDD le champs date est par défault NULL. Par contre lors d'un enregistrement même si je laisse le champs vide je me retrouve avec 0000-00-00 et non NULL

  7. #7
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 287
    Par défaut
    Le cas est :
    Citation Envoyé par gat91200 Voir le message
    En revanche pour un prospect qui n'a pas été relancé (date_relance est donc = NULL en BDD) cela m'affiche la date 01/01/1970.
    Donc c'est normal que la date soit NULL.

    A moins que tu ne veuilles mettre une date de non-relance ?

  8. #8
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Il faut qu'elle soit NULL mais pas '0000-00-00' dans aucun cas.

  9. #9
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 287
    Par défaut
    Mais personne n'a dit que ça faisait '0000-00-00' ! C'est toi qui a inventé ça

  10. #10
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    C'est ce que je comprends dans cette phrase personnellement :

    Dans ma BDD le champs date est par défault NULL. Par contre lors d'un enregistrement même si je laisse le champs vide je me retrouve avec 0000-00-00 et non NULL
    Mais par contre en effet je peux me planter...

  11. #11
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 287
    Par défaut
    Ah, toutes mes excuses, j'avais raté cette phrase

    Effectivement, quand la colonne date est obligatoire, MySQL refuse les dates invalides mais accepte les NULL en les transformant en date 0000-00-00. Idéalement, il faudrait donc modifier la table pour que la colonne date_relance soit nullable, puis transformer les 0000-00-00 en NULL.

    Ceci dit, ça ne modifie pas trop les choses côté PHP... il faut voir quelle est la valeur (ou quelles sont les valeurs) reçue(s) quand il n'y a pas de relance, et l'(es) exclure du strtotime.

    Au fait, pourquoi faire un strtotime ? Quand il y a une date renseignée, PHP ne devrait-il pas recevoir une date ?

    @gat91200 : il y a un moment où tu es passé de $date_relance à $date_contact... c'est quoi la bonne variable ?

Discussions similaires

  1. [XL-2010] Traitement de date null sur vba et excel
    Par juju05 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/07/2012, 16h44
  2. Réponses: 5
    Dernier message: 09/05/2012, 18h16
  3. Traitement sur un champs de type Date
    Par diblasio dans le forum Débuter
    Réponses: 2
    Dernier message: 09/03/2010, 13h57
  4. comment vérifier si un champ date est null ?
    Par newmar dans le forum Struts 1
    Réponses: 4
    Dernier message: 06/05/2008, 00h23
  5. [Dates] Réagir en fonction d'un champ NULL
    Par Xeeder dans le forum Langage
    Réponses: 12
    Dernier message: 26/02/2008, 10h45

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