Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2490 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°2016163
Profil sup​primé
Posté le 11-08-2010 à 19:07:46  answer
 

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
mood
Publicité
Posté le 11-08-2010 à 19:07:46  profilanswer
 

n°2016165
stealth35
Posté le 11-08-2010 à 19:17:25  profilanswer
 

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


Message édité par stealth35 le 11-08-2010 à 19:17:42
n°2016173
Profil sup​primé
Posté le 11-08-2010 à 20:31:23  answer
 

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

n°2016187
stealth35
Posté le 11-08-2010 à 21:46:47  profilanswer
 

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

n°2016201
Profil sup​primé
Posté le 11-08-2010 à 22:32:40  answer
 

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
n°2016203
stealth35
Posté le 11-08-2010 à 22:44:48  profilanswer
 

fais un var_dump($v);

n°2016204
Profil sup​primé
Posté le 11-08-2010 à 22:46:24  answer
 

ç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"  }}

n°2016205
stealth35
Posté le 11-08-2010 à 22:47:33  profilanswer
 

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
n°2016206
Profil sup​primé
Posté le 11-08-2010 à 22:51:15  answer
 

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>  ;)

n°2016208
stealth35
Posté le 11-08-2010 à 22:55:18  profilanswer
 

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

mood
Publicité
Posté le 11-08-2010 à 22:55:18  profilanswer
 

n°2016210
Profil sup​primé
Posté le 11-08-2010 à 23:03:12  answer
 

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. }

n°2016214
stealth35
Posté le 11-08-2010 à 23:35:45  profilanswer
 

montre la fonction listMat que ta fais

n°2016217
Profil sup​primé
Posté le 11-08-2010 à 23:42:24  answer
 

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. ?>

n°2016221
stealth35
Posté le 12-08-2010 à 00:03:17  profilanswer
 

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
n°2016226
Profil sup​primé
Posté le 12-08-2010 à 00:09:05  answer
 

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
n°2016228
stealth35
Posté le 12-08-2010 à 00:23:54  profilanswer
 

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

n°2016231
Profil sup​primé
Posté le 12-08-2010 à 00:53:27  answer
 

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]

n°2016233
stealth35
Posté le 12-08-2010 à 01:06:42  profilanswer
 

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

n°2016234
Profil sup​primé
Posté le 12-08-2010 à 01:11:51  answer
 

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:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
Problème de requête sql[RESOLU] Remplacement d'une chaine de caractères dans un fichier html
Macro pour copier un tableau de tableau variable vers Word[Résolu] Ordre d'exécution dans un .bat
[Résolu] Fonction supp petit mot et supp caractères spéciauxPetit problème de bat [Résolu]
[Résolu] Nom d'une variable dépend d'une autre Allocation dynamique d'un tableau f90
Tableau : Tri à Bulles 
Plus de sujets relatifs à : [RESOLU]Stocker le résultat d'une requête dans un tableau


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR