[RESOLU]Stocker le résultat d'une requête dans un tableau

Stocker le résultat d'une requête dans un tableau [RESOLU] - PHP - Programmation

Marsh Posté le 11-08-2010 à 19:07:46    

Bonjour  :)  
 
J'ai une fonction qui me permet de sélectionner les champs de ma table is_materiel dans ma bdd.

Code :
  1. <?php
  2.     public function listMat()
  3.         {
  4.         $req = $this->db->query("
  5.                                 SELECT id_mat, num_mat,nom_marque,nom_type,num_salle,date_ajout_mat
  6.                                 FROM is_materiel,is_salle,is_type,is_marque
  7.                                 WHERE is_marque.id_marque = is_materiel.id_marque
  8.                                 AND is_salle.id_salle = is_materiel.id_salle
  9.                                 AND is_type.id_type = is_materiel.id_type";);
  10.         while($liste = $req->fetch(PDO::FETCH_OBJ))
  11.             {
  12.             echo $liste->id_mat.'<br/>';
  13.             echo $liste->num_mat.'<br/>';
  14.             echo $liste->nom_marque.'<br/>';
  15.             echo $liste->nom_type.'<br/>';
  16.             echo $liste->num_salle.'<br/>';
  17.             echo $liste->date_ajout_mat.'<br/>';
  18.             }
  19.         }
  20. ?>


Par contre je n'aime pas trop le fait de mettre tous mes echo dans mon while. J'aimerais que ça se fasse dans ma vue. Et là je sais pas pourquoi je bloque. L'idée serait de faire un tableau pour y mettre les infos et de faire un return de ce tableau à la fin de la fonction. J'ai vraiment l'impression que je cherche à me compliquer la vie et que la solution est toute simple mais je vois pas  :??:  
 
Comme ça par exemple

Code :
  1. <?php
  2.     public function listMat()
  3.         {
  4.         $req = $this->db->query("
  5.                                 SELECT id_mat, num_mat,nom_marque,nom_type,num_salle,date_ajout_mat
  6.                                 FROM is_materiel,is_salle,is_type,is_marque
  7.                                 WHERE is_marque.id_marque = is_materiel.id_marque
  8.                                 AND is_salle.id_salle = is_materiel.id_salle
  9.                                 AND is_type.id_type = is_materiel.id_type";);
  10.         $tab = array();
  11.         while($liste = $req->fetch(PDO::FETCH_OBJ))
  12.             {
  13.             $tab[] = $liste;
  14.             }
  15.         return $tab;
  16.         }
  17. ?>


Dans ma vue j'ai ça:

Code :
  1. <?php
  2. print_r($matManager->listMat());
  3. ?>


Et ça me renvoie ça:

Code :
  1. Array(    [0] => stdClass Object        (            [id_mat] => 1            [num_mat] => pc01            [nom_marque] => Dell            [nom_type] => Ordinateur            [num_salle] => 101            [date_ajout_mat] => 0000-00-00 00:00:00        )    [1] => stdClass Object        (            [id_mat] => 2            [num_mat] => Imp01            [nom_marque] => Dell            [nom_type] => Imprimante            [num_salle] => 101            [date_ajout_mat] => 0000-00-00 00:00:00        )    [2] => stdClass Object        (            [id_mat] => 3            [num_mat] => 15            [nom_marque] => Dell            [nom_type] => Ordinateur            [num_salle] => 101            [date_ajout_mat] => 0000-00-00 00:00:00        )    [3] => stdClass Object        (            [id_mat] => 4            [num_mat] => wxcwxc            [nom_marque] => Toshiba            [nom_type] => Ordinateur            [num_salle] => 101            [date_ajout_mat] => 0000-00-00 00:00:00        ))


Bref je m'y perds un peu là  :pt1cable:  
 
Merci pour votre aide  :)


Message édité par Profil supprimé le 12-08-2010 à 11:38:40
Reply

Marsh Posté le 11-08-2010 à 19:07:46   

Reply

Marsh Posté le 11-08-2010 à 19:17:25    

fetchAll
http://php.net/manual/fr/pdostatement.fetchall.php


Message édité par stealth35 le 11-08-2010 à 19:17:42
Reply

Marsh Posté le 11-08-2010 à 20:31:23    

Je connaissais pas merci  :jap:  
 
Par contre, je fais comment dans ma vue si je veux afficher uniquement le champ "num_mat" ?

Reply

Marsh Posté le 11-08-2010 à 21:46:47    

tu fais un foreach sur ton tableau et tu prend que num_mat

Reply

Marsh Posté le 11-08-2010 à 22:32:40    

C'est ce que je comptais faire justement mais je vois pas trop comment accéder à num_mat en particulier  :(  
 
J'ai pondu ça voir un peu ce que ça donne parce que là j'suis complètement perdu  :(  :(

Code :
  1. <?php
  2.         $test = $matManager->listMat();
  3. foreach($test as $c => $v)
  4.   {
  5.   echo $c;
  6.   }
  7. ?>


Message édité par Profil supprimé le 11-08-2010 à 22:34:38
Reply

Marsh Posté le 11-08-2010 à 22:44:48    

fais un var_dump($v);

Reply

Marsh Posté le 11-08-2010 à 22:46:24    

ça me donne ça  

Code :
  1. array(4) {  [0]=>  object(stdClass)#8 (6) {    ["id_mat"]=>    string(1) "1"    ["num_mat"]=>    string(4) "pc01"    ["nom_marque"]=>    string(4) "Dell"    ["nom_type"]=>    string(10) "Ordinateur"    ["num_salle"]=>    string(3) "101"    ["date_ajout_mat"]=>    string(19) "0000-00-00 00:00:00"  }  [1]=>  object(stdClass)#9 (6) {    ["id_mat"]=>    string(1) "2"    ["num_mat"]=>    string(5) "Imp01"    ["nom_marque"]=>    string(4) "Dell"    ["nom_type"]=>    string(10) "Imprimante"    ["num_salle"]=>    string(3) "101"    ["date_ajout_mat"]=>    string(19) "0000-00-00 00:00:00"  }  [2]=>  object(stdClass)#10 (6) {    ["id_mat"]=>    string(1) "3"    ["num_mat"]=>    string(2) "15"    ["nom_marque"]=>    string(4) "Dell"    ["nom_type"]=>    string(10) "Ordinateur"    ["num_salle"]=>    string(3) "101"    ["date_ajout_mat"]=>    string(19) "0000-00-00 00:00:00"  }  [3]=>  object(stdClass)#11 (6) {    ["id_mat"]=>    string(1) "4"    ["num_mat"]=>    string(6) "wxcwxc"    ["nom_marque"]=>    string(7) "Toshiba"    ["nom_type"]=>    string(10) "Ordinateur"    ["num_salle"]=>    string(3) "101"    ["date_ajout_mat"]=>    string(19) "0000-00-00 00:00:00"  }}

Reply

Marsh Posté le 11-08-2010 à 22:47:33    

dans le foreach ca donne ca ?
(affiche ca dans les balises <pre> c'est illisible la)


Message édité par stealth35 le 11-08-2010 à 22:48:15
Reply

Marsh Posté le 11-08-2010 à 22:51:15    

Code :
  1. $test = $matManager->listMat();
  2.         foreach($test as $c => $v)
  3.             {
  4.             echo '<pre>';
  5.             var_dump($v);
  6.             echo '</pre>';
  7.             }


Code :
  1. array(4) {
  2.   [0]=>
  3.   object(stdClass)#8 (6) {
  4.     ["id_mat"]=>
  5.     string(1) "1"
  6.     ["num_mat"]=>
  7.     string(4) "pc01"
  8.     ["nom_marque"]=>
  9.     string(4) "Dell"
  10.     ["nom_type"]=>
  11.     string(10) "Ordinateur"
  12.     ["num_salle"]=>
  13.     string(3) "101"
  14.     ["date_ajout_mat"]=>
  15.     string(19) "0000-00-00 00:00:00"
  16.   }
  17.   [1]=>
  18.   object(stdClass)#9 (6) {
  19.     ["id_mat"]=>
  20.     string(1) "2"
  21.     ["num_mat"]=>
  22.     string(5) "Imp01"
  23.     ["nom_marque"]=>
  24.     string(4) "Dell"
  25.     ["nom_type"]=>
  26.     string(10) "Imprimante"
  27.     ["num_salle"]=>
  28.     string(3) "101"
  29.     ["date_ajout_mat"]=>
  30.     string(19) "0000-00-00 00:00:00"
  31.   }
  32.   [2]=>
  33.   object(stdClass)#10 (6) {
  34.     ["id_mat"]=>
  35.     string(1) "3"
  36.     ["num_mat"]=>
  37.     string(2) "15"
  38.     ["nom_marque"]=>
  39.     string(4) "Dell"
  40.     ["nom_type"]=>
  41.     string(10) "Ordinateur"
  42.     ["num_salle"]=>
  43.     string(3) "101"
  44.     ["date_ajout_mat"]=>
  45.     string(19) "0000-00-00 00:00:00"
  46.   }
  47.   [3]=>
  48.   object(stdClass)#11 (6) {
  49.     ["id_mat"]=>
  50.     string(1) "4"
  51.     ["num_mat"]=>
  52.     string(6) "wxcwxc"
  53.     ["nom_marque"]=>
  54.     string(7) "Toshiba"
  55.     ["nom_type"]=>
  56.     string(10) "Ordinateur"
  57.     ["num_salle"]=>
  58.     string(3) "101"
  59.     ["date_ajout_mat"]=>
  60.     string(19) "0000-00-00 00:00:00"
  61.   }
  62. }


Désoler je connaissais pas <pre></pre>  ;)

Reply

Marsh Posté le 11-08-2010 à 22:55:18    

fais un var_dump($test);  ca ma parais bizarre ton truc ;)

Reply

Marsh Posté le 11-08-2010 à 22:55:18   

Reply

Marsh Posté le 11-08-2010 à 23:03:12    

Code :
  1. $test = $matManager->listMat();
  2.         echo '<pre>';
  3.         var_dump($test);
  4.         echo '</pre>';


Code :
  1. array(1) {
  2.   [0]=>
  3.   array(4) {
  4.     [0]=>
  5.     object(stdClass)#8 (6) {
  6.       ["id_mat"]=>
  7.       string(1) "1"
  8.       ["num_mat"]=>
  9.       string(4) "pc01"
  10.       ["nom_marque"]=>
  11.       string(4) "Dell"
  12.       ["nom_type"]=>
  13.       string(10) "Ordinateur"
  14.       ["num_salle"]=>
  15.       string(3) "101"
  16.       ["date_ajout_mat"]=>
  17.       string(19) "0000-00-00 00:00:00"
  18.     }
  19.     [1]=>
  20.     object(stdClass)#9 (6) {
  21.       ["id_mat"]=>
  22.       string(1) "2"
  23.       ["num_mat"]=>
  24.       string(5) "Imp01"
  25.       ["nom_marque"]=>
  26.       string(4) "Dell"
  27.       ["nom_type"]=>
  28.       string(10) "Imprimante"
  29.       ["num_salle"]=>
  30.       string(3) "101"
  31.       ["date_ajout_mat"]=>
  32.       string(19) "0000-00-00 00:00:00"
  33.     }
  34.     [2]=>
  35.     object(stdClass)#10 (6) {
  36.       ["id_mat"]=>
  37.       string(1) "3"
  38.       ["num_mat"]=>
  39.       string(2) "15"
  40.       ["nom_marque"]=>
  41.       string(4) "Dell"
  42.       ["nom_type"]=>
  43.       string(10) "Ordinateur"
  44.       ["num_salle"]=>
  45.       string(3) "101"
  46.       ["date_ajout_mat"]=>
  47.       string(19) "0000-00-00 00:00:00"
  48.     }
  49.     [3]=>
  50.     object(stdClass)#11 (6) {
  51.       ["id_mat"]=>
  52.       string(1) "4"
  53.       ["num_mat"]=>
  54.       string(6) "wxcwxc"
  55.       ["nom_marque"]=>
  56.       string(7) "Toshiba"
  57.       ["nom_type"]=>
  58.       string(10) "Ordinateur"
  59.       ["num_salle"]=>
  60.       string(3) "101"
  61.       ["date_ajout_mat"]=>
  62.       string(19) "0000-00-00 00:00:00"
  63.     }
  64.   }
  65. }

Reply

Marsh Posté le 11-08-2010 à 23:35:45    

montre la fonction listMat que ta fais

Reply

Marsh Posté le 11-08-2010 à 23:42:24    

Code :
  1. <?php
  2.     public function listMat()
  3.         {
  4.         $req = $this->db->query("
  5.                                 SELECT id_mat, num_mat,nom_marque,nom_type,num_salle,date_ajout_mat
  6.                                 FROM is_materiel,is_salle,is_type,is_marque
  7.                                 WHERE is_marque.id_marque = is_materiel.id_marque
  8.                                 AND is_salle.id_salle = is_materiel.id_salle
  9.                                 AND is_type.id_type = is_materiel.id_type" );
  10.         $tab = array();
  11.         while($liste = $req->fetchall(PDO::FETCH_OBJ))
  12.             {
  13.             $tab[] = $liste;
  14.             }
  15.         return $tab;
  16.         }
  17. ?>

Reply

Marsh Posté le 12-08-2010 à 00:03:17    

sert a rien de faire un while ta recopié bêtement ;)

 
Code :
  1. $tab = req->fetchall(PDO::FETCH_OBJ);
 

et c'est tout


Message édité par stealth35 le 12-08-2010 à 00:03:25
Reply

Marsh Posté le 12-08-2010 à 00:09:05    

