Menu

Panier en php

-
Bonjour,

j'ai créer un site e-commerce en php dur, j'ai créer une page produit.php avec tous mes produits visibles et un bouton ajouter au panier pour chaque produit; j ai aussi créer une page panier.php.
Cependant lorsque je clique sur "ajouter au panier", le navigateur me renvoi sur la page panier.php mais le panier reste vide.
Comment dois je faire svp??

mon code produit.php
<?php
try {
 // connexion a la bdd
 $bdd= new PDO('mysql:host=localhost;dbname=letsShop;','root','root');
} catch(exception $e){
 die('Erreur : '.$e->getMessage());
 // s'il y a des erreurs
}
// si il y a bien un id, bien ecris dans l url et qu'il n'ya pas de txt dans l'url c bon et on le force a etre un entier avec intval
// isset pour voir sil est ien defini
// superieur a 0 pour qu'on est bien une valeur obligatoirement positive et non negativ -1 -2

 if(isset($_GET['id']) AND intval($_GET['id']) >0){
   // on recupere get id
   //echo 'ok';
   $id=intval($_GET['id']);
   $req = $bdd->prepare('SELECT id_produit, titre_pdt, photo_pdt, designation_pdt, prix_pdt FROM produit WHERE id_produit=:id');
   $req->execute(array(
     "id"=> $id
   ));

   if ($req->rowCount()>0) {
     // tant quon recupere un id un titre une photo... on les met dans un tableau row
     // puis les valeurs on les mets dans des variables idpdt, titrepdt.....

     while($row=$req->fetch()) {
       $idpdt= $row['id_produit'];
       $titrepdt = $row['titre_pdt'];
       $photo = $row['photo_pdt'];
       $designation = $row['designation_pdt'];
       $prix = $row['prix_pdt'];
     }
   }else{
     echo 'erreur 404';
     //erreur  //echo 'erreur'; sinon on renvoie vers une page header location 404
   }

//boucle qui recupere toute les données de ma requete sql, de la bdd

 }else{
   //echo 'erreur'; sinon on renvoie vers une page header location 404
   echo 'erreur 404';
 }
 $titre=$titrepdt;
 include 'header.php';

// $req = $bdd->query('SELECT id_produit, titre_pdt, photo_pdt, designation_pdt, prix_pdt FROM produit WHERE id_produit=$id');?>
       <!-- on demande les articles de la table produits -->
 <?php // while($row=$req->fetch()) { ?>



<div class="container">
  <div class="row">
  <div class="col-md-4 mt-3 cat-fav">
    <img class="card-img" src="<?php echo $photo;?>" alt="tshirt">
  </div>
  <div class="col-md-4 mt-3 cat-fav">
  <h3><?php echo $titrepdt ?></h3>
  <h3><?php echo $prix ?> €</h3>
  <p><?php echo $designation ?></p>


    <li class="list-inline-item">
        <a href="panier.php" class="btn btn-info btn-rounded" id="panier">Ajouter au panier</a>
    </li>
  </div>
</div>

</div>
<?php include 'footer.php'; ?>


code panier.php
<?php
$titre='Panier';
include 'header.php';
$_SESSION['panier'] = array();
// Ça, c'est le contenant général de notre panier. On dois le subdiviser en compartiments avant d'y stocker quoique ce soit de manière organisée pour pouvoir trier son contenu et le manipuler. Là, on a 6 parties à créer pour les images, les produits, les quantités, les tailles et les prix.
$_SESSION['panier']['id_produit'] = array();
$_SESSION['panier']['img_produit'] = array();
$_SESSION['panier']['name_produit'] = array();
// $_SESSION['panier']['qte_produit'] = array();
// $_SESSION['panier']['taille_produit'] = array();
$_SESSION['panier']['prix_produit'] = array();
?>

<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">

<section class="jumbotron text-center">
    <div class="container">
        <h1 class="jumbotron-heading">Let's Shop</h1>
        <h1 class="jumbotron-heading">Panier</h1>
     </div>
</section>

