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 :

inscrire une date en PHP dans la BDD


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    478
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 478
    Points : 189
    Points
    189
    Par défaut inscrire une date en PHP dans la BDD
    Bonjour,

    Je ne comprends plus rien a un bout de code pour inscrire une date dans la BDD.

    Toutes des dates entre JANVIER et JUILLET et entre OCTOBRE et DECEMBRE fonctionne tres bien mais par contre si la date est AOUT ou SEPTEMBRE, au lieu d'avoir les chiffres des mois 08 et 09, il renvoie toujours comme resultat 10 (OCTOBRE)???


    J'avoue ne plus rien comprendre. Quelqu'un a t-il une idee??

    Merci de 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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    $fin_date=$_POST['inputField2'];
     
    $decompo_f_date = explode("-", $fin_date);
     
    $fin_jour=$decompo_f_date[0];
    $fin_mois=$decompo_f_date[1];
     
    if ($fin_mois=="JANVIER")
    {
    $fin_mois=01;	
    }
    if ($fin_mois=="FEVRIER")
    {
    $fin_mois=02;	
    }
    if ($fin_mois=="MARS")
    {
    $fin_mois=03;	
    }
    if ($fin_mois=="AVRIL")
    {
    $fin_mois=04;	
    }
    if ($fin_mois=="MAI")
    {
    $fin_mois=05;	
    }
    if ($fin_mois=="JUIN")
    {
    $fin_mois=06;	
    }
    if ($fin_mois=="JUILLET")
    {
    $fin_mois=07;	
    }
    if ($fin_mois=="AOUT")
    {
    $fin_mois=08;	
    }
    if ($fin_mois=="SEPTEMBRE")
    {
    $fin_mois=09;	
    }
    if ($fin_mois=="OCTOBRE")
    {
    $fin_mois=10;	
    }
    if ($fin_mois=="NOVEMBRE")
    {
    $fin_mois=11;	
    }
    if ($fin_mois=="DECEMBRE")
    {
    $fin_mois=12;	
    }
     
    $fin_annee=$decompo_f_date[2];
     
     
     
    date_default_timezone_set('America/Los_Angeles');
    setlocale(LC_TIME,"fr_FR");
     
     
     
       $datefin = date("Y-m-d", mktime(0, 0, 0, $fin_mois, $fin_jour, $fin_annee));

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Il faut enlever les 0 non significatif lors de l'affection de la variable $fin_mois, l'erreur viens de la.

    Pourquoi ? j'avoue que je n'ai pas la réponse et que je suis intéréssé de la connaitre.
    EDIT: en recherchant integer sur la doc php.net, il est écrit, je cite:
    "Les entiers peuvent être spécifiés en notation décimale (base 10), hexadécimale (base 16), octale (base 8), ou binaire (base 2) optionnellement précédée d'un signe (- ou +)."
    et:
    "Pour utiliser la notation octale, précédez le nombre d'un 0 (zéro)"

    donc pour résoudre ton probleme soit tu suprime le 0 avant les valeur inferieur a 10 soit tu affecte la valeur comme une chaine de caractere (i.e $fin_mois = "08")

    Peut tu m'expliquer pourquoi tu tiens a mettre un 0 avant?
    Si c'est pour formater la date tu n'as pas besoin de faire sa. effectivement tu utilise la fonction mktime() qui calcul un timestamp("Ce timestamp est un entier long, contenant le nombre de secondes entre le début de l'époque UNIX (1er Janvier 1970 00:00:00 GMT) et le temps spécifié") avec les argument que tu lui passe.
    dans le temps en seconde qui est calculé tes 0 non significatif n'ont vraiment plus de signification . et sur ce timestamp tu applique la fonction date qui sert a formater un timestamp:
    le premier argument de la fonction date est le format (i.e "Y-m-d") le m dans ta chaine de caractere signifie "Mois au format numérique, avec zéros initiaux" "01 à 12" c'est la fonction qui ajoute le 0 pas toi, le fromatage n'est pas de ton ressort puique tu utilise une fonction pour le faire.

    Au fait, un switch() serait un peu plus propre ou au moins if(){....} else if(){....} else{....}
    dans ton code tu test si la variable est égale a une valeur mais quand la condition est vraie tu continue de verifier si elle n'est pas égale au autre, c'est une perte de temps puisque $fin_mois n'est égale qu'a une et une seul valeur.

    Nicolas,

  3. #3
    Membre actif
    Homme Profil pro
    développeur
    Inscrit en
    Février 2013
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : développeur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 123
    Points : 256
    Points
    256
    Par défaut
    Bonjour,

    La raison de ce problème?
    Elle provient de ce que tu as dis fsbpiop
    c'est une notation octale!
    Or les chiffres 8 et 9 n'existent pas en octal (il n'y a que les chiffres 0, 1, 2, 3, 4, 5, 6 et 7)
    Du coup PHP est paramétré pour que dans ce genre de cas, il arrondisse à l'unité supérieur soit 10 (7 + 1 = 10 en octal)
    d'où le fait qu'il te renvoi le mois d'octobre.
    voili voilou
    #Hashtag

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Points : 8
    Points
    8
    Par défaut
    je te remercie. j'ai éditer apres avoir fais quelque recherche.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    478
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 478
    Points : 189
    Points
    189
    Par défaut
    Merci beaucoup fsbpiop et MacKay77 pour vos explications. Effectivement je pensais qu'il devait y avoir 2 chiffres avec la fonction mktime.

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    j'ai repris ton code parce que j'avais les yeux qui pleuraient
    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
    <?php
     
        $months = array(
            'JANVIER' => 1, 'FEVRIER' => 2, 'MARS' => 3, 'AVRIL' => 4, 'MAI' => 5, 'JUIN' => 6,
            'JUILLET' => 7, 'AOUT' => 8, 'SEPTEMBRE' => 9, 'OCTOBRE' => 10, 'NOVEMBRE' => 11, 'DECEMBRE' => 12
        );
     
        $parts = (empty($_POST['inputField2'])) ? array() : explode('-', $_POST['inputField2']);
     
        if ((count($parts) !== 3) || (empty($months[$parts[1]])))
        {
            // date invalide
        }
     
        // vérifie que les jours sont correctes par rapport au mois et à l'année
        $date_fin = new DateTime("{$parts[2]}-{$parts[1]}-{$parts[0]}");
        if ($date_fin === false)
        {
            // date invalide
        }     
     
        date_default_timezone_set('America/Los_Angeles');
        setlocale(LC_TIME,"fr_FR");
    PHP offre tout ce qu'il faut nativement pour manipuler les dates.
    Et si tu utilises en plus ICU, tu toucheras le paradis.

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

Discussions similaires

  1. inserer une date en ASP dans une base ACCESS
    Par link39001 dans le forum ASP
    Réponses: 7
    Dernier message: 17/05/2006, 13h13
  2. Mettre une date par defaut dans une textBox.
    Par yaumme dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 01/12/2005, 22h39
  3. Réponses: 4
    Dernier message: 02/11/2005, 16h24
  4. Réponses: 5
    Dernier message: 19/10/2005, 14h56
  5. [C#]Passer une date en paramètre dans Crystal Report
    Par choupinette dans le forum ASP.NET
    Réponses: 5
    Dernier message: 09/08/2005, 09h59

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