Recuperation de plusieurs id
Résolu
Busima
Messages postés
53
Date d'inscription
Statut
Membre
Dernière intervention
-
Busima Messages postés 53 Date d'inscription Statut Membre Dernière intervention -
Busima Messages postés 53 Date d'inscription Statut Membre Dernière intervention -
Salut, besoin d'aide.
Je suis entrain de faire une migration de la procédure de réservation simple de produit vers un panier virtuel.
Dans le projet, les clients avaient l'habitude de réserver un et seul produit par commande. Désormais, je veux maintenant donner la possibilité aux clients de mon site de pouvoir réserver plusieurs produits à la fois pour une même commande.
C'est pour cela que j'ai cherché le tuto du panier. Je suis maintenant au stade de la réservation des produits ajoutés au panier. Malheureusement je ne vois pas d'abord comment enregistrer dans ma base de données, tous les produits sélectionnés par le client (id du produit, nom du produit, prix...). Parceque j'avais l'habitude d'enregistrer le nom, le contact, l'adresse email du client et l'identifiant id du produit que le client resservait dans la table "reservation". Je veux maintenant faire la même chose en enregistrant les informations du client avec les différents id des produits dans son panier. Comment m'y prendre?
Ci-dessous le code de la page de reservation que j'appelle "reservation_globale.php":
Par exemple: Au debut, le client Chirack ne pouvait reserver qu'un seul ordinateur par commande . Et maintenant je veux qu'il puisse réserver un ordinateur, une imprimante, une télévision, des chaussures... tous ensemble dans la même "reservation" et je veux enregistrer les informations du client "Chirack" et tous les produits qu'il a réservés dans son panier. J'ai une table "réservation" à cet effet mais je ne parviens pas effectuer l'enregistrement des différents id des produits du panier. C'est seulement l'id du premier produit qui s'enregistre dans la base. Merci de m'eclaircir...
Voici le code de la page de traitement "traitement_reservation.php"
Je suis entrain de faire une migration de la procédure de réservation simple de produit vers un panier virtuel.
Dans le projet, les clients avaient l'habitude de réserver un et seul produit par commande. Désormais, je veux maintenant donner la possibilité aux clients de mon site de pouvoir réserver plusieurs produits à la fois pour une même commande.
C'est pour cela que j'ai cherché le tuto du panier. Je suis maintenant au stade de la réservation des produits ajoutés au panier. Malheureusement je ne vois pas d'abord comment enregistrer dans ma base de données, tous les produits sélectionnés par le client (id du produit, nom du produit, prix...). Parceque j'avais l'habitude d'enregistrer le nom, le contact, l'adresse email du client et l'identifiant id du produit que le client resservait dans la table "reservation". Je veux maintenant faire la même chose en enregistrant les informations du client avec les différents id des produits dans son panier. Comment m'y prendre?
Ci-dessous le code de la page de reservation que j'appelle "reservation_globale.php":
<?php if(!isset($_SESSION)) {Session_start();} error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); // petit test pour voir si le panier existe if(!isset($_SESSION['achats'])) { echo"<script language='javascript'> document.location.href='liste_pdt.php'; </script> "; } /* session_start(); if(isset($_GET["id"])) { $id=$_GET["id"]; $_SESSION['id']=$id; } $new_id=$_SESSION['id']; */ ?> <html> <head> <meta charset="utf-8"> <link rel="stylesheet" href="bootstrap/css/bootstrap.css" /> <link rel="stylesheet" href="bootstrap/css/bootstrap.min.css" /> <link rel="stylesheet" href="bootstrap/css/bootstrap-theme.min.css"/> <link rel="stylesheet" type="text/css" href="styl.css" /> <link rel="stylesheet" href="menu_index.css" type ="text/css" /> <title>produits d'une catégorie</title> </head> <body> <div id="bloc_page"> <?php include ('config.php');?> <?php include('header.php');?> <div class="container"> <div class="row"> <form method="POST" action="operation_categories_script.php"> <div class="container"> <div class="row"> <article class="col-md-12 col-sm-12 col-xs-12 ajuste"> <div class="panel panel-default"> <?php $total=0; $count=count($_SESSION['achats']); $tot=0; if($count==0){ } for($i=0;$i<$count;$i++){ // on parcourt notre tableau session et on ne considère que les lignes encore active if($_SESSION['achats'][$i]['statut']==0) { $id=$_SESSION['achats'][$i]['id1']; // on recupère l'id $qte=$_SESSION['achats'][$i]['qte']; // de même que la quantité require_once('config.php'); $requete="select * from categories where id_Cat=$id"; try { $reslt=$bdd->prepare($requete); $reslt->execute(); $lig3=$reslt->fetch(); $prix=number_format($lig3['prix'],0,'',''); } catch(PDOException $e) { // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); print_r($reslt); } /* <td height='34' class='lie4 zone esp'>{$lig3['nom']}</td> <td align='center' class='lie4 zone'>$quantite_totale</td> <input type='text' value='$qte' name='$i' size='5' class='li3'></td> */ $tot=$lig3['prix']*$qte; $total+=$tot; echo" <div class='col-md-8 col-sm-8 col-xs-8'> <tr></br> <td align='center' class='lie zone'>- $qte {$lig3['nom']}(s) </td> dont le prix unitaire est <td align='center' class='lie4 zone'>$prix FCFA</td> = <td align='center' class='lie4 zone'>$tot FCFA</td> </tr> </div> <div class='col-md-4 col-sm-4 col-xs-4'></br> <td align='center' class='lie zone'><a href='#' onclick='effacer($id)' class='lie41'>Effacer</a></td> </div> </br></br></br>"; // on incrémente le total /* $tot=$lig3['prix']*$qte; $total+=$tot; */ } } $prix1=number_format($total,0,'',' '); echo'<tr> <td bgcolor="#0099CC" class="zone lie4 style7 style4">Prix Total à payer = </td><td class="lie42 zone" align="center">'.$prix1.'FCFA</td> </tr> </div> </article> </div> </div>'; ?> <div class="container"> <div class="row"> <article class="col-md-12 col-sm-12 col-xs-12 ajuste"> <div class="panel panel-default"> <div class="panel-heading"><h2>Donnez vos coordonnées pour la validation de votre réservation!</h2></div> <div class="panel-body"> <table> <div class="col-md-4 col-sm-4 col-xs-4"> <td> <label>Nom</label><br/> <input type="text" name="nomC" size="120" class="form-control" required/> <br/> <label>Prénom</label><br/> <input type="text" name="prenomC" size="120" class="form-control" required/> <br/> <label>Email</label><br/> <input type="email" name="emailC" class="form-control" required size="120"/> <br/> <label>Contacts</label><br/> <input type="tel" name="cellC" size="120" class="form-control" required/> </br> <input type="hidden" name="id" value="id" size="20"/> <input type="submit" name="valider" value="valider" align="right"/> </td> </div> </tr> </center> </table> </div> </div> </article> </div> </div> </form> </div> </div> </br></br></br> <?php include('footer.php') ?> </div> <script src="bootstrap/js/jquery.js"> </script> <script src="bootstrap/js/bootstrap.min.js"></script> </body> </html>
Par exemple: Au debut, le client Chirack ne pouvait reserver qu'un seul ordinateur par commande . Et maintenant je veux qu'il puisse réserver un ordinateur, une imprimante, une télévision, des chaussures... tous ensemble dans la même "reservation" et je veux enregistrer les informations du client "Chirack" et tous les produits qu'il a réservés dans son panier. J'ai une table "réservation" à cet effet mais je ne parviens pas effectuer l'enregistrement des différents id des produits du panier. C'est seulement l'id du premier produit qui s'enregistre dans la base. Merci de m'eclaircir...
Voici le code de la page de traitement "traitement_reservation.php"
<?php if(!isset($_SESSION)) {Session_start();} error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); ?> <html> <head> <meta charset="utf-8"> <link rel="stylesheet" href="bootstrap/css/bootstrap.css" /> <link rel="stylesheet" href="bootstrap/css/bootstrap.min.css" /> <link rel="stylesheet" href="bootstrap/css/bootstrap-theme.min.css"/> <link rel="stylesheet" type="text/css" href="styl.css" /> <link rel="stylesheet" href="menu_index.css" type ="text/css" /> <title>traitement de la reservation</title> </head> <body> <div id="bloc_page"> <?php include ('config.php');?> <?php include('header.php');?> <div class="container"> <div class="row"> <form method="POST" action=""> <div class="container"> <div class="row"> <article class="col-md-12 col-sm-12 col-xs-12 ajuste"> <div class="panel panel-default"> <div class="panel-body"> <?php $count=count($_SESSION['achats']); if($count==0){ } for($i=0;$i<$count;$i++){ if($_SESSION['achats'][$i]['statut']!=0) { $id=$_SESSION['achats'][$i]['id1']; // on recupère l'id } $identifiants=$id; } if (isset($_POST['valider'])) { $nomC=$_POST['nomC']; $prenomC=$_POST['prenomC']; $emailC=$_POST['emailC']; $cellC=$_POST['cellC']; $id=$_SESSION['id']; echo "<center><h3><u> Vérifiez vos coordonnées svp </u></h3></center>"; echo'<div class="col-md-3 col-sm-4 col-xs-4"> <h3>Nom et prénom: </br></br>Adresse email: </br></br>Téléphones: </br></br>Les produits numéro:</h3> </div> <div class="col-md-9 col-sm-8 col-xs-8"> <h3>'.$nomC.' ' .$prenomC.' </br></br>'.$emailC.' </br></br>'.$cellC.'</br></br> '.$id.', '.$id.', '.$id.'</h3> </div> <form method="POST" action=""> <input type="hidden" name="nomC2" value="'.$nomC.'" /> <input type="hidden" name="prenomC2" value="'.$prenomC.'" /> <input type="hidden" name="emailC2" value="'.$emailC.'" /> <input type="hidden" name="cellC2" value="'.$cellC.'" /> <input type="hidden" name="id2" value="'.$id.'" /></br></br></br> <input class="annuler ch1" type="submit" name="annuler" value="Annuler" /> <input class="ch2" type="submit" name="confirmer" value="Confirmer" /> </form>'; } ?> <?php if(isset($_POST['confirmer'])) { $nomC2=isset($_POST['nomC2']) ? $_POST['nomC2'] : '' ; $prenomC2=isset($_POST['prenomC2']) ? $_POST['prenomC2'] : ''; $emailC2=isset($_POST['emailC2']) ? $_POST['emailC2'] : ''; $cellC2=isset($_POST['cellC2']) ? $_POST['cellC2'] : ''; $id2=isset($_POST['id2']) ? $_POST['id2'] : ''; $req1 = "INSERT INTO clients(nomC, prenomC, emailC, cellC) VALUES(:nomC2, :prenomC2, :emailC2, :cellC2)"; $datas = array(':nomC2'=>$nomC2, ':prenomC2'=>$prenomC2, ':emailC2'=>$emailC2, ':cellC2'=>$cellC2); try { $requete = $bdd -> prepare($req1); $requete->execute($datas) ; }catch(Exception $e) { // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } /* $req1->closeCursor(); */ $last_id_in_client = $bdd->lastInsertId(); try { $req2=$bdd->prepare('INSERT INTO reservation_categories(idC, id_Cat, date_reservation) VALUES(:last_id_in_client, :id2, NOW())'); $req2->execute(array(':last_id_in_client'=>$last_id_in_client, ':id2'=>$id2)) or die (print_r($req->errorInfo())); $req2->closeCursor(); echo'<h3> Réservation faite avec succès!</h3> </br><h3><a href="categories.php">Faire une autre réservation!</a></h3>'; }catch(Exception $e) { // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($req2); } }else if(isset($_POST['annuler'])) { header('Location:index.php'); } ?> </div> </div> </article> </div> </div> </form> </div> </div> </br></br></br> <?php include('footer.php') ?> </div> <script src="bootstrap/js/jquery.js"> </script> <script src="bootstrap/js/bootstrap.min.js"></script> </body> </html>
A voir également:
- Recuperation de plusieurs id
- Id telephone - Guide
- Convertisseur récupération de texte - Guide
- Gate first id ✓ - Forum Navigateur
- Id=108 - Forum MacOS
- Go trust id ✓ - Forum Logiciels
5 réponses
Bonjour,
C'est un sacré bazarre ton code.... il serait bien de le remettre un peu au propre... en commençant par appliquer ce qui est indiqué dans ce lien ( la parti "séparer le code php du html" par exemple ) https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Ensuite, ton souci semble se situer ici :
Au passage... le bout de ligne
car oui... tu ne fais qu'un seul insert.....
Toi.. il faut désormais que tu boucles sur les données de ton panier.
Il suffit donc de jouer le execute avec les différentes valeurs
un truc du genre :
la variable $panier représentant ta variable de SESSION contenant tes produits bien évidemment
C'est un sacré bazarre ton code.... il serait bien de le remettre un peu au propre... en commençant par appliquer ce qui est indiqué dans ce lien ( la parti "séparer le code php du html" par exemple ) https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Ensuite, ton souci semble se situer ici :
try { $req2=$bdd->prepare('INSERT INTO reservation_categories(idC, id_Cat, date_reservation) VALUES(:last_id_in_client, :id2, NOW())'); $req2->execute(array(':last_id_in_client'=>$last_id_in_client, ':id2'=>$id2)) or die (print_r($req->errorInfo())); $req2->closeCursor(); echo'<h3> Réservation faite avec succès!</h3> </br><h3><a href="categories.php">Faire une autre réservation!</a></h3>'; }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($req2); }
Au passage... le bout de ligne
or die (print_r($req->errorInfo()));est inutile vu que tu es dans un try catch...
car oui... tu ne fais qu'un seul insert.....
Toi.. il faut désormais que tu boucles sur les données de ton panier.
Il suffit donc de jouer le execute avec les différentes valeurs
un truc du genre :
foreach($panier as $id_produit ){ $req2->execute(array(':last_id_in_client'=>$last_id_in_client, ':id2'=>$id_produit )) }
la variable $panier représentant ta variable de SESSION contenant tes produits bien évidemment
Salut,
quelqu'un peut m'aider svp?
quelqu'un peut m'aider svp?
J'ai suivi vos conseils et j'ai fais les modifications que vous souhaitiez.
Pas totalement... tu as encore beaucoup de PHP que tu pourrais déplacer au dessus de ton code html....
Ensuite, pour ton besoin... sais tu faire des boucles en php ? ( des boucles FOREACH ) ??
Car, ce n'est que ça....
$panier = !empty($_SESSION['achats']) ? $_SESSION['achats'] : NULL; $sql = "INSERT INTO reservation_categories(idC, id_Cat, date_reservation) VALUES(:last_id_in_client, :id2, NOW())"; try { $requete = $bdd->prepare($sql); if($panier){ foreach($panier as $produit ){ $id_produit = $panier['id_produit'] ; $datas = array(':last_id_in_client' => $last_id_in_client, ':id2' => $id_produit); $requete->execute($datas); } } } catch (Exception $e) { // en cas d'erreur : echo " Erreur ! " . $e->getMessage(); echo " Les datas : "; print_r($datas); }
Voici le resultat du var_dump($session);
array (size=4)
'nbre' => int 11
'id' => string '1' (length=1)
'panier' =>
array (size=2)
1 =>
array (size=5)
'id_produit' => int 1
'produit' => string 'produit 1' (length=9)
'qte' => int 35
'prix_unitaire' => int 10
'prix_Total' => int 350
'qteProduit' =>
array (size=1)
'' => int 0
'achats' =>
array (size=3)
0 =>
array (size=3)
'id1' => string '4' (length=1)
'statut' => int 0
'qte' => string '4' (length=1)
1 =>
array (size=3)
'id1' => string '9' (length=1)
'statut' => int 0
'qte' => string '5' (length=1)
2 =>
array (size=3)
'id1' => string '10' (length=2)
'statut' => int 0
'qte' => string '2' (length=1)
array (size=4)
'nbre' => int 11
'id' => string '1' (length=1)
'panier' =>
array (size=2)
1 =>
array (size=5)
'id_produit' => int 1
'produit' => string 'produit 1' (length=9)
'qte' => int 35
'prix_unitaire' => int 10
'prix_Total' => int 350
'qteProduit' =>
array (size=1)
'' => int 0
'achats' =>
array (size=3)
0 =>
array (size=3)
'id1' => string '4' (length=1)
'statut' => int 0
'qte' => string '4' (length=1)
1 =>
array (size=3)
'id1' => string '9' (length=1)
'statut' => int 0
'qte' => string '5' (length=1)
2 =>
array (size=3)
'id1' => string '10' (length=2)
'statut' => int 0
'qte' => string '2' (length=1)
Arf..
Ta variable de session c'est panier ... pas achats.
Il faut donc modifier la ligne de code
en
Tu aurais pu ( Dù ! ) le voir je pense....
Enfin bon.. tu comprends le principe...le code est à adapter à tes besoins.... suffit pas juste de copier/coller sans regarder.
Ta variable de session c'est panier ... pas achats.
Il faut donc modifier la ligne de code
$panier = !empty($_SESSION['achats']) ? $_SESSION['achats'] : NULL;
en
$panier = !empty($_SESSION['panier']) ? $_SESSION['panier'] : NULL;
Tu aurais pu ( Dù ! ) le voir je pense....
Enfin bon.. tu comprends le principe...le code est à adapter à tes besoins.... suffit pas juste de copier/coller sans regarder.
Voic le code de ma page "panier.php"
Ensuite, voici le code de ma page "mon-panier.php"
<?php // ouverture d'une session car le contenu du panier sera stocké dans un tableau session if(!isset($_SESSION)) {Session_start();} error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); $id=$_GET['id']; // récupération de l'id du produit // fonction d'ajout du produit dans le panier, elle initialise la variable $_SESSION['panier'] function add($code,$qt) { $_SESSION['achats'][] = array ("id1" => $code,"statut"=> 0,"qte"=>$qt); } // on teste si la variable $_SESSION['achat'][] existe if(isset($_SESSION['achats'])){ // les lignes de code ci-dessous servent à incrémenter la quantité du produit dans le panier, ainsi chaque fois que l'on choisit d'ajouter un produit, un test est fait pour savoir s'il existe déjà dans le panier ou pas. $count1 = count($_SESSION['achats']); $tab=array(); $tab1=array(); for($i=0;$i<$count1;$i++) { $tab[$i]=$_SESSION['achats'][$i]['id1']; $tab1[$i]=$_SESSION['achats'][$i]['statut']; } if(!in_array($id,$tab)){ add($id,'1'); } else { for($j=0;$j<$count1;$j++) { if($id==$tab[$j]) { if($_SESSION['achats'][$j]['statut']==0) { $q=$_SESSION['achats'][$j]['qte']; $q++; $_SESSION['achats'][$j]['qte']=$q; //Modifications $nbr1=$q; } else { add($id,'1'); } } } /* while($j=0;$j<$count1;$j++){$quantite_totale=$nbr1+$nbr1;} */ } } // si la variable n'existe, on l'initialise else {add($id,'1'); } $nbre=0; $count = count($_SESSION['achats']); // calcul du nombre de produit dans le panier for($i=0;$i<$count;$i++) { if($_SESSION['achats'][$i]['statut']=='0') { $nbre+=$_SESSION['achats'][$i]['qte']; } } // stockage du nombre de produit dans une variable session $_SESSION['nbre']=$nbre; /* $_SESSION['quantite_totale']=$quantite_totale; */ // redirection après insertion dans le panier echo"<script language='javascript'> document.location.href='mon_panier.php'; </script> "; ?>
Ensuite, voici le code de ma page "mon-panier.php"
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <link rel="stylesheet" href="bootstrap/css/bootstrap.css" /> <link rel="stylesheet" href="bootstrap/css/bootstrap.min.css" /> <link rel="stylesheet" href="bootstrap/css/bootstrap-theme.min.css"/> <link rel="stylesheet" type="text/css" href="styl.css" /> <link rel="stylesheet" href="menu_index.css" type ="text/css" /> <title> votre panier </title> </head> <body> <div id="bloc_page"> <?php include('header.php');?> <div class="container"> <div class="row"> <section class="col-md-12 col-sm-12 col-xs-12" id="partag"> <div class="row"> <?php if(!isset($_SESSION)) {Session_start();} error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); // petit test pour voir si le panier existe if(!isset($_SESSION['achats'])) { echo"<script language='javascript'> document.location.href='liste_pdt.php'; </script> "; } /* $_SESSION['quantite_totale']=$quantite_totale; */ ?> <script language="javascript"> // script javascript pour le dynamisme de notre page function fin(){ if(confirm("Voulez vous vraiment annuler votre commande ?")){ document.location.href="fin_achat.php"; } } function effacer(val){ if(confirm("Voulez vous vraiment effacer ce produit de votre panier ?")) { document.location.href="effacer.php?id="+val; } } function payer(){ if(confirm("Voulez vous vraiment valider cette commande ?")){ document.location.href="reservation_globale.php"; } } </script> <?php $total=0; $count=count($_SESSION['achats']); $tot=0; if($count==0){ } else{ // le code suivant liste le contenu du panier et nous donne la possibilité de supprimer ou de modifier les quantités des produits du panier ?> <form action="calcul.php" method="post"> <table border='0' CellSpace='2' CellPad='0' width='638'> <center><h1><u>CONTENU DE VOTRE PANIER</u><h1></center> <?php for($i=0;$i<$count;$i++){ // on parcourt notre tableau session et on ne considère que les lignes encore if($_SESSION['achats'][$i]['statut']==0) { $id=$_SESSION['achats'][$i]['id1']; // on recupère l'id $qte=$_SESSION['achats'][$i]['qte']; // de même que la quantité require_once('config.php'); $requete="select nom, prix from categories where id_Cat=$id"; try { $reslt=$bdd->prepare($requete); $reslt->execute(); $lig3=$reslt->fetch(); $prix=number_format($lig3['prix'],0,'',''); } catch(PDOException $e) { // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); print_r($reslt); } /* <td height='34' class='lie4 zone esp'>{$lig3['nom']}</td> <td align='center' class='lie4 zone'>$quantite_totale</td>*/ echo" <div class='col-md-8 col-sm-7 col-xs-7'> <tr> <td height='34' align='center' class='lie4 zone'>{$lig3['nom']}</td> <td align='center' class='lie zone'><input type='text' value='$qte' name='$i' size='5' class='li3'></td> <td align='center' class='lie4 zone'>$prix FCFA</td> <td align='center' class='lie zone'><a href='#' onclick='effacer($id)' class='lie41'>Effacer</a></td> </tr> </div>"; // on incrémente le total $tot=$lig3['prix']*$qte; $total+=$tot; } } echo" <div class='col-md-4 col-md-5 col-md-5'> <a href='index.php'>Ajouter un autre produit au panier</a> </div>"; $prix1=number_format($total,0,'',' '); ?> <tr><td colspan="5"> </td></tr> <tr><td> </td><td bgcolor="#0099CC" class="zone lie4 style7 style4">Prix Total : </td><td class='lie42 zone' align="center"><?php echo $prix1 ?> FCFA</td><td> </td> <td> </td> </tr> <tr><td colspan="5"> </td></tr> <tr> <td colspan="2"> <div align="center"> <input name="Button2" type="button" class="text6" onclick="fin()" value="Annuler la commande" /> </div> </td> <td> <div align="center"> <input name="Button" type="submit" class="text6" value="Recalculer" /> </div> </td> <td> <div align="center"> <input name="Button" type="button" class="text6" value="Valider" onclick="payer()" /> <input name="Button2" type="button" class="text6" onclick="fin()" value="Vider le panier" /> </div> </td> </tr> </table> </form> <?php } ?> </div> </section> </div> </div> </br></br></br> <?php include('footer.php') ?> </div> <script src="bootstrap/js/jquery.js"> </script> <script src="bootstrap/js/bootstrap.min.js"></script> </body> </html>
Donc... ton code d'ajout :
Tu as donc la clé : id1
c'est donc bien là dessus que tu dois faire ta boucle...
$_SESSION['achats'][] = array ("id1" => $code,"statut"=> 0,"qte"=>$qt);
Tu as donc la clé : id1
c'est donc bien là dessus que tu dois faire ta boucle...
$panier = !empty($_SESSION['achats']) ? $_SESSION['achats'] : NULL; $sql = "INSERT INTO reservation_categories(idC, id_Cat, date_reservation) VALUES(:last_id_in_client, :id2, NOW())"; try { $requete = $bdd->prepare($sql); if($panier){ foreach($panier as $produit ){ $id_produit = $panier['id1'] ; $datas = array(':last_id_in_client' => $last_id_in_client, ':id2' => $id_produit); $requete->execute($datas); } } } catch (Exception $e) { // en cas d'erreur : echo " Erreur ! " . $e->getMessage(); echo " Les datas : "; print_r($datas); }
Salut jordane45,
ça commence à aller. J'ai fais les modifications. Les enregistrements se font dans la base mais la colonne id_Cat reçoit des valeurs NULL dans la table reservation_categories et voici l'erreur qui s'affiche:
Undefined index: id1 in C:\wamp\www\PROMO_SHOP_PANIER\traitement_reservation_final.php on line 136
ça commence à aller. J'ai fais les modifications. Les enregistrements se font dans la base mais la colonne id_Cat reçoit des valeurs NULL dans la table reservation_categories et voici l'erreur qui s'affiche:
Undefined index: id1 in C:\wamp\www\PROMO_SHOP_PANIER\traitement_reservation_final.php on line 136
Voici mon code modifié:
<?php if(!isset($_SESSION)) {Session_start();} ?> <html> <head> <meta charset="utf-8"> <link rel="stylesheet" href="bootstrap/css/bootstrap.css" /> <link rel="stylesheet" href="bootstrap/css/bootstrap.min.css" /> <link rel="stylesheet" href="bootstrap/css/bootstrap-theme.min.css"/> <link rel="stylesheet" type="text/css" href="styl.css" /> <link rel="stylesheet" href="menu_index.css" type ="text/css" /> <title>traitement de la reservation</title> </head> <body> <div id="bloc_page"> <?php include ('config.php');?> <?php include('header.php');?> <div class="container"> <div class="row"> <form method="POST" action=""> <div class="container"> <div class="row"> <article class="col-md-12 col-sm-12 col-xs-12 ajuste"> <div class="panel panel-default"> <div class="panel-body"> <?php error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); $total=0; $count=count($_SESSION['achats']); $tot=0; if($count==0){ } for($i=0;$i<$count;$i++){ // on parcourt notre tableau session et on ne considère que les lignes encore active if($_SESSION['achats'][$i]['statut']==0) { $id=$_SESSION['achats'][$i]['id1']; // on recupère l'id $qte=$_SESSION['achats'][$i]['qte']; // de même que la quantité require_once('config.php'); $requete="select * from categories where id_Cat=$id"; try { $reslt=$bdd->prepare($requete); $reslt->execute(); $lig3=$reslt->fetch(); $prix=number_format($lig3['prix'],0,'',''); } catch(PDOException $e) { // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); print_r($reslt); } $tot=$lig3['prix']*$qte; $total+=$tot; echo" <div class='col-md-8 col-sm-8 col-xs-8'> <tr></br> <td align='center' class='lie zone'>- $qte {$lig3['nom']}(s) </td> dont le prix unitaire est <td align='center' class='lie4 zone'>$prix FCFA</td> = <td align='center' class='lie4 zone'>$tot FCFA</td> </tr> </div> <div class='col-md-4 col-sm-4 col-xs-4'></br> <td align='center' class='lie zone'><a href='#' onclick='effacer($id)' class='lie41'>Effacer</a></td> </div> </br></br></br>"; } } if (isset($_POST['valider'])) { $nomC=$_POST['nomC']; $prenomC=$_POST['prenomC']; $emailC=$_POST['emailC']; $cellC=$_POST['cellC']; /* $id_produit=$_SESSION['achats'][$i]['id_produit']; */ echo "<center><h3><u> Vérifiez vos coordonnées svp </u></h3></center>"; echo'<div class="col-md-3 col-sm-4 col-xs-4"> <h3>Nom et prénom: </br></br>Adresse email: </br></br>Téléphones: </br></br>Les produits numéro:</h3> </div> <div class="col-md-9 col-sm-8 col-xs-8"> <h3>'.$nomC.' ' .$prenomC.' </br></br>'.$emailC.' </br></br>'.$cellC.'</br></br> </h3> </div> <form method="POST" action=""> <input type="hidden" name="nomC2" value="'.$nomC.'" /> <input type="hidden" name="prenomC2" value="'.$prenomC.'" /> <input type="hidden" name="emailC2" value="'.$emailC.'" /> <input type="hidden" name="cellC2" value="'.$cellC.'" /> <input type="hidden" name="id2" value="'.$id.'" /></br></br></br> <input class="annuler ch1" type="submit" name="annuler" value="Annuler" /> <input class="ch2" type="submit" name="confirmer" value="Confirmer" /> </form>'; } ?> <?php if(isset($_POST['confirmer'])) { $nomC2=isset($_POST['nomC2']) ? $_POST['nomC2'] : '' ; $prenomC2=isset($_POST['prenomC2']) ? $_POST['prenomC2'] : ''; $emailC2=isset($_POST['emailC2']) ? $_POST['emailC2'] : ''; $cellC2=isset($_POST['cellC2']) ? $_POST['cellC2'] : ''; $id2=isset($_POST['id2']) ? $_POST['id2'] : ''; $req1 = "INSERT INTO clients(nomC, prenomC, emailC, cellC) VALUES(:nomC2, :prenomC2, :emailC2, :cellC2)"; $datas = array(':nomC2'=>$nomC2, ':prenomC2'=>$prenomC2, ':emailC2'=>$emailC2, ':cellC2'=>$cellC2); try { $requete = $bdd -> prepare($req1); $requete->execute($datas) ; }catch(Exception $e) { // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } $last_id_in_client = $bdd->lastInsertId(); $panier = !empty($_SESSION['achats']) ? $_SESSION['achats'] : NULL; $sql = "INSERT INTO reservation_categories(idC, id_Cat, date_reservation) VALUES(:last_id_in_client, :id2, NOW())"; try { $requete = $bdd->prepare($sql); if($panier){ foreach($panier as $produit ){ $id_produit = $panier['id1'] ; $datas = array(':last_id_in_client' => $last_id_in_client, ':id2' => $id_produit); $requete->execute($datas); } } } catch (Exception $e) { // en cas d'erreur : echo " Erreur ! " . $e->getMessage(); echo " Les datas : "; print_r($datas); } }else if(isset($_POST['annuler'])) { header('Location:index.php'); } ?> </div> </div> </article> </div> </div> </form> </div> </div> </br></br></br> <?php include('footer.php') ?> </div> <script src="bootstrap/js/jquery.js"> </script> <script src="bootstrap/js/bootstrap.min.js"></script> </body> </html>
$panier = !empty($_SESSION['achats']) ? $_SESSION['achats'] : NULL; $sql = "INSERT INTO reservation_categories(idC, id_Cat, date_reservation) VALUES(:last_id_in_client, :id2, NOW())"; try { $requete = $bdd->prepare($sql); if($panier){ foreach($panier as $produit ){ $id_produit = !empty($panier['id1']) ? $panier['id1'] : NULL ; if($id_produit){ $datas = array(':last_id_in_client' => $last_id_in_client, ':id2' => $id_produit); $requete->execute($datas); } } } } catch (Exception $e) { // en cas d'erreur : echo " Erreur ! " . $e->getMessage(); echo " Les datas : "; print_r($datas); }
Jordane45, je pense que c'est plutôt le code ci-dessous que nous devons chercher à améliorer car j'arrive à avoir des enregistrements dans les 2 tables avec celui-ci. Alors que celui que vous venez de faire ne produit aucun d'enregistrement dans la table "reservation_categories". Donc visitons bien celui-ci pour retrouver l'erreur et la corriger svp.
Lorsque je valide la commande, il enregistre bien le client dans la table "client", il enregistre bien aussi les id du client dans la table reservation_commande, c'est seulement les id_Cat qu'il met à NULL. Et c'est ce qu'on doit chercher à resoudre pour finaliser. Voici le message d'erreur qui s'affiche pour chacun des produits contenu dans le panier.
Undefined index: id1 in C:\wamp\www\PROMO_SHOP_PANIER\traitement_reservation_final.php on line 136
Il affiche ce message autant de fois qu'il ya de produits dans le panier. C'est à dire qu'il affiche ce message 10 fois s'il ya 10 produits dans le panier, 15 fois s'il y en a 15 produits.
<?php if(!isset($_SESSION)) {Session_start();} ?> <html> <head> <meta charset="utf-8"> <link rel="stylesheet" href="bootstrap/css/bootstrap.css" /> <link rel="stylesheet" href="bootstrap/css/bootstrap.min.css" /> <link rel="stylesheet" href="bootstrap/css/bootstrap-theme.min.css"/> <link rel="stylesheet" type="text/css" href="styl.css" /> <link rel="stylesheet" href="menu_index.css" type ="text/css" /> <title>traitement de la reservation</title> </head> <body> <div id="bloc_page"> <?php include ('config.php');?> <?php include('header.php');?> <div class="container"> <div class="row"> <form method="POST" action=""> <div class="container"> <div class="row"> <article class="col-md-12 col-sm-12 col-xs-12 ajuste"> <div class="panel panel-default"> <div class="panel-body"> <?php error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); $total=0; $count=count($_SESSION['achats']); $tot=0; if($count==0){ } for($i=0;$i<$count;$i++){ // on parcourt notre tableau session et on ne considère que les lignes encore active if($_SESSION['achats'][$i]['statut']==0) { $id=$_SESSION['achats'][$i]['id1']; // on recupère l'id $qte=$_SESSION['achats'][$i]['qte']; // de même que la quantité require_once('config.php'); $requete="select * from categories where id_Cat=$id"; try { $reslt=$bdd->prepare($requete); $reslt->execute(); $lig3=$reslt->fetch(); $prix=number_format($lig3['prix'],0,'',''); } catch(PDOException $e) { // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); print_r($reslt); } $tot=$lig3['prix']*$qte; $total+=$tot; echo" <div class='col-md-8 col-sm-8 col-xs-8'> <tr></br> <td align='center' class='lie zone'>- $qte {$lig3['nom']}(s) </td> dont le prix unitaire est <td align='center' class='lie4 zone'>$prix FCFA</td> = <td align='center' class='lie4 zone'>$tot FCFA</td> </tr> </div> <div class='col-md-4 col-sm-4 col-xs-4'></br> <td align='center' class='lie zone'><a href='#' onclick='effacer($id)' class='lie41'>Effacer</a></td> </div> </br></br></br>"; } } if (isset($_POST['valider'])) { $nomC=$_POST['nomC']; $prenomC=$_POST['prenomC']; $emailC=$_POST['emailC']; $cellC=$_POST['cellC']; /* $id_produit=$_SESSION['achats'][$i]['id_produit']; */ echo "<center><h3><u> Vérifiez vos coordonnées svp </u></h3></center>"; echo'<div class="col-md-3 col-sm-4 col-xs-4"> <h3>Nom et prénom: </br></br>Adresse email: </br></br>Téléphones: </br></br>Les produits numéro:</h3> </div> <div class="col-md-9 col-sm-8 col-xs-8"> <h3>'.$nomC.' ' .$prenomC.' </br></br>'.$emailC.' </br></br>'.$cellC.'</br></br> </h3> </div> <form method="POST" action=""> <input type="hidden" name="nomC2" value="'.$nomC.'" /> <input type="hidden" name="prenomC2" value="'.$prenomC.'" /> <input type="hidden" name="emailC2" value="'.$emailC.'" /> <input type="hidden" name="cellC2" value="'.$cellC.'" /> <input type="hidden" name="id2" value="'.$id.'" /></br></br></br> <input class="annuler ch1" type="submit" name="annuler" value="Annuler" /> <input class="ch2" type="submit" name="confirmer" value="Confirmer" /> </form>'; } ?> <?php if(isset($_POST['confirmer'])) { $nomC2=isset($_POST['nomC2']) ? $_POST['nomC2'] : '' ; $prenomC2=isset($_POST['prenomC2']) ? $_POST['prenomC2'] : ''; $emailC2=isset($_POST['emailC2']) ? $_POST['emailC2'] : ''; $cellC2=isset($_POST['cellC2']) ? $_POST['cellC2'] : ''; $id2=isset($_POST['id2']) ? $_POST['id2'] : ''; $req1 = "INSERT INTO clients(nomC, prenomC, emailC, cellC) VALUES(:nomC2, :prenomC2, :emailC2, :cellC2)"; $datas = array(':nomC2'=>$nomC2, ':prenomC2'=>$prenomC2, ':emailC2'=>$emailC2, ':cellC2'=>$cellC2); try { $requete = $bdd -> prepare($req1); $requete->execute($datas) ; }catch(Exception $e) { // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } $last_id_in_client = $bdd->lastInsertId(); $panier = !empty($_SESSION['achats']) ? $_SESSION['achats'] : NULL; $sql = "INSERT INTO reservation_categories(idC, id_Cat, date_reservation) VALUES(:last_id_in_client, :id2, NOW())"; try { $requete = $bdd->prepare($sql); if($panier){ foreach($panier as $produit ){ $id_produit = $panier['id1'] ; $datas = array(':last_id_in_client' => $last_id_in_client, ':id2' => $id_produit); $requete->execute($datas); } } } catch (Exception $e) { // en cas d'erreur : echo " Erreur ! " . $e->getMessage(); echo " Les datas : "; print_r($datas); } }else if(isset($_POST['annuler'])) { header('Location:index.php'); } ?> </div> </div> </article> </div> </div> </form> </div> </div> </br></br></br> <?php include('footer.php') ?> </div> <script src="bootstrap/js/jquery.js"> </script> <script src="bootstrap/js/bootstrap.min.js"></script> </body> </html>
Lorsque je valide la commande, il enregistre bien le client dans la table "client", il enregistre bien aussi les id du client dans la table reservation_commande, c'est seulement les id_Cat qu'il met à NULL. Et c'est ce qu'on doit chercher à resoudre pour finaliser. Voici le message d'erreur qui s'affiche pour chacun des produits contenu dans le panier.
Undefined index: id1 in C:\wamp\www\PROMO_SHOP_PANIER\traitement_reservation_final.php on line 136
Il affiche ce message autant de fois qu'il ya de produits dans le panier. C'est à dire qu'il affiche ce message 10 fois s'il ya 10 produits dans le panier, 15 fois s'il y en a 15 produits.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Cependant pouvez-vous me dire dans quelle partie dois-je mettre cette boucle "foreach" svp?
J'ai actuellement mis le foreach dans le try, mais ça coince pour les "id" des produits.
Le problème se trouve probablement dans la partie requette que vous avez indiquée, mais il ya un problème au niveau de la récupération des "id" des produits contenus dans le panier. Car j'avais l'habitude de recupérer un seul "id" avec la superglobale GET[], ça coince actuellement parceque je ne sais pas comment récupérer les "id" des produits contenus dans le panier.
Merci pour l'éclairicssement.
Je n'interviendrai plus dans cette discussion tant que ça n'aura pas été fait.
J'ai suivi vos conseils et j'ai fais les modifications que vous souhaitiez.
Voici le code modifié dans lequel on m'affiche maintenant les erreurs suivantes:
1- Notice: Undefined offset: 2 in C:\wamp\www\PROMO_SHOP_PANIER\traitement_reservation.php on line 47
2- Notice: Undefined variable: id in C:\wamp\www\PROMO_SHOP_PANIER\traitement_reservation.php on line 62
Mon souhait est de pouvoir récupérer les id de tous les produits contenus dans le panier du client pour les enregistrer tous dans un champ.