Bah en fait j'ai fais le while pour mettre chaque ligne dans le tableau en fait. En fait le fetchall permet de générer un tableau directement donc pas besoin de le construire avec ma boucle.
 
Bon ça va, au moins j'aurais appris quelque chose ce soir  :jap:


Message édité par Profil supprimé le 12-08-2010 à 00:29:24
Reply

Marsh Posté le 12-08-2010 à 00:23:54    

ca sera a rien pusique fetchAll de creer un tableau avec chaque ligne il te fais équivalent de ton while

Reply

Marsh Posté le 12-08-2010 à 00:53:27    

Code :
  1. $test = $matManager->listMat();
  2.         echo '<pre>';
  3.         print_r($test);
  4.         echo '</pre>';


Me donne  
 

Code :
  1. Array
  2. (
  3.     [0] => stdClass Object
  4.         (
  5.             [id_mat] => 1
  6.             [num_mat] => pc01
  7.             [nom_marque] => Dell
  8.             [nom_type] => Ordinateur
  9.             [num_salle] => 101
  10.             [date_ajout_mat] => 0000-00-00 00:00:00
  11.         )
  12.     [1] => stdClass Object
  13.         (
  14.             [id_mat] => 2
  15.             [num_mat] => Imp01
  16.             [nom_marque] => Dell
  17.             [nom_type] => Imprimante
  18.             [num_salle] => 101
  19.             [date_ajout_mat] => 0000-00-00 00:00:00
  20.         )
  21.     [2] => stdClass Object
  22.         (
  23.             [id_mat] => 3
  24.             [num_mat] => 15
  25.             [nom_marque] => Dell
  26.             [nom_type] => Ordinateur
  27.             [num_salle] => 101
  28.             [date_ajout_mat] => 0000-00-00 00:00:00
  29.         )
  30.     [3] => stdClass Object
  31.         (
  32.             [id_mat] => 4
  33.             [num_mat] => wxcwxc
  34.             [nom_marque] => Toshiba
  35.             [nom_type] => Ordinateur
  36.             [num_salle] => 101
  37.             [date_ajout_mat] => 0000-00-00 00:00:00
  38.         )
  39. )


Donc dans mon foreach

Code :
  1. foreach($test as $c => $v)
  2.             {
  3.             echo $c;
  4.             }


ça me donne la liste 0123 (des arrays donc)
 
Et si je fais un echo de $v

Code :
  1. Catchable fatal error:  Object of class stdClass could not be converted to string in E:wampwwwIsis-2.0vuesvAdminvMateriel.php on line 27


Je vais me renseigner sur ce stdClass, me semble que c'est une classe propore à php.
 
Donc ma question qui est toujours en suspend, comment je fais par exemple pour afficher uniquement le num_mat de chaque matériel ?  [:cupra]

Reply

Marsh Posté le 12-08-2010 à 01:06:42    

echo $v->num_mat
 
si t'es pas a l'aise avec l'object utilise les tableaux

Reply

Marsh Posté le 12-08-2010 à 01:11:51    

En fait je début en objet justement  :jap:  
 
En tout cas gros merci, j'ai pu apprendre pas mal de truc grâce à toi  :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed