Menu

Recuperation de plusieurs id [Résolu]

Messages postés
43
Date d'inscription
mercredi 10 février 2016
Statut
Membre
Dernière intervention
3 avril 2019
-
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":
<?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>
Afficher la suite 

Votre réponse

5 réponses

Messages postés
25216
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 avril 2019
1943
0
Merci
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 ) http://www.commentcamarche.net/faq/48399-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


Busima
Messages postés
43
Date d'inscription
mercredi 10 février 2016
Statut
Membre
Dernière intervention
3 avril 2019
-
Merci Jordane45,
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.
jordane45
Messages postés
25216
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 avril 2019
1943 -
Je t'ai dit de commencer par refaire ton code plus propre en suivant le lien que je t'ai donné.
Je n'interviendrai plus dans cette discussion tant que ça n'aura pas été fait.
Busima
Messages postés
43
Date d'inscription
mercredi 10 février 2016
Statut
Membre
Dernière intervention
3 avril 2019
-
Ok salut Jordane 45,
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

<?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
															    }
															}
																
															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> '.$id_produit.'</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();
																			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));
																					foreach($panier as $id_produit )
																				    {
                                                                                        $req2->execute(array(':last_id_in_client'=>$last_id_in_client, 
		                                                                                                     ':id2'=>$id_produit )); 
                                                                                    }
																										
																										$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);
																					}
																					
																				/* foreach($panier as $id_produit )
																				    {
                                                                                        $req2->execute(array(':last_id_in_client'=>$last_id_in_client, 
		                                                                                                     ':id2'=>$id_produit )); 
                                                                                    } */

																		}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>
	                                                        

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.
Commenter la réponse de jordane45
Messages postés
43
Date d'inscription
mercredi 10 février 2016
Statut
Membre
Dernière intervention
3 avril 2019
0
Merci
Salut,
quelqu'un peut m'aider svp?
jordane45
Messages postés
25216
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 avril 2019
1943 -
Montre nous ce que contient ta variable de session
Busima
Messages postés
43
Date d'inscription
mercredi 10 février 2016
Statut
Membre
Dernière intervention
3 avril 2019
-
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)
jordane45
Messages postés
25216
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 avril 2019
1943 -
Arf..
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.
Busima
Messages postés
43
Date d'inscription
mercredi 10 février 2016
Statut
Membre
Dernière intervention
3 avril 2019
-
Merci bien jordane45 mais ça ne va vraiment pas.
Si vous voulez je peux vous donner plus d'informations, je peux même vous donner le lien du site en hébergement gratuit et vous envoyer tous les codes en privé afin que vous ayez une idée claire du problème.
jordane45
Messages postés
25216
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 avril 2019
1943 -
Ta variable de session me parait étrange ....;
Quand on regarde... on ne voit qu'un seul id_produit ....
par contre, après tu as des id1 ....
C'est un sacré bordel ton code....


- A quel endroit (et avec quel code) ajoutes tu des produits au panier ?
- As tu remis au propre (en plaçant le code php AVANT le html ) ton code tel que je te l'ai indiqué ?
Commenter la réponse de Busima
Messages postés
43
Date d'inscription
mercredi 10 février 2016
Statut
Membre
Dernière intervention
3 avril 2019
0
Merci
Voic le code de ma page "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>
	                                                        
Commenter la réponse de Busima
Messages postés
25216
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 avril 2019
1943
0
Merci
Donc... ton code d'ajout :
$_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);
 }


Busima
Messages postés
43
Date d'inscription
mercredi 10 février 2016
Statut
Membre
Dernière intervention
3 avril 2019
-
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.
<?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.
jordane45
Messages postés
25216
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 avril 2019
1943 -

Jordane45, je pense que c'est plutôt le code ci-dessous que nous devons chercher à améliorer

Ben.. oui... et je t'ai donné les lignes de code à modifier. Si tu n'es pas capable de voir où les mettre... ça devient grave.

De toutes façons, je n'interviendrai plus dans cette discussion tant que tu auras autant de php noyé dans du code html.
C'est trop le bazar dans ton code....
Donc, comme je te l'ai déjà demandé à plusieurs reprises, remets ton code au propre. Déplace le maximum de code php AU DESSUS de ton code html. Essaye de le découper en FONCTIONS
et là... ça sera plus simple pour toi de le maintenir/ faire évoluer et pour nous de te le corriger.

Bonne journée.
Mes yeuuuuuux ! Ça bruuuuuuuule ! Direction poubelle, recommence tout et découpe. La ton code cest un foutoir indigeste.
Busima
Messages postés
43
Date d'inscription
mercredi 10 février 2016
Statut
Membre
Dernière intervention
3 avril 2019
-
J'ai compris Trolol1996, si tu peux faire quelque chose, c'est de m'aider à résoudre le problème d'abord comme jordane l'a commencé. Je pense que tu as déjà lu le sujet et que tu es imprégné de la réalité. Donc montres-moi que tes yeux brûle vraiment en résolvant ce problème en une seule intervention. Après j'irai mettre le code à la poubelle.
jordane45
Messages postés
25216
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 avril 2019
1943 > Busima
Messages postés
43
Date d'inscription
mercredi 10 février 2016
Statut
Membre
Dernière intervention
3 avril 2019
-
Bonjour Busima;
Ce que Trolol a voulu dire (je suppose...) avec sa réponse maladroite.. c'est ce que j'essai de te faire comprendre depuis le début...
On ne voudra t'aider ( car se sera plus simple pour nous et pour toi...) que lorsque tu auras remis ton code au propre.
C'est trop le bordel actuellement... et compliqué pour nous de t'aider vu que ton code est mal structuré.
(et ça le sera tout autant pour toi pour le maintenir ou le faire évoluer par la suite... )
Donc... avant tout... commence par remettre ton code au propre tel que je te l'ai déjà demandé à plusieurs reprises (en suivant les conseils donnés dans les différents liens que je t'ai passé ) ensuite.. on verra pour te corriger ton souci (qui se corrigera peut être de lui même lorsque tu auras correctement réécrit ton code )
Commenter la réponse de jordane45
Messages postés
43
Date d'inscription
mercredi 10 février 2016
Statut
Membre
Dernière intervention
3 avril 2019
0
Merci
Bonjour jordane45.
J'ai enfin pu resoudre le problème. Je fermais un peu tôt les accolades. De plus j'avais 2 balises php que j'ai résumées en une seule pour pouvoir résoudre le problème.
Merci à vous.
Commenter la réponse de Busima