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 :

Formulaire SELECT et boucle sur un objet récupéré d'une base


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 70
    Points : 53
    Points
    53
    Par défaut Formulaire SELECT et boucle sur un objet récupéré d'une base
    Bonjour,

    Je continue ma découverte de PHP.
    J'ai un formulaire avec une liste déroulante que je veux alimenter avec des données récupérées d'une table d'une BDD My SQL.
    Voici mon code qui ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                <select name="leslangue">
                  <?php foreach ($langues as $langue)
                  {
                    echo '<option value='.$langue['id_langue'].'>'.$cd_langue['cd_langue'];
                  }
                  ?>
                </select>
    le problème est
    "Fatal error: Cannot use object of Type PDOStatement as array in ... on line 10"
    la ligne 10 est la ligne où j'ai mis l'"echo".

    Merci encore pour votre aide.

  2. #2
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 70
    Points : 53
    Points
    53
    Par défaut
    Citation Envoyé par basket Voir le message
    Bonjour,

    Je continue ma découvert de PHP.
    J'ai un formulaire avec une liste déroulante que je veux alimenter avec des données récupérées d'une table d'une BDD My SQL.
    Voici mon code qui ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                <select name="leslangue">
                  <?php foreach ($langues as $langue)
                  {
                    echo '<option value='.$langue['id_langue'].'>'.$langue['cd_langue'];
                  }
                  ?>
                </select>
    le problème est
    "Fatal error: Cannot use object of Type PDOStatement as array in ... on line 10"
    la ligne 10 est la ligne où j'ai mis l'"echo".

    Merci encore pour votre aide.
    Je corrige le code ci-dessous, car il y avait un 'cd_' en trop, mais ce n'est pas pour cela que ça ne marche pas.

  3. #3
    Expert confirmé
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Points : 4 853
    Points
    4 853
    Par défaut
    Salut,
    Peux tu montre le fragment de code qui vient avant ?
    Développeur | Zend Certified Engineer

    Étapes Pour mieux se servir du forum:
    1. Commencez par lire les cours et tutoriels ;
    2. Faites une recherche;
    3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

    Nix>_Rien n'est plus pratique que la théorie

  4. #4
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 70
    Points : 53
    Points
    53
    Par défaut
    OK, je vais essayer de faire simple.

    Je me suis inspiré d'un tuto MVC de Tahé, sauf qu'il n'y a pas tous les cas et que je manque cruellement d'expérience en Objet et PHP.

    Voici la fonction qui demande les pages à afficher. Cette fonction est dans un fichier jaugeur.php qui est un controller.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      public function jaugeurdemandeinsert()
      {
        $langues = new Model_langue();
        $langues->getAll();
     
        $title = "Insertion d'un jaugeur";
     
        header('Content-Type: text/html; charset=utf-8');
        require 'View/header.tpl';
        require 'View/jaugeur/insert.tpl';
        require 'View/footer.tpl';
    //  require 'View/left.tpl';
      }
    Le bout de code du premier message vient du fichier insert.tpl.

    N'hésitez pas à me demander d'autres infos qui manqueraient à la résolution de mon problème.
    Merci pour votre aide

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 35
    Points : 134
    Points
    134
    Par défaut
    Essaye de remplacer :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach ($langues as $langue){
      echo '<option value='.$langue['id_langue'].'>'.$langue['cd_langue'];
    }
    par :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    foreach ($rows as $langue){
      $row = $langue->fetch(PDO::FETCH_ASSOC);
      echo '<option value='.$row['id_langue'].'>'.$row['cd_langue'];
     
    }

    Dutiona.

    EDIT : j'ai corrigé le code, j'avais mal lu l'emplacement de l'erreur.

  6. #6
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    Bonjour,

    je ne connais pas ce tuto, mais vu qu'il s'agit à priori de POO, peut-être faut-il appeler les attributs autrement ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo '<option value='.$langue->id_langue.'>'.$langue->cd_langue;

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 35
    Points : 134
    Points
    134
    Par défaut
    Moi je lis juste l'erreur :
    "Fatal error: Cannot use object of Type PDOStatement as array in ... on line 10"

    Donc chacune de ses variable $langue est un objet PDOStatement. Pour utiliser cet objet, il faut récupérer l'array via fetch ou fetchAll. Bien sûr cela ne marchera que si il y a eu un execute après la préparation.


    Dutiona.

  8. #8
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 70
    Points : 53
    Points
    53
    Par défaut
    Dans ma classe Model_Langue (en fait, je l'ai aussi dans la classe abstraite Model_Template dont Model_Langue dérive), j'ai une fonction getAll() dont voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        public function getAll()
        {
            $this->selectAll->execute();
            return $this->selectAll->fetchAll();
        }
    selectAll fait référence à un autre bout de code dans cette même classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        public function __construct()
        {
            parent::__construct();
     
            $sql =  'SELECT
                      id_langue AS id_langue,
                      cd_langue AS cd_langue,
                      nom_langue AS nom_langue
                    FROM langue
                    ';
            $this->selectAll = Controller_Template::$db->prepare($sql);
    ... + les autres select, insert et update
    donc si je comprends bien, j'ai bien un execute() et un fetchAll(), non ?

  9. #9
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 70
    Points : 53
    Points
    53
    Par défaut
    J'ai d'autres endroits dans mon code où ça marche.
    Je me pose une question de portée des variables.

    Il se trouve que je suis dans un endroit où je traite des jaugeurs et je veux récupérer les langues disponibles dans l'appli.

    Est-ce que je fais cela correctement ? Peut-on aller chercher des données dans la base à n'importe quel endroit ?

    Organisation des sources :

    \Controller
    Jaugeur.php
    Langue.php
    \Model
    Jaugeur.php
    Langue.php
    \View
    footer.tpl
    header.tpl
    \jaugeur
    insert.tpl
    modif.tpl
    display.tpl
    index.tpl
    \langue
    insert.tpl
    modif.tpl
    display.tpl
    index.tpl

    Ceci est je crois conforme au tuto que j'ai suivi, et il ne s'agit pas de celui que j'avais indiqué, mais de celui là :
    http:////http://g-rossolini.developp...els/php/cours/

    C'est le controller Controller_Jaugeur (défini dans \Controller\Jaugeur.php) qui pilote la page.

    Merci de m'indiquer s'il n'y a pas d'erreur de conception dans cette façon de faire.

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 35
    Points : 134
    Points
    134
    Par défaut
    Salut, tu fais bien un $langues->getAll(); . Et donc tu as bien un fetchAll(), execute, etc... Mais le getAll() retourne le tableau (du fetchAll()). Or tu ne le récupère pas ici :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public function jaugeurdemandeinsert()
      {
        $langues = new Model_langue();
        $langues->getAll(); //Là tu récupère rien.
        //...
      }

    Ensuite tu parcours $langues dans ton template. $langues est un objet, donc tu vas parcourir les attributs publiques de cet objet. Si $selectAll est un attribut public, il sera forcément parcourus à un moment donné et $selectAll est un objet de type PDOstatement. Alors quand tu appelles $langue['...'] ça plante. C'est normal.

    Pour fixer le bug tu fais :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public function jaugeurdemandeinsert()
      {
        $langues = new Model_langue();
        $lgs = $langues->getAll(); // Tu récupère le fetchAll
        //...
      }
    Et dans le template :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php foreach ($lgs as $langue)
                  {
                    echo '<option value='.$langue['id_langue'].'>'.$langue['cd_langue'];
                  }
                  ?>


    Dutiona.

  11. #11
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 70
    Points : 53
    Points
    53
    Par défaut
    Super merci !
    Ce forum est toujours un plaisir.

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

Discussions similaires

  1. [XL-2010] Fair une boucle sur des objets Ranges
    Par Escorpion dans le forum Excel
    Réponses: 6
    Dernier message: 18/03/2015, 19h14
  2. Boucle sur les objets de la classe
    Par mactwist69 dans le forum VB.NET
    Réponses: 6
    Dernier message: 05/06/2014, 16h27
  3. Boucle sur des objets d'une feuille
    Par BERRACHED SAID dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 09/07/2013, 10h54
  4. [AC-2002] Boucle sur les objets chart dans Userform
    Par Kriss63 dans le forum VBA Access
    Réponses: 6
    Dernier message: 03/02/2010, 10h56
  5. boucle sur un objet
    Par boubounne dans le forum VB.NET
    Réponses: 10
    Dernier message: 22/02/2007, 16h33

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