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 :

[Tableaux] Problème d'initialisation de tableau ?


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de Jiraiya42
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    671
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 671
    Points : 114
    Points
    114
    Par défaut [Tableaux] Problème d'initialisation de tableau ?
    Salut !

    J'ai un soucis. J'ai une fonction qui me permet de récupérer le nombre d'années qui se sont écoulées entre une date de début et une date de fin. Je récupère le nombre d'années ça il y a aucun problème mais j'obtiens des messages d'erreurs pénibles :

    Notice: Undefined offset: 1 in c:\program files\easyphp1-7\www\test\func.php on line 146

    Notice: Undefined offset: 2 in c:\program files\easyphp1-7\www\test\func.php on line 146

    Notice: Undefined offset: 1 in c:\program files\easyphp1-7\www\test\func.php on line 147

    Notice: Undefined offset: 2 in c:\program files\easyphp1-7\www\test\func.php on line 147
    Pour le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function NbJours($debut, $fin) 
       {
        $tDeb = explode("-", $debut);
        $tFin = explode("-", $fin);
     
        $diff = mktime(0, 0, 0, $tFin[1], $tFin[2], $tFin[0]) - 
                mktime(0, 0, 0, $tDeb[1], $tDeb[2], $tDeb[0]);
        $diff = (($diff / 86400)+1); 
        $nb_annees = $diff / 365;
     
        return $nb_annees;
       }
    Quelqu'un peut m'aider à corriger ce problème svp ?

    Merci d'avance...
    "Vous qui entrez ici, abandonnez toute espérance." Dante

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 115
    Points : 104
    Points
    104
    Par défaut
    les dates que tu passent en paramètres sont sous quelle forme ? à priori le explode ne remplit pas les indices 1 et 2, le problème vient de là je pense, donc dépend du format des dates passées en paramètres : par exemple si tu passes en paramètre seulement l'année cette erreur est normale il suffit de modifier un peu le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function NbJours($debut, $fin) 
       {
        $tDeb = $debut;
        $tFin = $fin;
     
        $diff = mktime(0, 0, 0, 0, 0, $tFin) - 
                mktime(0, 0, 0, 0, 0, $tDeb);
        $diff = (($diff / 86400)+1); 
        $nb_annees = $diff / 365;
     
        return $nb_annees;
       }

  3. #3
    Membre régulier Avatar de Jiraiya42
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    671
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 671
    Points : 114
    Points
    114
    Par défaut
    Citation Envoyé par Odulo
    les dates que tu passent en paramètres sont sous quelle forme ? à priori le explode ne remplit pas les indices 1 et 2, le problème vient de là je pense, donc dépend du format des dates passées en paramètres : par exemple si tu passes en paramètre seulement l'année cette erreur est normale il suffit de modifier un peu le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function NbJours($debut, $fin) 
       {
        $tDeb = $debut;
        $tFin = $fin;
     
        $diff = mktime(0, 0, 0, 0, 0, $tFin) - 
                mktime(0, 0, 0, 0, 0, $tDeb);
        $diff = (($diff / 86400)+1); 
        $nb_annees = $diff / 365;
     
        return $nb_annees;
       }
    En fait j'ai modifié, je passais juste l'année mais en fait c'est mieux de passer la date complète, je la passe sous la forme AAAAMMJJ
    "Vous qui entrez ici, abandonnez toute espérance." Dante

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 115
    Points : 104
    Points
    104
    Par défaut
    donc c'est bon maintenant ? par AAAAMMJJ tu veux dire AAAA-MM-JJ ? si c'est le cas plus de problèmes je pense

  5. #5
    Membre régulier Avatar de Jiraiya42
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    671
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 671
    Points : 114
    Points
    114
    Par défaut
    Citation Envoyé par Odulo
    donc c'est bon maintenant ? par AAAAMMJJ tu veux dire AAAA-MM-JJ ? si c'est le cas plus de problèmes je pense
    Avec ma fonction ? Non j'ai toujours des problèmes oui c'est bien AAAA-MM-JJ
    "Vous qui entrez ici, abandonnez toute espérance." Dante

  6. #6
    Membre averti

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 206
    Points : 319
    Points
    319
    Par défaut
    Tu dois avoir une erreur dans la chaîne que la fonction reçois en argument :o, car je viens d'essayer ceci rapidement sur un serveur local PHP 5 (easyphp) :

    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
     
    <?php
     
    function NbJours($debut, $fin) 
    {
        $tDeb = explode("-", $debut);
        $tFin = explode("-", $fin);
     
        $diff = mktime(0, 0, 0, $tFin[1], $tFin[2], $tFin[0]) - 
                mktime(0, 0, 0, $tDeb[1], $tDeb[2], $tDeb[0]);
        $diff = (($diff / 86400)+1); 
        $nb_annees = $diff / 365;
     
        return $nb_annees;
    }
     
    $test = NbJours( '2000-01-01', '2005-01-01' );
    var_dump($test); //Affiche : float(5.0082191780822).
    echo ( (int) $test); //Affiche : 5 
    ?>
    Donc 5 ans de différence ?? ^^ Tu dois bien avoir une erreur dans la chaîne de caractère envoyée en guise d'argument.

  7. #7
    Membre régulier Avatar de Jiraiya42
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    671
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 671
    Points : 114
    Points
    114
    Par défaut
    Citation Envoyé par meliandah
    Tu dois avoir une erreur dans la chaîne que la fonction reçois en argument :o, car je viens d'essayer ceci rapidement sur un serveur local PHP 5 (easyphp) :

    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
     
    <?php
     
    function NbJours($debut, $fin) 
    {
        $tDeb = explode("-", $debut);
        $tFin = explode("-", $fin);
     
        $diff = mktime(0, 0, 0, $tFin[1], $tFin[2], $tFin[0]) - 
                mktime(0, 0, 0, $tDeb[1], $tDeb[2], $tDeb[0]);
        $diff = (($diff / 86400)+1); 
        $nb_annees = $diff / 365;
     
        return $nb_annees;
    }
     
    $test = NbJours( '2000-01-01', '2005-01-01' );
    var_dump($test); //Affiche : float(5.0082191780822).
    echo ( (int) $test); //Affiche : 5 
    ?>
    Donc 5 ans de différence ?? ^^ Tu dois bien avoir une erreur dans la chaîne de caractère envoyée en guise d'argument.
    Tu n'obtiens pas le message d'erreur avec cette fonction toi ? C'est bizarre car je passe la même chose que toi en argument
    "Vous qui entrez ici, abandonnez toute espérance." Dante

  8. #8
    Membre régulier Avatar de Jiraiya42
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    671
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 671
    Points : 114
    Points
    114
    Par défaut
    Ah voilà j'ai trouvé où je me ratais. Effectivement tu avais raison l'argument passé n'était pas d'un format valide. J'avais une fonction qui convertissait les dates de format JJMMAAAA en AAAA/MM/JJ or ma fonction récupérant le nombre d'années n'acceptait que les AAAA-MM-JJ

    Voili voilu, problème règlé, merci à tous
    "Vous qui entrez ici, abandonnez toute espérance." Dante

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/02/2007, 20h02
  2. Réponses: 3
    Dernier message: 21/09/2006, 15h55
  3. Réponses: 9
    Dernier message: 11/08/2006, 21h58
  4. [Tableaux] Problème pour contrôler un tableau
    Par renaud26 dans le forum Langage
    Réponses: 5
    Dernier message: 10/04/2006, 11h45
  5. Problème d'initialisation variable tableau
    Par HeZiX dans le forum Langage
    Réponses: 3
    Dernier message: 08/06/2005, 16h30

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