Problème résultat dans ma boucle

Ce topic a été résolu
laurent09

laurent09 Le 21 mars 2018 à 20:29 (Édité le 25 janvier 2019 à 17:54)

Bonjour

voila j'ai un fichier acceuil.php ou il y a une function PageMain avec mes code pour une page en html "acceuil.html"
Dans ma page php j'ai une boucle qui doit récupérer toute les <option> dans ma bdd et les stokers dans une variable afin que je puisse les envoyer sur ma page html dans mon <select>

Voici mon code php dans acceuil.php
              $query = $bdd->prepare("SELECT category_name FROM category ORDER BY category_name ASC");
              $query->execute();
              ($row = $query->fetch())
                           {
                            $envoie=  '<option value="'.$row["category_id"].'">'.$row["category_name"].'</option>';
                          
                           };
                      $TMPL['envoie'] = $envoie; // envoie la boucle php
            
  et voici ma boucle <option> dans ma page html acceuil.html
         <table id="product_data" class="table table-bordered table-striped">
                    <thead>
                     <tr>
                      <th></th>
                      <th>Nom produit</th>
                         <th>
                             <select name="category" id="category" class="form-control">
                              <option value="">recherche Catégorie</option>
                                    {$envoie} <!-- reçoit la boucle php  -->
                             </select>
                         </th>
                      <th>prix produit</th>
                     </tr>
                    </thead>
         </table>
voila donc j'envoie et reçoit bien les options de ma boucle, mais le problème c'est que j'ai que 1 résultat et c'est le dernier dans ma bdd qui s'affiche dans mon menu déroulant.

si une personne pourrait me dire pourquoi ça ne fonctionne pas et ou j'ai fait mon erreur .

merci
TBMaster59

TBMaster59 Le 22 mars 2018 à 17:25

Bonjour,

essaye de remplacer ton "ASC" par "DESC" ça devrai régler ton problème je pense

Cordialement TBMaster59.
laurent09

laurent09 Le 22 mars 2018 à 18:05

Non ça ne change rien au lieu d'avoir le dernier produit de la colonne j'ai le premier.
Clouder

Clouder Le 22 mars 2018 à 20:05 (Édité le 22 mars 2018 à 20:06)

Salut @laurent09 

Tu veux afficher plusieurs informations de ta BDD mais tu utilises fetch() qui n'affiche qu'un et un seul enregistrement.

Je te conseil d'utiliser FetchAll() pour avoir toutes tes informations de ta requête SQL avec un foreach() pour faire ressortir tes informations.

Exemple
$query = $bdd->prepare("SELECT category_name FROM category ORDER BY category_name ASC");
$query->execute();              
$row = $query->fetchAll();
foreach($row as $r){
   $envoie[] = '<option value="'.$r["category_id"].'">'.$r["category_name"].'</option>';                          
}
table id="product_data" class="table table-bordered table-striped">                    
   <thead>                     
      <tr>                      
         <th></th>                      
         <th>Nom produit</th>                         
         <th>
            <select name="category" id="category" class="form-control">                             
               <option value="">recherche Catégorie</option>                                    
               <?php
                  // reçoit la boucle php 
                  foreach($envoie as $e){
                     echo $e;
                  }
               ?>         
            </select>                         
         </th>                      
         <th>prix produit</th>                     
      </tr>                    
   </thead>
</table>
laurent09

laurent09 Le 22 mars 2018 à 22:06

le probleme c'est que dans ma page html je ne peut pas utilisé de php ca ne fonctionne pas seulement  des 
{$variable}
que j'envoie a ma page html.

