Problème résultat dans ma boucle
- Accueil
- Forum
- Programmation
- PHP
- Problème résultat dans ma boucle
laurent09 Le 21 mars 2018 à 20:29 (Édité le 25 janvier 2019 à 17:54)
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 Le 22 mars 2018 à 17:25 (Édité le 1 janvier 1970 à 01:00)
essaye de remplacer ton "ASC" par "DESC" ça devrai régler ton problème je pense
Cordialement TBMaster59.
laurent09 Le 22 mars 2018 à 18:05 (Édité le 1 janvier 1970 à 01:00)
Clouder Le 22 mars 2018 à 20:05 (Édité le 22 mars 2018 à 20:06)
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 Le 22 mars 2018 à 22:06 (Édité le 1 janvier 1970 à 01:00)
{$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 Le 23 mars 2018 à 11:58 (Édité le 1 janvier 1970 à 01:00)
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 Le 23 mars 2018 à 20:38 (Édité le 23 mars 2018 à 20:39)
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 Le 23 mars 2018 à 21:04 (Édité le 1 janvier 1970 à 01:00)
https://openclassrooms.com/forum/sujet/afficher-resultat-php-mysql-en-javascript
je regarderai quand je serais sur le bon ordinateur
laurent09 Le 24 mars 2018 à 18:45 (Édité le 1 janvier 1970 à 01:00)
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