<div class="container mb-4">
  <div class="row">
    <div class="col-12">
      <div class="table-responsive">
  <table class="table table-striped">
    <thead>
      <tr>
        <th scope="col"> IMAGE </th>
        <th scope="col"> PRODUIT </th>
        <!-- <th scope="col"> QUANTITE </th>
        <th scope="col"> TAILLE </th> -->
        <th scope="col" class="text-right"> PRIX </th>
        <th> </th>
      </tr>
    </thead>

    <?php  $req = $bdd->query('SELECT * FROM panier'); ?>
    <?php while($row=$req->fetch()){ ?>
      <tbody>
      <tr>
        <td><?= $row['img_produit']; ?> </td>
        <td><?= $row['name_produit']; ?></td>
        <!-- <td><?= $row['qte_produit']; ?></td>
        <td><?= $row['taille_produit']; ?></td> -->
        <td class="text-right"> <?= number_format($row['prix_produit'],2,',','');?> €</td> <!--pour que les prix s'affichent au centimes près -->
        <td class="text-right"><button class="btn btn-sm btn-danger"><i class="fa fa-trash"></i> </button> </td>
      </tr>
    </tbody>

    <?php } ?>
    <tr>
    <td></td>
    <td><strong>Total</strong></td>
    <td><strong>€</strong></td>
    </tr>
            </table>
      </div>
    </div>
  <div class="col mb-2">
    <div class="row">
      <div class="col-sm-12  col-md-6">
          <button class="btn btn-block btn-dark">Continue Shopping</button>
      </div>
        <div class="col-sm-12 col-md-6 text-right">
          <button class="btn btn-block  btn-dark text-uppercase">PAIEMENT</button>
        </div>
    </div>
  </div>
</div>
</div>

<?php
try {
 // connexion a la bdd
 $bdd= new PDO('mysql:host=localhost;dbname=letsShop;','root','root');
} catch(exception $e){
 die('Erreur : '.$e->getMessage());
 // s'il y a des erreurs
}
?>
<?php include 'footer.php'; ?>


EDIT : Ajout des balises de code

Merci beaucoup
Afficher la suite 

Votre réponse

5 réponses

Messages postés
24949
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 mars 2019
1895
0
Merci
Bonjour,

Tu as utiliser un lien qui redirige vers la page panier.php .... sans lui dire quel est l'ID du produit à ajouter...

Tu pourrais lui passer l'id en variable GET par exemple
<a href="panier.php?id=<?php echo $idpdt?>"


et donc dans ton code panier.. récupérer l' ID du produit à ajouter
$id = !empty($_GET['id']) ? $_GET['id']: NULL;

jordane45
Messages postés
24949
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 mars 2019
1895 -
Ah... et dans ton fichier panier.php... le code de connexion à la bdd est à la fin...... donc.. ben.. ça risque de planter...

Je t'invite vivement à lire (et à appliquer...) le contenu de ces deux liens :
http://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code

http://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs
Commenter la réponse de jordane45
0
Merci
Merci beaucoup!
mais ou est ce que je dois mettre cette ligne??
$id = !empty($_GET['id']) ? $_GET['id']: NULL;
jordane45
Messages postés
24949
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 mars 2019
1895 -
au début de ton fichier panier.php

Mais il faudra également que tu codes la partie ou tu fais l'insertion du produit dans la bdd..... pour l'instant tu ne l'as pas faite visiblement...
Commenter la réponse de Shirley
0
Merci
Justement, je ne sais pas trop comment m'y prendre pour cela...
jordane45
Messages postés
24949
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 mars 2019
1895 -
Tu sais déjà exécuter des requêtes SQL visiblement (vu que tu en as dans ton code)
Il te faut donc faire une requête INSERT pour ajouter à ton panier...
Commenter la réponse de Shirley
0
Merci
Malgré la requête INSERT, une fois que je clique sur ajouter au panier, je suis renvoyer sur la page panier vierge..
Voici la requête que j'ai fait
<?php 
if (isset($_POST['photo_pdt']) AND isset($_POST['titre_pdt']) AND isset($_POST['prix_pdt'])){ 
if($_POST['id_pdt'] == $_POST['id_pdt']){ 
$requete = $bdd->prepare('INSERT INTO panier(photo_pdt, titre_pdt, prix_pdt) VALUES (:photo_pdt, :titre_pdt, :prix_pdt)'); 
$requete->execute(array( 
'photo_pdt' => $_POST['photo_pdt'], 
'titre_pdt' => $_POST['titre_pdt'], 
'prix_pdt' => $_POST['prix_pdt'] 
)); 
}else { 
echo "Le panier est vide"; 
} 

}else { 
ERROR
} 

?>


EDIT : Ajout des balises de code (jordane)
jordane45
Messages postés
24949
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 mars 2019
1895 -
Commence par gérer correctement les erreurs PDO
http://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs

Ainsi que les erreurs PHP :
http://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code

Il faudrait également que tu nous repostes le code de ton formulaire d'ajout (en entier ! )

Et pour finir... lorsque tu postes du code sur le forum, tu dois utiliser les BALISES DE CODE.
explications disponibles ici: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Commenter la réponse de shirley
0
Merci
<?php
$titre='Panier';
include 'header.php';
?>
<?php $idpdt = !empty($_POST['idpdt']) ? $_POST['idpdt']: NULL;?>
<?php
try {
 // connexion a la bdd
 $bdd= new PDO('mysql:host=localhost;dbname=letsShop;','root','root');
} catch(exception $e){
 die('Erreur : '.$e->getMessage());
 // s'il y a des erreurs
}
?>
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">

<section class="jumbotron text-center">
    <div class="container">
        <h1 class="jumbotron-heading">Let's Shop</h1>
        <h1 class="jumbotron-heading">Panier</h1>
     </div>
</section>

<div class="container mb-4">
  <div class="row">
    <div class="col-12">
      <div class="table-responsive">
  <table class="table table-striped">
    <thead>
      <tr>
        <th scope="col"> IMAGE </th>
        <th scope="col"> PRODUIT </th>
        <!-- <th scope="col"> QUANTITE </th>
        <th scope="col"> TAILLE </th> -->
        <th scope="col" class="text-right"> PRIX </th>
        <th> </th>
      </tr>
    </thead>
    <?php
    if (isset($_POST['photo_pdt']) AND isset($_POST['titre_pdt']) AND isset($_POST['prix_pdt'])){
      if($_POST['id_pdt'] == $_POST['id_pdt']){
        $requete = $bdd->prepare('INSERT INTO panier(photo_pdt, titre_pdt, prix_pdt) VALUES (:photo_pdt, :titre_pdt, :prix_pdt)');
        $requete->execute(array(
          'photo_pdt'     => $_POST['photo_pdt'],
          'titre_pdt'  => $_POST['titre_pdt'],
          'prix_pdt'    => $_POST['prix_pdt']
        ));
      }else {
        echo "Le panier est vide";
      }

    }else {
        // Les info n'ont pas été envoyés par le form
    }

    ?>
      <tbody>
      <tr>
        <td><img class="col-2" src="<?= $_POST['photo_pdt'];?>"></td>
        <td><?= $_POST['titre_pdt']; ?></td>
        <td class="text-right"> <?= number_format($_POST['prix_pdt'],2,',','');?> €</td> <!--pour que les prix s'affichent au centimes près -->
        <td class="text-right"><button class="btn btn-sm btn-danger"><i class="fa fa-trash"></i> </button> </td>
      </tr>
    </tbody>

    <tr>
    <td></td>
    <td><strong>Total</strong></td>
    <td><strong>€</strong></td>
    </tr>
  </table>
      </div>
    </div>
  <div class="col mb-2">
    <div class="row">
      <div class="col-sm-12  col-md-6">
          <button class="btn btn-block btn-dark">Continue Shopping</button>
      </div>
        <div class="col-sm-12 col-md-6 text-right">
          <button class="btn btn-block  btn-dark text-uppercase">PAIEMENT</button>
        </div>
    </div>
  </div>
</div>
</div>


<?php include 'footer.php'; ?>

jordane45
Messages postés
24949
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 mars 2019
1895 -
Oui et ??
Tu n'as visiblement pas lu ni appliqué le contenu des différents liens que je t'ai donné.....
Commenter la réponse de shirley