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 :

Créer autant d'entrées que de jours dans une période [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 27
    Points : 15
    Points
    15
    Par défaut Créer autant d'entrées que de jours dans une période
    Bonjour à tous,
    voilà mon problème : je cherche à créer une base de données d'incidents.
    par exemple imaginons qu'un matériel soit en panne du 05/03/08 au 08/03/08.
    Sur mon interface php, je souhaite rentrer la date de début [champ début] et la date de fin [champ fin], et lors de la validation du formulaire créer autant d'entrées dans ma table que de jours de la période donnée, soit ici par exemple :
    1/ 20080305
    2/20080306
    3/20080307
    4/20080308

    Je sais que je pourrais simplement créer une entrée avec la date de début et la date de fin, mais je souhaite pouvoir par la suite créer des observations au jour le jour de l'avancement des réparations, ce qui nécessite de créer une entrée par jour.

    Existe t'il une fonction permettant cela ? j'ai cherché dans les scripts en rapport avec les calendriers ou agendas, mais je n'ai pas trouvé de solution. Comment procéder pour arriver à ce résultat ?

    Merci de votre aide et de vos contributions !

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    Je sais que je pourrais simplement créer une entrée avec la date de début et la date de fin, mais je souhaite pouvoir par la suite créer des observations au jour le jour de l'avancement des réparations, ce qui nécessite de créer une entrée par jour.
    je pense que dans ce cas il te faut créer une table a part observation qui contiendra 3champs:

    -idincident (clé etrangere sur l'id inciden de la table incident)
    -date
    -obs

    en clé primaire tu definis le couple (idincident, date)

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 87
    Points : 30
    Points
    30
    Par défaut
    Essaye avec une boucle for,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(i=dateDebut,i<dateFin,i++)
    {
           mysql_query("INSERT INTO table.colonne VALUES('i')");
    }
    Un truc comme ca, j'ai pas essayé! vérifie la syntaxe

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Bonjour,

    Il y a peut-être plus court, mais ça fonctionne :
    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
    <?php
      function genereDate($dateDeb, $dateFin)
      {
        $timestampDeb = strtotime($dateDeb);
        $jour = '';
        $i = 0;
        while ($jour < $dateFin)
        {
          $date[$i] = date('Y-m-d', strtotime('+' . $i . ' day', $timestampDeb));
          $jour = $date[$i];
          $i ++;
        }
        $valeur = '(\'' . implode('\'),(\'', $date) . '\')';
        $sql = 'insert into laTable (laDate)
                values ' . $valeur;
        echo $sql;
      }
    //----------------------------------------------------------
    //----------------------------------------------------------
      $dateDeb = '2008-03-05';
      $dateFin = '2008-03-08';
     
      genereDate($dateDeb, $dateFin);
    ?>

  5. #5
    Expert confirmé

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Points : 4 327
    Points
    4 327
    Par défaut
    moi je suis plutot d'accord avec boo64

    Je pense qu'il est necessaire de séparer cela en deux tables, une table de période avec seulement deux date (début et fin) puis une table d'observation identifié par la date (jour) et l'id de période, a ce moment la tu a pas des occurence qui servent a rien, les modifs sur tes periode sont plu facile, et l'identification de tes observation t'assure un certain controle d'intégrité concernant le nombre d'observation par jour.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    bon alors voilà, j'ai saisi la possibilité de créer une deuxième table, mais je trouve la réponse de Jeca intéressante techniquement dans le cadre de mon apprentissage.
    j'ai donc essayé de la mettre en oeuvre, mais j'échoue lamentablement.
    j'ai créé une page avec un formulaire et deux champs, que j'envoie par POST.

    Sur la page de réception, j'ai inclu le code de Jeca, dans lequel j'ai remplacé simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $dateDeb = '2008-03-05';
      $dateFin = '2008-03-08';
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $dateDeb = $_POST['datedeb'];
      $dateFin = $_POST['datefin'];
    l'echo ne me retourne alors que la valeur de 'datedeb'... je pense à une erreur de syntaxe, mais j'ai vérifié le nom de mon champ qui est bien 'datefin'... je ne vois pas quelle autre erreur est possible.
    J'ai bien compris la logique, le code marche avec les valeurs fixes... bref je suis un peu paumé.

    Par ailleurs, comment réaliser directement l'insert dans la base SQL lorsque le bouton submit est appuyé ?

    merci de vos précisions, je me désepère moi-même !

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 87
    Points : 30
    Points
    30
    Par défaut
    Euh désolé mais je ne comprends pas trop ton problème (je débute aussi!! )
    Par contre pour que ta valeur s'enregistre dans ta table lorsque tu clique sur submit tu dois ajouter une page de 'confirmation' dans laquelle tu vas écrire ta requête sql!
    En n'oubliant pas de mettre $_POST[valeur] dans ta requête!
    Bonne chance

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    bon, désolé pour le manque de suivi, mais vous savez ce que c'est, le temps...
    je viens vous solliciter de nouveau car je n'arrive pas à finaliser.
    voilà le code que j'ai mis en place en test -basé sur celui donné plus haut par Jeca (désolé si la syntaxe vous choque, mais j'y connais pas grand chose en php/sql):
    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
    <?php require_once('../Connections/cnx.php'); ?>
    <?php
      function genereDate($datedeb, $datefin)
      {
        $timestampDeb = strtotime($datedeb);
        $jour = '';
        $i = 0;
        while ($jour < $datefin)
        {
          $date[$i] = date('Y-m-d', strtotime('+' . $i . ' day', $timestampDeb));
          $jour = $date[$i];
          $i ++;
        }
        $valeur = '(\'' . implode('\'),(\'', $date) . '\')';
    	mysql_select_db($database_db, $base);
        $sql = "INSERT INTO pannes (date)
                VALUES $valeur" ;
    	//exécution de la requête SQL:
      $requete = mysql_query($sql, $db) or die( mysql_error() ) ;
     
      //affichage des résultats, pour savoir si l'insertion a marché:
      if($requete)
      {
        echo("L'insertion a été correctement effectuée") ;
      }
      else
      {
        echo("L'insertion a échoué") ;
      }
      }
    //----------------------------------------------------------
    //----------------------------------------------------------
      $datedeb = $_POST['datedeb'];
      $datefin = $_POST['datefin'];
     
      genereDate($datedeb, $datefin);
    ?>
    j'ai vérifié via un echo $sql la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     $sql = "INSERT INTO pannes (date)
                VALUES $valeur" ;
    qui est fonctionnelle (les inserts sont faits), mais ma fonction $requete doit avoir un problème car rien ne se passe au final...

    et franchement ça fait un bon moment que je teste divers trucs et ça ne marche toujours pas...

    merci de vos conseils, j'aimerais bien boucler ce topic

  9. #9
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql = "INSERT INTO pannes (date)
                VALUES ('".$valeur."')" ;

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par darkstar123456 Voir le message
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql = "INSERT INTO pannes (date)
                VALUES ('".$valeur."')" ;
    Merci, c'est vrai que ça fait plus propre, mais j'ai toujours mon problème.

    Je rentre la date de début et la date de fin sur ma page d'appel, et tout ce que j'obtiens c'est une page blanche : je n'ai pas les messages de confirmation ou d'erreur et les enregistrements dans la base de données ne sont pas faits...
    j'ai fait ce test : j'ai mis un echo $sql avant la requête, je récupère ce qu'il m'écrit, par exemple
    INSERT INTO pannes (date) VALUES ('('2008-04-22'),('2008-04-23'),('2008-04-24'),('2008-04-25')')
    dans le cas du code fournit par darkstar.
    Après cela j'ai fait une page de test, du 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
    15
    16
    <?php
      	mysql_select_db($cnx, $db);
        $sql = "INSERT INTO pannes (date) VALUES ('('2008-04-22'),('2008-04-23'),('2008-04-24'),('2008-04-25')')" ;
    	//exécution de la requête SQL:
      $requete = mysql_query($sql, $db) or die( mysql_error() ) ;
     
      //affichage des résultats, pour savoir si l'insertion a marché:
      if($requete)
      {
        echo("L'insertion a été correctement effectuée") ;
      }
      else
      {
        echo("L'insertion a échoué") ;
      }
    ?>
    Là j'obtiens une erreur SQL syntaxique, que je n'obtiens pas si je laisse le INSERT comme je l'ai écris dans le code que j'ai mis plus haut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql = "INSERT INTO pannes (date)
                VALUES $valeur" ;
    (avec ce code, les enregistrements sont faits dans la base de données, mais pas avec celui de Darkstar)

    Mais dans les deux cas, lorsque je lance ma requête à partir de ma page d'appel, rien ne se passe... Bref, je suis paumé, et je ne sais pas comment procéder pour trouver mes erreurs.

  11. #11
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    $sql = "INSERT INTO pannes (date) VALUES ('('2008-04-22'),('2008-04-23'),('2008-04-24'),('2008-04-25')')" ;


    la syntaxe ne m'a pas l'air correct. En gros si je comprends bien dans "date" tu inscrit 3 dates. Il faut déjà que ton champ ne soit pas de type date, datetime, timestamp, etc pour qu'il fonctionne.

    De plus, il faudrait échapper les simples quotes de tes dates pour ne pas qu'ils soient confondu avec ceux de mySQL.

    $sql = "INSERT INTO pannes (date) VALUES ('(\'2008-04-22\'),(\'2008-04-23\'),(\'2008-04-24\'),(\'2008-04-25\')')" ;

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par darkstar123456 Voir le message
    $sql = "INSERT INTO pannes (date) VALUES ('('2008-04-22'),('2008-04-23'),('2008-04-24'),('2008-04-25')')" ;
    En fait ceci est l'expression que me retourne la commande echo sur l'expression que tu m'avais donnée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql = "INSERT INTO pannes (date)
                VALUES ('".$valeur."')" ;
    effectivement, en l'état elle ne fonctionne pas (peut être faut-il échapper les simples quotes ? j'essaierai). La page de test dont je parle me sert juste à vérifier que la syntaxe renvoyée par le code est fonctionnelle, car mon problème vient du code de ma page d'insertion (celle appelée après avoir rempli mon formulaire) : rien ne se passe (ni message d'erreur, ni enregistrements dans la base), je cherche donc à voir ce qui est à l'origine du problème.

    En fait les dates qui seront à insérer correspondent à tous les jours compris dans une période donnée. Sur mon formulaire de départ, j'ai inscrit deux variables "datedeb" et "datefin" qui définissent la période.

    Il faut déjà que ton champ ne soit pas de type date, datetime, timestamp, etc pour qu'il fonctionne.
    Je ne comprends pas pourquoi il ne faut pas que ce soit de type date, puisque c'est précisément une date que je souhaite insérer... ooops, j'ai pas suivi sur ce coup

    En tout cas merci pour les indications.

  13. #13
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Puisque tu as basé ton code sur ce que je t'ai envoyé, ceci est faux :
    Citation Envoyé par darkstar123456 Voir le message
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql = "INSERT INTO pannes (date)
                VALUES ('".$valeur."')" ;
    La syntaxe correcte est la première :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql = 'insert into laTable (laDate)
            values ' . $valeur;
    Et si tu exécute cette requête, il n'y a pas de raison que les insertions ne se fassent pas (insertions multiples avec une seule requête).
    Fait un echo de $sql, un copier-coller dans phpmyadmin ou autre, exécute là manuellement et regarde le résultat.

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    je l'ai fait, j'obtiens ceci :
    INSERT INTO pannesyco(date) values ('2008-04-22'),('2008-04-23'),('2008-04-24'),('2008-04-25')
    le problème c'est qu'apparemment cette requête cherche à créer un seul enregistrement avec plusieurs colonnes, plutôt que plusieurs enregistrements en remplissant la colonne "date".

    C'est la raison pour laquelle j'ai cherché à modifier ce que tu avais mis.

  15. #15
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Impossible
    Cette requête crée 3 enreg.

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    autant pour moi.
    La requête mise directement sur phpmyadmin fonctionne et crée bien les 4 enregistrements...
    Je sais pas comment je me suis arrangé pour que ça ne fonctionne pas avant... Lorsque j'avais fait le test la première fois ça m'avait retourné une erreur de nombre de colonnes... je suis vraiment pas doué.

    J'imagine donc que s'il ne se passe rien avec ma page, c'est que j'ai dû faire une erreur sur l'appel de la requête sql ou sur la connexion à la base de données (pourtant j'ai vérifié des dizaines de fois...). Voilà ce que c'est d'utiliser des éditeurs WYSIWYG, après on sait pas coder. Je vais reprendre tout ça, et regarder les manuels, je vous tiendrai au courant des résultats... je suis sûr qu'il s'agit d'une erreur à la con.

  17. #17
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Fais voir le code de 'cnx.php'

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    bon alors au final j'ai tout repris depuis le début et simplifié un peu, et là ça marche.
    Je mets le code pour ceux que ça intéresserait, par contre du coup je ne sais pas ce qui causait le problème. Note : je n'ai pas modifié le fichier cnx.php qui me sert de référence à la connexion.

    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
    <?php require_once('../Connections/cnx.php'); ?>
    <?php
    //je rappelle mes variables
    $datedeb = $_POST['datedeb'];
    $datefin = $_POST['datefin'];
    //la fonction de JECA
        $timestampDeb = strtotime($datedeb);
        $jour = '';
        $i = 0;
        while ($jour < $datefin)
        {
          $date[$i] = date('Y-m-d', strtotime('+' . $i . ' day', $timestampDeb));
          $jour = $date[$i];
          $i ++;
        }
        $valeur = '(\'' . implode('\'),(\'', $date) . '\')';
    	mysql_select_db($nom_de_la_DB, $cnx);
        $sql = 'INSERT INTO  pannesyco(date)
            values ' . $valeur;
     
    //fonction d'appel SQL
      $requete = mysql_query($sql, $cnx) or die(mysql_error());;
     
    //affichage des résultats, pour savoir si l'insertion a marché:
      if($requete)
      {
        echo("L'insertion a été correctement effectuée") ;
      }
      else
      {
        echo("L'insertion a échoué") ;
      }
     ?>
    En tout cas un grand merci à tous pour votre aide précieuse, petit à petit je progresse

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

Discussions similaires

  1. [Débutant] Créer autant d'enregistrements que la valeur saisie dans une textbox
    Par AfroDurf dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 16/06/2015, 19h13
  2. [XL-MAC 2011] Analyse de jours dans une période
    Par PierrotLeo dans le forum Excel
    Réponses: 2
    Dernier message: 08/02/2015, 19h53
  3. [XL-2010] Calcul du nombre de jours dans une période ?
    Par Kalteck dans le forum Excel
    Réponses: 8
    Dernier message: 22/08/2012, 07h51
  4. [VI-2007] Creer autant de formes que d'enregistrements dans une BDD
    Par tyrael5 dans le forum Visio
    Réponses: 1
    Dernier message: 15/06/2012, 10h19
  5. Réponses: 2
    Dernier message: 07/02/2011, 17h26

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