Bonjour,
Voila je rencontre un petit problème avec mon code.
Je n'arrive pas à récupérer les produits de ma base de données.
<?php require 'header.php';?>
<div class="container">
<div class="row">
<div class="col-lg-12">
<h2>Votre panier</h2>
<table class="panierTab">
<thead>
<tr>
<th>Produit</th>
<th>Libéllé du produit</th>
<th>Description</th>
<th>Prix HT</th>
<th>quantité</th>
<th>Prix TTC</th>
<th>Sous-total</th>
<th>Action</th>
</tr>
</thead>
<?php
$ids = array_keys($_SESSION['panier']);
$products = $DB->query('SELECT * FROM products WHERE id IN ('.implode(',',$ids).')');
foreach ($products as $product) :
?>
<tbody>
<tr>
<td><img src="img/min/1.jpg"></td>
<td><?php echo $product->name; ?></td>
<td><?php echo $product->description; ?></td>
<td><?php echo number_format($product->price,2,',',' '); ?> €</td>
<td>1</td>
<td><?php echo number_format($product->price * 1.196,2,',',' '); ?> €</td>
<td>37</td>
<td><a href="#"><img src="img/poubelle.png"></a></td>
</tr>
</tbody>
<?php endforeach; ?>
</table>
<div class="rowTotal">
Total de votre commande : <span class="total">2654,25 €</span>
</div>
</div>
</div>
</div>
<?php require 'footer.php';?>Entourez votre code pour bien le mettre en forme
J'ai fais un var_dump $_SESSION ça me donne : array(1) { ["panier"]=> array(0) { } }
var_dump de $products il me retourne array(0) { }
un var_dump de $ids il retourne array(0) { }.
comprends pas ??
merci
c'est bon j'ai trouvé le problème, j'avais laissé des espaces après le ?> dans le fichier db.class.php !!!!
oufffff !!!
un grand merci à vous les gars !!!!!!!
Salut,
il semblerait que lorsque tu ajoute un article à ton panier, la session ne s'initialise pas.
Peux-tu nous afficher le code de ton ajout d'article ?
ma page d'accueil ou il y a les articles :
<?php require 'header.php'; ?>
<div class="container">
<div class="row">
<?php $products = $DB->query('SELECT * FROM products'); ?>
<?PHP foreach ($products as $product): ?>
<div class="col-sm-4 col-lg-4 col-md-4">
<div class="thumbnail">
<img src="img/produits/<?php echo $product->id;?>.jpeg" alt="">
<div class="caption">
<h4 class="pull-right"><?php echo number_format($product->price,2,',',' '); ?> €</h4>
<h4><a href="#"><?php echo $product->name; ?></a>
</h4>
<p><?php echo $product->description; ?></p>
</div>
<div class="details">
<a class="btn btn-primary" href="details.php?id=<?php echo $product->id;?>">Détails</a>
</div>
<div class="ratings">
<p class="pull-right">15 reviews</p>
<p>
<span class="glyphicon glyphicon-star"></span>
<span class="glyphicon glyphicon-star"></span>
<span class="glyphicon glyphicon-star"></span>
<span class="glyphicon glyphicon-star"></span>
<span class="glyphicon glyphicon-star"></span>
</p>
</div>
<div class="box-footer">
<a href="addpanier.php?id=<?php echo $product->id;?>" class="add"><img src="img/market.png"></a>
</div>
</div>
</div>
<?php endforeach; ?>
</div>
</div>
<?php require 'footer.php'; ?>
voilà
et la page addpanier.php :
<?php
require '_header.php';
if (isset($_GET['id'])) {
$product = $DB->query('SELECT id FROM products WHERE id = :id', array('id' => $_GET['id']));
if(empty($product)){
die("Ce produit n'existe pas");
}
$panier->add($product[0]->id);
die('Le produit a bien été ajouté à votre panier, <a href="javascript:history.back()">retourner sur le catalogue</a>');
}else{
die("Vous n'avez pas séléctionné de produit à ajouter au panier !");
}
?>
merci
Ton call à la méthode
$panier->add($product[0]->id);
panier est une instance d'une class, envoie moi la méthode correspondante; Si il y a aucun $_SESSION['panier'], il te la manque
mon fichier panier.class.php :
<?php
class panier{
public function __construct(){
if (!isset($_SESSION)){
session_start();
}
if (!isset($_SESSION['panier'])) {
$_SESSION['panier'] = array();
}
}
public function add($product_id){
$_SESSION['panier'][$product_id] = 1;
}
}
?>
Peut tu rajouter un var_dump($_SESSION['panier']) aprés ton $panier->add($product[0]->id);
et essayer de rajouter un article (voir si ta méthode fonctionne correctement)
donc apprioris ta méthode est ok vu qu'il renvoie (je suppose l'article n°1)
Retourne sur la page qui "bug" est rajoute en dessous de ton require
if (session_status() == PHP_SESSION_NONE) {
die("La session est pas set");
} else {
die(print_r($_SESSION['panier']);
}
et dis moi le retour
Pour moi c'est juste un probléme de session entre t'es différentes pages, essaie de faire ce que je t'ai mis plus haut. Par contre j'ai vu tu as un require ('_header.php'); et require ('header.php'); normal ?
EDIT: ton code change de couleur sur l'ide tu veux dire ? j'ai oublié une parenthèse ")" dans le deuxieme die ^^"
Donc à la place du die('session est pas set'); met un session_start(); et dis moi le retour
comme ça :
if (session_status() == PHP_SESSION_NONE) {
session_start();
} else {
die(print_r($_SESSION['panier']);
}
ça donne rien
if (session_status() == PHP_SESSION_NONE) {
session_start();
} else {
die(print_r($_SESSION['panier']));
}
essaie d'ajouter un produit de nouveau et recommence
hum étrange, c'est comme si il essayé de start la session à chaque fois.
if (session_status() == PHP_SESSION_NONE) {
session_start();
die(print_r($_SESSION));
} else {
die(print_r($_SESSION['panier']));
}
Hum, en effet c'est un soucis de session. elle ne se propage pas entre les pages, creer une page à la racine en l'appelant n'importe comment et ajoute ça:
session_start();
print_r($_SESSION['panier']);
si elle te réponds rien c'est qu'elle se détruit quelque part
A mon avis lorsque tu ajoute ton article, elle sauvegarde en session, mais lorsque tu change de page, cette session ne se propage pas, ce qui veut dire qu'elle doit forcément être supprimé quelque part, dans ton header peut être ?
j'ai contrôlé pas de problème ce que côté.
J'ai fais un <?php var_dump($_SESSION); ?> dans la page panier et ça me donne ça : array(1) { ["panier"]=> array(0) { } }
il me récupère bien le panier mais le tableau est vide ??
Bonsoir,
Tu travailles en local ? En ligne ?
Type de serveur ?
Le code est crée 100% par toi ou c'est d'un script pris ailleurs que tu complètes ?
salut
je travail en local
sur MAMP Apache
Je tente de refaire le tuto du panier de grafikart simplement en essayant de comprendre.
dès que je suis arrivé au choix des articles et les ajouter au panier avec l'utilisation des sessions ça plante
je te mets les dernières erreurs log php :
[07-Jun-2017 23:00:09 Europe/Berlin] PHP Warning: PDOStatement::execute(): SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1 in /Applications/MAMP/htdocs/panier/db.class.php on line 31
[07-Jun-2017 23:00:09 Europe/Berlin] PHP Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /Applications/MAMP/htdocs/panier/db.class.php:42) in /Applications/MAMP/htdocs/panier/panier.class.php on line 6
[07-Jun-2017 23:05:03 Europe/Berlin] PHP Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /Applications/MAMP/htdocs/panier/db.class.php:42) in /Applications/MAMP/htdocs/panier/panier.class.php on line 6
[07-Jun-2017 23:05:03 Europe/Berlin] PHP Warning: PDOStatement::execute(): SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1 in /Applications/MAMP/htdocs/panier/db.class.php on line 31
[07-Jun-2017 23:05:11 Europe/Berlin] PHP Warning: PDOStatement::execute(): SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1 in /Applications/MAMP/htdocs/panier/db.class.php on line 31
[07-Jun-2017 23:05:16 Europe/Berlin] PHP Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /Applications/MAMP/htdocs/panier/db.class.php:42) in /Applications/MAMP/htdocs/panier/panier.class.php on line 6
[07-Jun-2017 23:05:24 Europe/Berlin] PHP Warning: PDOStatement::execute(): SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1 in /Applications/MAMP/htdocs/panier/db.class.php on line 31
le dernier en ajoutant au panier :
[07-Jun-2017 23:23:33 Europe/Berlin] PHP Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /Applications/MAMP/htdocs/panier/db.class.php:42) in /Applications/MAMP/htdocs/panier/panier.class.php on line 6