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 :

Remplir un tableau JS à l'aide de php depuis une bdd


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
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 59
    Par défaut Remplir un tableau JS à l'aide de php depuis une bdd
    Bonjour tout le monde!

    Derrière ce titre barbare se cache en fait un problème facile pour certains mais complexe pour moi...
    Pour aller à l'essentiel, je travaille sur un calendrier de réservations, les jours qui composent ce calendrier peuvent avoir 3 états : "free", "pending", "booked" ("libre", "en attente" et "occupé" pour ceux qui seraient fâchés avec l'anglais... :p )
    Ces états sont stockés dans une base de données contenant les infos de la réservation, lorsqu'une location est faite, la page introduit la nouvelle entrée dans la bdd (l'état est directement mis à "pending"), ça, ça fonctionne très bien.

    Le problème survient lorsque je charge la page, je veux faire une lecture de la bdd afin de remplir un tableau qui contient les dates de la bdd et leur état afin de colorer le calendrier selon chaque date, sauf que, ce tableau est un tableau JavaScript (obligatoirement, j'en ai besoin dans mes traitements qui sont, eux aussi, en JS ), j'ai vu qu'on pouvait remplir un tableau JS avec du PHP avec des echo (pas la peine de me rappeler que le JS et PHP ne sont normalement pas compatibles vu qu'un est serveur et l'autre coté client...), mais ça ne marche pas...

    Voici à quoi devraient ressembler le tableau formé par le PHP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var arrayB = {'2017-08-01':'pending', '2017-08-18':'booked'};
    Pour rappel, ce tableau est un tableau JS...

    Voici comment je l'instancie avec le PHP :

    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
    <script>
              // array à générer par exemple en php à partir des dates
              //'2017-08-01':'pending'
              var arrayB = new Array(
              <?php
                try
                {
                  $bdd = new PDO('mysql:host=localhost;dbname=asbl;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
                }
                catch(Exception $e)
                {
                //En cas d'erreur, on affiche un message et on arrête tout
                  die('Erreur : '.$e->getMessage());
                }
                $tab = array();
     
                $reponse = $bdd->query('SELECT dateReserv, etat FROM locations');
     
                $nbLignes = mysql_num_rows($reponse);
     
                for($i = 0; $i <= $nbLignes; $i++)
                {
                  if($i!=0)
                    echo ', ';
                  $donnees = $reponse->fetch();
                  $entree = $donnees['dateReserv'] . ':' . $donnees['etat'];
                  $tab[$i] = $entree;
     
                  echo $tab[$i];
                }
                $reponse->closeCursor();
              ?>
              );
            </script>
    Voici un screenshot de la bdd :

    Nom : bdd.jpg
Affichages : 1487
Taille : 109,3 Ko

    Voici ce que ça devrait donner :

    pour le tableau JS suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var arrayB = {'2017-08-10':'pending', '2017-08-20':'booked', '2017-08-15':'pending'};
    On obtient ceci :

    Nom : cal.jpg
Affichages : 1531
Taille : 19,4 Ko

    Je pense avoir tout dit, si vous avez d'autres questions, n'hésitez pas!

  2. #2
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Tu mélanges PDO et instructions mysql. Ca ne peut pas marcher.

    Pas testé mais ça devrait ressembler à ça.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
       $tab = array();
                while($donnees = $reponse->fetch())
                {
                  $entree  = "'".$donnees['dateReserv'] ."' : '". $donnees['etat']."'";
                  $tab[] = $entree;
     
                }
                echo implode(',',$tab);

    Attention dans ta requête SQL tu prends tous les enregistrements indépendamment d'une date de départ.
    De plus tu devrais faire un order by dateReserv pour que les enregistrements soient triés.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 59
    Par défaut
    décidément Badaze, on se voit souvent ces temps-ci

    Plus sérieusement, j'ai remplacé mon code par le tien mais ça ne fonctionne toujours pas, voici ce que j'ai :

    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
    <script>
              // array à générer par exemple en php à partir des dates
              //'2017-08-01':'pending'
              var arrayB = new Array(
              <?php
                try
                {
                  $bdd = new PDO('mysql:host=localhost;dbname=asbl;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
                }
                catch(Exception $e)
                {
                //En cas d'erreur, on affiche un message et on arrête tout
                  die('Erreur : '.$e->getMessage());
                }
     
                $reponse = $bdd->query('SELECT dateReserv, etat FROM locations ORDER BY dateReserv');
     
                $tab = array();
                while($donnees = $reponse->fetch())
                {
                  $entree  = "'".$donnees['dateReserv'] ."' : '". $donnees['etat']."'";
                  $tab[] = $entree;
     
                }
                echo implode(',',$tab);
                $reponse->closeCursor();
              ?>
              );
            </script>
    Je ne sais pas si le ORDER BY sert vraiment à quelque chose mais je l'ai mis pour la forme :p
    Je n'ai pas encore mis la date minimum mais chaque chose en son temps ;D

  4. #4
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Que donne le code généré ? As-tu mis des traces avant le while, dans le while pour voir si ça passe dedans ou pas ?

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 59
    Par défaut
    J'obtiens un calendrier avec des cases blanches (comme sur l'autre discussion si je ne m'abuse...)

    Ceci :

    Nom : cale.jpg
Affichages : 1407
Taille : 8,8 Ko


    j'ai ajouté des alert() dans le code (en fermant et réouvrant les balises php) et ca ne passe ni avant ni dans le while... donc c'est comme s'il passait l'instanciation du tableau JS...

  6. #6
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Non.

    il faut mettre les traces en php. N'oublie pas que le php est côté serveur.

    Ensuite que donne le source de la page ?

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

Discussions similaires

  1. Remplir un tableau a l'aide d'une boucle
    Par cefyou91 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 17/06/2015, 18h51
  2. Réponses: 6
    Dernier message: 24/06/2014, 15h25
  3. [MySQL] Code PhP pour afficher une BDD
    Par FSDonwload dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 27/04/2008, 00h15
  4. Réponses: 4
    Dernier message: 18/02/2007, 20h28
  5. Aide sur la création d'une bdd sous MySQL
    Par Shellai-93 dans le forum Débuter
    Réponses: 20
    Dernier message: 18/08/2006, 11h15

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