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

MVC PHP Discussion :

Requête SQL et tableau


Sujet :

MVC PHP

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 671
    Par défaut Requête SQL et tableau
    Salut !

    Voici mon problème : je me suis mis depuis peu au Zend Framework et j'essaie de bidouiller, de tester... J'ai suivi un tuto... nikel tout fonctionne ajout, modif, sup... Mais je voulais tester en mettant directement une requête SQL et traiter le résultat pour voir mais j'ai que dalle car je crois que mon tableau de retour n'est pas considéré comme tel, voici ma conf :

    index.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
     
    <?php
    error_reporting(E_ALL|E_STRICT);
    ini_set('display_errors', 1);
    date_default_timezone_set('Europe/Paris');
     
    // mise en place des répertoires et chargement des classes
    set_include_path('.'
        . PATH_SEPARATOR . './library'
        . PATH_SEPARATOR . './application/models/'
        . PATH_SEPARATOR . get_include_path());
    include "Zend/Loader.php";
    Zend_Loader::registerAutoload();
     
    // Chargement de la configuration
    $config = new Zend_Config_Ini('./application/config.ini', 'general');
    $registry = Zend_Registry::getInstance();
    $registry->set('config', $config);
     
    // Mise en place de la BDD
    $db = Zend_Db::factory($config->db);
    Zend_Registry::set('dbAdapter', $db);
    Zend_Db_Table::setDefaultAdapter('dbAdapter');
     
    // setup controller
    $frontController = Zend_Controller_Front::getInstance();
    $frontController->throwExceptions(true);
    $frontController->setControllerDirectory('./application/controllers');
     
    Zend_Layout::startMvc(array('layoutPath'=>'./application/layouts'));
     
    // run!
    $frontController->dispatch();
    IndexController.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class IndexController extends Zend_Controller_Action 
    {
        function indexAction()
        {
    	$this->view->title = "Mes albums";
    	$album = new Albums();
    	$result = $album->afficher();
    	$this->view->albums = $result;
        }
    }
    Albums.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
     
    <?php
     
    class Albums extends Zend_Db_Table
    {
        protected $_name = 'albums';
     
        function afficher()
        {
            $select = $this->select()
                           ->from('albums', array('id', 'artist', 'title'));
    	$result = $this ->fetchRow($select);
        }
    }
    index.phtml

    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
     
    <p><a href="<?php echo $this->url(array('controller'=>'index',
            'action'=>'ajouter')); ?>">Ajouter un nouvel album</a></p>
    <table>
    <tr>
    	<th>Title</th>
    	<th>Artist</th>
    	<th>&nbsp;</th>
    </tr>
     
    <?php foreach($this->albums as $album) : ?>
    <tr>
    	<td><?php echo $this->escape($album->title);?></td>
    	<td><?php echo $this->escape($album->artist);?></td>
    	<td>
            <a href="<?php echo $this->url(array('controller'=>'index',
                'action'=>'modifier', 'id'=>$album->id));?>">Modifier</a>
            <a href="<?php echo $this->url(array('controller'=>'index',
                'action'=>'supprimer', 'id'=>$album->id));?>">Supprimer</a>
    	</td>
    </tr>
    <?php endforeach; ?>
    </table>
    Voilà et j'obtiens le warning suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Warning: Invalid argument supplied for foreach() in /var/www/zf-tutorial/application/views/scripts/index/index.phtml on line 10
    Et mon tableau vide...

    Quelqu'un peut m'aider svp ? J'ai googlisé pendant un bon moment et il n'en est ressorti que des échecs...

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Il faut retourner le résultat de la fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class Albums extends Zend_Db_Table
    {
        protected $_name = 'albums';
     
        function afficher()
        {
            $select = $this->select()
                           ->from('albums', array('id', 'artist', 'title'));
    	$result = $this ->fetchRow($select);
            return $result;
        }
    }

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 671
    Par défaut
    Oups en effet je l'avais zappé. La requête lancée dans PHPMyAdmin me retourne le résultat attendu mais je n'obtiens rien dans mon tableau... Pas d'erreur mais pas de données... est-ce l'affichage qui est inefficace ?

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    que donne ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     function indexAction()
        {
    	$this->view->title = "Mes albums";
    	$album = new Albums();
    	$result = $album->afficher();
    	//$this->view->albums = $result;
            Zend_Debug::dump($result);
        }

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 671
    Par défaut
    Ca me renvoie ça :

    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
     
    Warning: Invalid argument supplied for foreach() in /var/www/zf-tutorial/application/views/scripts/index/index.phtml on line 10
    Title 	Artist 	 
     
    object(Zend_Db_Table_Row)#41 (8) {
      ["_data:protected"] => array(3) {
        ["id"] => string(1) "1"
        ["artist"] => string(5) "Duffy"
        ["title"] => string(9) "Rockferry"
      }
      ["_cleanData:protected"] => array(3) {
        ["id"] => string(1) "1"
        ["artist"] => string(5) "Duffy"
        ["title"] => string(9) "Rockferry"
      }
      ["_modifiedFields:protected"] => array(0) {
      }
      ["_table:protected"] => object(Albums)#24 (16) {
        ["_name:protected"] => string(6) "albums"
        ["_db:protected"] => object(Zend_Db_Adapter_Pdo_Mysql)#5 (10) {
          ["_pdoType:protected"] => string(5) "mysql"
          ["_numericDataTypes:protected"] => array(16) {
            [0] => int(0)
            [1] => int(1)
            [2] => int(2)
            ["INT"] => int(0)
            ["INTEGER"] => int(0)
            ["MEDIUMINT"] => int(0)
            ["SMALLINT"] => int(0)
            ["TINYINT"] => int(0)
            ["BIGINT"] => int(1)
            ["SERIAL"] => int(1)
            ["DEC"] => int(2)
            ["DECIMAL"] => int(2)
            ["DOUBLE"] => int(2)
            ["DOUBLE PRECISION"] => int(2)
            ["FIXED"] => int(2)
            ["FLOAT"] => int(2)
          }
          ["_defaultStmtClass:protected"] => string(21) "Zend_Db_Statement_Pdo"
          ["_config:protected"] => array(6) {
            ["host"] => string(9) "localhost"
            ["username"] => string(4) "nico"
            ["password"] => string(8) "renaitre"
            ["dbname"] => string(6) "zftest"
            ["options"] => array(2) {
              ["caseFolding"] => int(0)
              ["autoQuoteIdentifiers"] => bool(true)
            }
            ["driver_options"] => array(0) {
            }
          }
          ["_fetchMode:protected"] => int(2)
          ["_profiler:protected"] => object(Zend_Db_Profiler)#6 (4) {
            ["_queryProfiles:protected"] => array(0) {
            }
            ["_enabled:protected"] => bool(false)
            ["_filterElapsedSecs:protected"] => NULL
            ["_filterTypes:protected"] => NULL
          }
          ["_defaultProfilerClass:protected"] => string(16) "Zend_Db_Profiler"
          ["_connection:protected"] => object(PDO)#26 (0) {
          }
          ["_caseFolding:protected"] => int(0)
          ["_autoQuoteIdentifiers:protected"] => bool(true)
        }
        ["_schema:protected"] => NULL
        ["_cols:protected"] => array(3) {
          [0] => string(2) "id"
          [1] => string(6) "artist"
          [2] => string(5) "title"
        }
        ["_primary:protected"] => array(1) {
          [1] => string(2) "id"
        }
        ["_identity:protected"] => int(1)
        ["_sequence:protected"] => bool(true)
        ["_metadata:protected"] => array(3) {
          ["id"] => array(14) {
            ["SCHEMA_NAME"] => NULL
            ["TABLE_NAME"] => string(6) "albums"
            ["COLUMN_NAME"] => string(2) "id"
            ["COLUMN_POSITION"] => int(1)
            ["DATA_TYPE"] => string(3) "int"
            ["DEFAULT"] => NULL
            ["NULLABLE"] => bool(false)
            ["LENGTH"] => NULL
            ["SCALE"] => NULL
            ["PRECISION"] => NULL
            ["UNSIGNED"] => NULL
            ["PRIMARY"] => bool(true)
            ["PRIMARY_POSITION"] => int(1)
            ["IDENTITY"] => bool(true)
          }
          ["artist"] => array(14) {
            ["SCHEMA_NAME"] => NULL
            ["TABLE_NAME"] => string(6) "albums"
            ["COLUMN_NAME"] => string(6) "artist"
            ["COLUMN_POSITION"] => int(2)
            ["DATA_TYPE"] => string(7) "varchar"
            ["DEFAULT"] => NULL
            ["NULLABLE"] => bool(false)
            ["LENGTH"] => string(3) "100"
            ["SCALE"] => NULL
            ["PRECISION"] => NULL
            ["UNSIGNED"] => NULL
            ["PRIMARY"] => bool(false)
            ["PRIMARY_POSITION"] => NULL
            ["IDENTITY"] => bool(false)
          }
          ["title"] => array(14) {
            ["SCHEMA_NAME"] => NULL
            ["TABLE_NAME"] => string(6) "albums"
            ["COLUMN_NAME"] => string(5) "title"
            ["COLUMN_POSITION"] => int(3)
            ["DATA_TYPE"] => string(7) "varchar"
            ["DEFAULT"] => NULL
            ["NULLABLE"] => bool(false)
            ["LENGTH"] => string(3) "100"
            ["SCALE"] => NULL
            ["PRECISION"] => NULL
            ["UNSIGNED"] => NULL
            ["PRIMARY"] => bool(false)
            ["PRIMARY_POSITION"] => NULL
            ["IDENTITY"] => bool(false)
          }
        }
        ["_metadataCache:protected"] => NULL
        ["_metadataCacheInClass:protected"] => bool(true)
        ["_rowClass:protected"] => string(17) "Zend_Db_Table_Row"
        ["_rowsetClass:protected"] => string(20) "Zend_Db_Table_Rowset"
        ["_referenceMap:protected"] => array(0) {
        }
        ["_dependentTables:protected"] => array(0) {
        }
        ["_defaultSource:protected"] => string(11) "defaultNone"
        ["_defaultValues:protected"] => array(0) {
        }
      }
      ["_connected:protected"] => bool(true)
      ["_readOnly:protected"] => bool(false)
      ["_tableClass:protected"] => string(6) "Albums"
      ["_primary:protected"] => array(1) {
        [1] => string(2) "id"
      }
    }
    J'avoue que cette sortie me paraît très abstraite...

  6. #6
    Membre éclairé Avatar de Jiraiya42
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    671
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 671
    Par défaut
    Personne pour m'éclairer où me dire où je peux trouver une signification au résultat donné ci-dessus svp ?

  7. #7
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    essaye les deux codes suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function afficher()
        {
            $select = $this->select()
                           ->from('albums', array('id', 'artist', 'title'));
    	$result = $this ->fetchAll($select);
            return $result;
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function afficher()
        {
            $select = "SELECT id, artist, title FROM album";
     
    	$result = $this ->fetchAll($select);
            return $result;
        }

    Au fait c'est comme la poste, laisse nous un peu de temps pour te répondre!

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 671
    Par défaut
    Oui excuse pour mon impatience, je rame tellement sur ce petit bout de code que j'en deviens impatient !

    Ton premier code marche nikel ! T'es un dieu En gros c'est fetchAll() qui va "remplir" $result avec les résultats de la requête sous forme de tableau c'est ça ? Sans le fetchAll() les lignes du tableau ne peuvent pas être attribuées à $result, j'ai bon ?

    En tout cas merci pour ton aide et encore désolé si je peut paraître impatient des fois !

  9. #9
    Membre éclairé Avatar de Jiraiya42
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    671
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 671
    Par défaut
    Je rajoute une petite question : Je ne trouve pas la syntaxe exacte pour alimenter une liste déroulante via une bdd MySQL :

    Je récupère mes données :

    Artistes.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
     
    class Artistes extends Zend_Db_Table
    {
        protected $_name = 'artistes';
     
        function afficher()
        {
            $select = $this->select()
    		       ->setIntegrityCheck(false)
                           ->from('artistes', array('artiste_id', 'artiste_nom'));
    	$result = $this ->fetchAll($select);
            return $result;
        }
    }
    Pour faire le lien avec le formulaire :

    IndexController.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $artist = new Artistes();
    $result = $artist->afficher();
    ..........
    ????
    Le formulaire :

    FormulaireAlbum.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $artist = new Zend_Form_Element_Select('artist');
    $artist->setLabel('Artist')
             ->setRequired(true)
             ->addValidator('NotEmpty');
    D'après mes recherches, tout se joue avec un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $artist->addMultiOption($option, $value)
    Pour ajouter des "option" mais la syntaxe m'échappe et je ne trouve pas d'exemple précis sur le net portant sur une liaison avec MySQL.

    Quelqu'un peut m'aiguiller svp ?

  10. #10
    Membre éclairé Avatar de Jiraiya42
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    671
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 671
    Par défaut
    Bon j'ai trouvé je me réponds à moi même

    Ma classe qui récupère les informations des artistes dans ma bdd

    Artistes.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
     
    class Artistes extends Zend_Db_Table
    {
        protected $_name = 'artistes';
     
        function afficher()
        {
            $select = $this->select()
    		       ->setIntegrityCheck(false)
                           ->from('artistes', array('artiste_id', 'artiste_nom'));
    	$result = $this ->fetchAll($select); 
            return $result;
        }
    }
    La partie du formulaire à créer :

    FormulaireAlbum.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
     
    ...
    // On déclare notre combobox
    $artist = new Zend_Form_Element_Select('artist');
    // On crée le label à afficher
    $artist->setLabel('Artiste')
    	 ->setRequired(true); // choix obligatoire
    // On récupère le résultat de la classe dans un tableau
    $table = new Artistes();
    // Pour chaque ligne...
    foreach ($table->fetchAll() as $c) {
        //...on attribue une option à la combobox avec en valeur l'id et libellé le nom
        $artist->addMultiOption($c->artiste_id, $c->artiste_nom);
    }
    ...
    Et voilà quelques jours de galère bloqué sur un si petit truc ! Si ça peut l'éviter à quelqu'un !

Discussions similaires

  1. Résultat requête SQL dans tableau
    Par hauser11 dans le forum C#
    Réponses: 0
    Dernier message: 16/05/2013, 16h25
  2. affecter une requête SQL à un tableau
    Par gastoncs dans le forum VB.NET
    Réponses: 2
    Dernier message: 22/07/2012, 10h18
  3. Affichage requête SQL dans tableau
    Par lolymeupy dans le forum Langage
    Réponses: 4
    Dernier message: 29/08/2011, 10h40
  4. Requête SQL et tableau
    Par juju1988 dans le forum Débuter
    Réponses: 4
    Dernier message: 06/04/2010, 08h29
  5. Requête SQL et tableau à double entrée
    Par Invité dans le forum Langage SQL
    Réponses: 4
    Dernier message: 06/06/2007, 20h51

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