Panier en php

Fermé
SHIRLEY - Modifié le 27 févr. 2019 à 17:42
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 - 5 mars 2019 à 19:19
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

5 réponses

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
27 févr. 2019 à 17:45
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;

0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
27 févr. 2019 à 19:33
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 :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code

https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
0
Merci beaucoup!
mais ou est ce que je dois mettre cette ligne??
$id = !empty($_GET['id']) ? $_GET['id']: NULL;
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
28 févr. 2019 à 14:33
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...
0
Justement, je ne sais pas trop comment m'y prendre pour cela...
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
28 févr. 2019 à 16:09
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...
0
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)
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
5 mars 2019 à 16:22
Commence par gérer correctement les erreurs PDO
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

Ainsi que les erreurs PHP :
https://forums.commentcamarche.net/forum/affich-37584947-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-poster-un-extrait-de-code
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
<?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'; ?>

0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
5 mars 2019 à 19:19
Oui et ??
Tu n'as visiblement pas lu ni appliqué le contenu des différents liens que je t'ai donné.....
0