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 :

choix du format de la date dans une table et insertion [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club Avatar de lisa.a
    Inscrit en
    Mai 2004
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 95
    Points : 49
    Points
    49
    Par défaut choix du format de la date dans une table et insertion
    Bonjour
    j'ai un formulaire où je demande à l'utilisateur d'entrer une date arbitraire (je récupère $mois, $jour, $an).
    Dans une table je veux entrer : cette date arbitraire et la date courante
    Je fais :

    $date_rec=time();
    $date_user=mktime(0, 0, 0, $mois, $jour, $an);

    et pour l'insert
    $query="INSERT INTO toto (`jour_user`, `jour_rec`) VALUES
    ($date_user,$date_rec)";

    les champs jour_user et jour_rec sont au format time dans ma base

    Ca ne marche pas, ça met pour les 2 entrées 838:59:59 dans la base
    je ne sais pas si ça correspond à qqchose mais ça n'a forcément pas marché parce que je fais mes tests avec un date_user et un date_rec différent.
    donc je pense que je me gourre de format qqpart ...

    Est-ce que vous avez une idée ?
    par ailleurs à terme je voudrais faire des requetes genre "à partir de la date" ou entre la date truc et machin. Je ne sais pas quel format permet le plus de souplesse pour faire ce genre de requete je veux bien vos conseils

    merci d'avance !
    ++
    Lisa

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    il faut mettre dans la table mysql, pour ton champ date, le format int(11).

    Pourquoi ? parce que tu génères un timestamp, ce qui est entier, et non une date.

  3. #3
    Membre du Club Avatar de lisa.a
    Inscrit en
    Mai 2004
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 95
    Points : 49
    Points
    49
    Par défaut
    ok ça a l'air de marcher c cool
    est-ce qu'il y a une fonction pour générer une donnée au format "date" à partir du timestamp ? j'ai regardé sur la page doc de date() et time() mais y a rien qui parle de ça...
    ça serait juste pour avoir une entrée unn peu "lisible" directement depuis la bdd (mais c'est ptet une mauvaise idée ?)

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Tu veux que dans la base de données tu es directement une date plus lisible ?

  5. #5
    Membre du Club Avatar de lisa.a
    Inscrit en
    Mai 2004
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 95
    Points : 49
    Points
    49
    Par défaut
    oui mais je n'y arrive pas
    j'essaie depuis toute à l'heure sans succès ça me prend la tete ...
    (essai le plus récent qui ne marche pas : $date_rep_ok="$an-$mois-$jour $heure:$min:00")
    et puis d'un autre coté je sais pas si c'est une bonne idée

    en fait je voudrais que les requetes soient plus simples possibles pour mysql genre "afficher toutes les entrées à partir de telle date"
    est-ce que mysql gere pas mieux si elle a des datetimes ?
    ou pas ?

    c'est quoi la façon de faire traditionnelle ?
    ou alors jm'emmerde pas et je fais un champ jour, un champs moi, un champs année, un champ minute, un champ heure ... mais j'ai la sensation que c'est pas optimale ...

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu peux utiliser des champs datetime et faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $date_user=date('Y-m-d', mktime(0, 0, 0, $mois, $jour, $an));
    $query="INSERT INTO toto (jour_user, jour_rec) VALUES
    ($date_user,CURDATE())";

  7. #7
    Membre du Club Avatar de lisa.a
    Inscrit en
    Mai 2004
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 95
    Points : 49
    Points
    49
    Par défaut
    non ça marche pas
    ça met 0000-00-00 00:00:00 dans mon champ datetime
    et si je rajouter à la main
    $date_user=date('Y-m-d 00:00:00', mktime(0, 0, 0, $mois, $jour, $an));
    c'est sql qui me fait une erreur
    Erreur de syntaxe prčs de '00:00:00, now())

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    J'ai oublié les guillemets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $query="INSERT INTO toto (jour_user, jour_rec) VALUES
    ('$date_user',CURDATE())";

  9. #9
    Membre du Club Avatar de lisa.a
    Inscrit en
    Mai 2004
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 95
    Points : 49
    Points
    49
    Par défaut
    ah oui !
    super cool

    et pour ajouter les heures et minutes ?
    parce que si je fais
    $date_user=date('Y-m-d $heure:$minute:00', mktime(0, 0, 0, $mois, $jour, $an));
    ça marche pas

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $date_user=date('Y-m-d H:i:s', mktime(0, 0, 0, $mois, $jour, $an));
    Reporte toi a la documentation de date() pour avoir toutes les explications sur le formatage des dates

    Juste pour être complet :
    on peut aussi demander à mysql de convertir le timestamp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $date_user= mktime(0, 0, 0, $mois, $jour, $an);
    $query="INSERT INTO toto (jour_user, jour_rec) VALUES
    (FROM_UNIXTIMESTAMP('$date_user','%Y-%M-%D %H:%i:%s'),CURDATE())";

  11. #11
    Membre du Club Avatar de lisa.a
    Inscrit en
    Mai 2004
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 95
    Points : 49
    Points
    49
    Par défaut
    AH YES !!
    magnifique !!
    ça marche enfin (en changeant 2 des zéros par $heure et $minute of course)
    merci Bôoooooooooooooooooooooocoup !!!

  12. #12
    Membre du Club Avatar de lisa.a
    Inscrit en
    Mai 2004
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 95
    Points : 49
    Points
    49
    Par défaut
    Bon ben j'ai le probleme "inverse" maintenant ...
    maintenant je récupère de ma base mon datetime
    mais je ne sais pas comment faire pour récupérer les heures et les minutes...
    j'ai vu qu'en SQL il y a les fonctions MONTH DAY et YEAR, mais j'ai pas vu pour les heures et les minutes. Et puis c'est pas tres joli d'avoir ces fonctions dans le sql.

    Il y aurait pas une fonction php qui prend un datetime et qui renvoie son timestamp ? ça doit pas etre tres compliqué avec des regexp mais je sais pas faire ça

  13. #13
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    N'oublie pas que tu peux consulter la doc aussi pour trouver des fonctions

    strtotime()

  14. #14
    Membre du Club Avatar de lisa.a
    Inscrit en
    Mai 2004
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 95
    Points : 49
    Points
    49
    Par défaut
    jte jure je cherche ... mais manifestement je sais pas encore trop bien chercher
    t'as taper quoi comme recherche et où pour trouver ? (histoire que je m'améliore un peu )

    en tout cas of course ça marche !
    merci encore
    ++

  15. #15
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Dans la documentation PHP, les fonctions sont classées par theme :

    http://fr.php.net/manual/fr/ref.datetime.php

  16. #16
    Membre du Club Avatar de lisa.a
    Inscrit en
    Mai 2004
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 95
    Points : 49
    Points
    49
    Par défaut
    c'est noté chef !
    j'espere résoudre toute seule mon prochain bug
    encore merci
    ++

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

Discussions similaires

  1. [MySQL] insérer une date dans une table dans un format compréhensible
    Par laurentSc dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 16/08/2014, 12h10
  2. insérer une date dans une table dans un format compréhensible
    Par laurentSc dans le forum Langage SQL
    Réponses: 5
    Dernier message: 08/08/2014, 17h31
  3. Format de la date dans une migration Unix/Linux
    Par tiresias54 dans le forum Débuter
    Réponses: 5
    Dernier message: 08/11/2012, 00h36
  4. Changement format date dans une table access
    Par benPSA dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 15/01/2010, 16h48
  5. insérer une date dans une table mssql
    Par ericmart dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 29/01/2004, 11h37

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