ce n'est pas moi qui est crée le code mais en faite la page acceuil.php et accuil.html sont lié il y a des functions dans ma page php qui les envoie a ma page html.
ma page accuil.php complete
<?php
function PageMain() {
  global $TMPL, $LNG, $CONF, $db, $loggedIn, $settings, $plugins;
  
  require_once('./includes/bdd.inc.php');
        $query = $bdd->prepare("SELECT * FROM category ORDER BY category_name ASC");
        $query->execute();
        while($row = $query->fetch())
        {
          $envoie = '<option value="'.$row["category_id"].'">'.$row["category_name"].'</option>';
        }
        
        $TMPL['envoie'] = $envoie;
  $skin = new skin('welcome/acceuil');
  return $skin->make();
}
?>
ma page acceuil.html complete
{$plugins}
<!DOCTYPE html>
<html>
 <head>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />
  <script src="https://cdn.datatables.net/1.10.12/js/jquery.dataTables.min.js"></script>
  <script src="https://cdn.datatables.net/1.10.12/js/dataTables.bootstrap.min.js"></script>  
  <link rel="stylesheet" href="https://cdn.datatables.net/1.10.12/css/dataTables.bootstrap.min.css" />
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
  
 </head>
 <body>
    <div class="row-welcome{$content_class}">
      <div class="row-body">
         <div class="welcome-inner">
             <div class="container">
                   <h1 align="center">test</h1>
                     <br />
               
                  <div class="table-responsive">
                      <table id="product_data" class="table table-bordered table-striped">
                          <thead>
                              <tr>
                                   <th>id</th>
                                   <th>nom produit</th>
                                  <th>
                                      <select name="category" id="category" class="form-control">
                                        <option value="">Category Search</option>
                                        {$envoie} <!-- reçoit la boucle php  -->
                                      </select>
                                  </th>
                                  <th>prix produit</th>
                              </tr>
                          </thead>
                      </table>
                  </div>
             </div>
         </div>
      </div>
   </div>
 </body>
{$ad}
<script type="text/javascript" language="javascript" >
$(document).ready(function(){
 
 load_data();
 function load_data(is_category)
 {
  var dataTable = $('#product_data').DataTable({
   "processing":true,
   "serverSide":true,
   "order":[],
   "ajax":{
    url:"fetch.php",
    type:"POST",
    data:{is_category:is_category}
   },
   "columnDefs":[
    {
     "targets":[2],
     "orderable":false,
    },
   ],
  });
 }
 $(document).on('change', '#category', function(){
  var category = $(this).val();
  $('#product_data').DataTable().destroy();
  if(category != '')
  {
   load_data(category);
  }
  else
  {
   load_data();
  }
 });
});
</script>
</html>


je ne sais pas comment faire.
Clouder

Clouder Le 23 mars 2018 à 11:58

@laurent09, tu aurais le nom du framework que tu utilises pour afficher tes informations PHP dans ta page HTML ? 

Les :
{$plugins}
{$envoie}
etc.

Comme ça j'irais plus vite pour te donner une bonne réponse. Car j'avais déjà utilisé cette syntaxe la mais j'ai oublié le nom x)
laurent09

laurent09 Le 23 mars 2018 à 20:38 (Édité le 23 mars 2018 à 20:39)

 @Clouder il n'y a pas de framework, celui qui a concu le code utilise que des function dans la page php, et a la racine du site j'ai un fichier config.php avec une variable $action qui lie la page acceuil.php a la page acceuil.html.
je ne suis pas sur le bon ordinateur la pour te le sortire exactement.

désoleé je ne suis pas un expert.

c'est moi qui ai rajouter ce qu'il y a dans le head de ma page html, pour tester mon tableau que je voudrais faire fonctioner.
laurent09

laurent09 Le 23 mars 2018 à 21:04

je pense que je peut y arrivé avec cette méthode non ?
https://openclassrooms.com/forum/sujet/afficher-resultat-php-mysql-en-javascript

je regarderai quand je serais sur le bon ordinateur
laurent09

laurent09 Le 24 mars 2018 à 18:45

bonjour

j'y suis arrivé avec ca.
$envoie = "";
while($row = $query->fetch()){
    $envoie .= '<option value="'.$row["category_id"].'">'.$row["category_name"].'</option>';
}

merci encore a tous
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte