Récupérer les données de plusieurs tables à partir d'une id

Fermé
hm0123 - 16 août 2017 à 19:45
jordane45 Messages postés 38289 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 novembre 2024 - 24 août 2017 à 10:20
Bonjour,
Je souhaite récupérer plusieurs donnees dans plusieurs table appartire de user_id
donc pour essaie d etre un peu plus claire je souhaite recupere des donnees de mes clients qui peuvent etre sauvergade dans une table bien precise donc a chaque achat.

A note que le client ne va pas paye en ligne mais plutot a la livraison du product
donc j ai deja cree plusieurs table mais je suis pas en mesure de savoir le choix du user pour bien faire la livraison...

merci d avance pour votre aide!!


7 réponses

jordane45 Messages postés 38289 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 novembre 2024 4 703
17 août 2017 à 02:20
Bonsoir,

Je n'ai rien compris ....


Déjà... il faudrait commencer par nous donner la structure de ta BDD
Ensuite.. nous expliquer (exemple à l'appui éventuellement...) ce que tu cherches à faire.
Puis.. dis nous si ton souci se trouve au niveau de ton code PHP.. ou bien si ça ne serait pas pour la requête SQL..
Et enfin... vu que tu postes dans le forum "programmation"... je suppose que tu as écris du code... montre le nous !


NB : Pour poster du code sur le forum.. merci d'utiliser la coloration syntaxique (les balises de code).
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
0
1) voila une peu le structure de ma BDD
TABLES AVEC LEURS ATTRIBUTS
  • category(id,name,slug)
  • products(id,title,slug,description,price,category,weight,shipping,tva,finalprice,stock)
  • product_transactions(id,product,quantity,transaction_id)
  • user(id,username,email,password)
  • weight(id,name,price)

voila la table la ou j aimerai recupere le donnees sur du client ou user(cash)
  • cash(id,name,street,city,date,user_id,product,email,phone)

2)je vais que a chaque vois un client achet quelque chose et qu il veut paye a la livraison que je puis etre en mesure d avoir tout le details sur lui comme par exemple:le produit qu il a choisi ,son adress,son id_user,son mail,son numero de telephone...
3)je crois c est au niveau de requete SLQ
4)je cree un lien sur la page panier et celui ci nous ramene sur une page ou le client doit remplir quelque detail qui seront aussi sauvergade a leur tour dans la meme table qui la table cash
et pour finir voila le code du formulaire
<?php
if(isset($_SESSION['user_id']));

$servrname = "localhost";
$dbusername = "root";
$dbpassword = "root";
$dbname = "site_ecommerce";

$name = $_POST['name'];
$street = $_POST['street'];
$city = $_POST['city'];
$phone = $_POST['phone'];


$conn = new mysqli($servrname, $dbusername, $dbpassword, $dbname);

if($conn->connect_error) {
   die("connection failde: " .$conn->$connect_error);
}


$sql = "INSERT INTO cash (name, street, city, phone) value ('$name','$street','$city', '$phone')";

if ($conn->query($sql) === TRUE) {
   echo "Thank you! your info has been entered into the database,you may close this window!";
} else {
   echo "Error:" . sql . "<br>" . $conn->error;
}
$conn->close();

?>

<link href="../style/bootstrap.css" type="text/css" rel="stylesheet"/>

 <form action="" method="post">
   <center><font color="blue"><h3>Nom :</h3>
   <input type="text" name="name" value="<?php echo $name; ?>">
   <h3>Votre adresse residentiel:</h3>
   <textarea name="street" value="<?php echo $street; ?>" placeholder="Tapez ici votre adresse de la maison avec quelques references"></textarea>
    <h3>Commune:</h3>
<select type="texte" name="city" value="<?php echo $city; ?>"></center>
    <option value="Kamalondo">Kamalondo</option>
    <option value="Lubumbashi">Lubumbashi</option>
    <option value="Kenya">Kenya</option>
    <option value="Katumba">Katumba</option>
    <option value="Kapemba">Kapemba</option>
    <option value="Ruashi">Ruashi</option>      
      </select>
     <p></p>
   <h3>Phone:</h3>
   <input type="text" name="phone" value="<?php echo $phone; ?>">
   <br/>
   <input type="submit" name="submit" value="submit">
 </form>

0
jordane45 Messages postés 38289 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 novembre 2024 4 703
17 août 2017 à 10:44
3)je crois c est au niveau de requete SLQ

Donc ta question aurait plus sa place dans le forum "Bases de données" ...
(je la déplace au bon endroit)


Ensuite... tu veux donc réaliser une requête SELECT qui récupère les infos de tes différentes tables ? Pour ça il suffit de faire des jointures.
Par exemple :
SELECT *
FROM cash C
LEFT JOIN user U ON U.id = C.user_id
LEFT JOIN products P ON P.product

Et pourquoi dans la table cash on retrouve des infos comme l'email, l'adresse etc.. ce sont les infos du user non ? Donc elles sont déjà là... pourquoi les dupliquer ????
A moins que la table cash soit une table dans laquelle tu veux "copier" les infos des autres tables ?? .. pourquoi faire ?? Aucun intéret puisqu'avec une jointure sur les autres tables tu disposes déjà de toutes les infos...


0
je viens d insert le request mais la page s affiche plus on me affiche ce message dessous a la place du formulaire qui etait la avant

This page isn’t working

localhost is currently unable to handle this request.
HTTP ERROR 500

et pour l adresse email je vois que vous avez raison mais au niveau de l adresse normal j aimerais que le client puis saisir son adresse residentiel dans le formulaire pour mieux le localise...

<?php
if(isset($_SESSION['user_id']));

SELECT *
FROM cash C
LEFT JOIN user U ON U.id = C.user_id
LEFT JOIN products P ON P.product


$servrname = "localhost";
$dbusername = "root";
$dbpassword = "root";
$dbname = "site_ecommerce";

$name = $_POST['name'];
$street = $_POST['street'];
$city = $_POST['city'];
$phone = $_POST['phone'];


$conn = new mysqli($servrname, $dbusername, $dbpassword, $dbname);

if($conn->connect_error) {
   die("connection failde: " .$conn->$connect_error);
}


$sql = "INSERT INTO cash (name, street, city, phone) value ('$name','$street','$city', '$phone')";

if ($conn->query($sql) === TRUE) {
   echo "Thank you! your info has been entered into the database,you may close this window!";
} else {
   echo "Error:" . sql . "<br>" . $conn->error;
}


$conn->close();


?>

<link href="../style/bootstrap.css" type="text/css" rel="stylesheet"/>

 <form action="" method="post">
   <center><font color="blue"><h3>Nom :</h3>
   <input type="text" name="name" value="<?php echo $name; ?>">
   <h3>Votre adresse residentiel:</h3>
   <textarea name="street" value="<?php echo $street; ?>" placeholder="Tapez ici votre adresse de la maison avec quelques references"></textarea>
    <h3>Commune:</h3>
<select type="texte" name="city" value="<?php echo $city; ?>"></center>
    <option value="Kamalondo">Kamalondo</option>
    <option value="Lubumbashi">Lubumbashi</option>
    <option value="Kenya">Kenya</option>
    <option value="Katumba">Katumba</option>
    <option value="Kapemba">Kapemba</option>
    <option value="Ruashi">Ruashi</option>      
      </select>
     <p></p>
   <h3>Phone:</h3>
   <input type="text" name="phone" value="<?php echo $phone; ?>">
   <br/>
   <input type="submit" name="submit" value="submit">
 </form>

0
jordane45 Messages postés 38289 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 novembre 2024 4 703
17 août 2017 à 13:44
Tu dois utiliser la requete via les instructions php mysqli......
Vu ton erreur... avant de continuer commence par aprendre comment fonctionne php....
0
jordane45 Messages postés 38289 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 novembre 2024 4 703 > jordane45 Messages postés 38289 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 novembre 2024
Modifié le 18 août 2017 à 00:18
NB: Pour faire une requête... tu peux utiliser la même chose que pour ta requête d'insertion...
La même syntaxe que :

$sql = "SELECT *
FROM cash C
LEFT JOIN user U ON U.id = C.user_id
LEFT JOIN products P ON P.product = C.product";

if (! $result = $conn->query($sql) {
   echo "Error : " . $sql . "<br>" . $conn->error;
} lese {
 //on boucle sur le résultat via un fetch
   while($row = $result->fetch_array())   { 
     // on affiche le contenu de la ligne en faisant, par exemple, un print
       print_r($row);
   }


}



0
bonjour excuse moi puisque je suis un peu perdu svp
pouriez vous me dire quoi faire svp
0

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

Posez votre question
oft je viens d essais avec le code si dessus le donnees n est s affiche pas dans la BDD et quand je clique sur le link rien n est change alors que j ai deja cree une page dont son link et sur la page du panier
et voila le codes de ce lien .
a note que je fais quelque change dans la base de donne question de mettre un peut de l ordre donc du coup le clien va remplir remplire directement le details comme adress et numer de telephone pendant son inscription
et les table va vous donne sa
  • table users(id,username,email,password,phone,adress,area)
  • table products_transsction(id,product,quantity,cash_id)
  • table products(id,title,slug,description,price,category,weight,shpping,tva,final_price,stock)
  • table cash(id,name adress,area,date,cash_id,amount,shipping,currency_code,phone,user_id)

donc j aimerai que la table cash puis etre rempli attravers les autres tables

la page s appel cashlivre.php qui est enregistre dans le dossier (includes)
<?php if(isset($_SESSION['user_id'])){ ?><a href="<?php echo $cashlivre;?>">Payer la commande a la livresion</a><br/><br/>
                             <?php  }?>

et ici en bas ce le codes de la page cashlivre.php
<?php

require_once('includes/header.php');
require_once('includes/sidebar.php');
require_once('includes/functions_panier.php');

$sql = "SELECT *
FROM cash C
LEFT JOIN users U ON U.id = C.user_id
LEFT JOIN products P ON P.product";

if (! $result = $conn->query($sql) {

   echo "Error : " . $sql . "<br>" . $conn->error;
} else {
 //on boucle sur le résultat via un fetch
   while($row = $result->fetch_array())   { 
     // on affiche le contenu de la ligne en faisant, par exemple, un print
       print_r($row);
   }


}


echo '<br/><h2 style="color:green;">Merci d\'avoir commandé chez nous. Nous allons vous livrer dans 24h.</h2><br/>'; 

?>


0
jordane45 Messages postés 38289 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 novembre 2024 4 703
18 août 2017 à 00:03
Est-ce que au moins tu as testé la requête DIRECTEMENT dans ta BDD (via phpmyadmin par exemple) pour voir si elle fonctionne et ce qu'elle te retourne ??

En plus tu dis
le donnees n est s affiche pas dans la BDD

C'est à dire ? La BDD ne contient rien ??
Tu peux expliquer ce que tu veux exactement et dans un BON français histoire qu'on comprenne ?
Car je ne sais pas si tu veux INSERER des données dans ta BDD ou bien les récupérer pour les afficher sur ta page.... ce n'est pas clair....
0
les syntax que vous avez donner affiche des erreurs dans la BDD.

je veux les INSERER dans la table cash
donc lorsque l'user aura un ou plusieurs article dans son panier et de qu il clique sur le link propose en base du panier qu on puis m envoye le donnees directement la table cash et qu on puis affiche un message de felicitation a l utilisateur
0
jordane45 Messages postés 38289 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 novembre 2024 4 703 > hm0123
18 août 2017 à 00:24
Erreur de copier/coller
SELECT *
FROM cash C
LEFT JOIN user U ON U.id = C.user_id
LEFT JOIN products P ON P.product = C.product

mais... cette requête sert à "lister" les données dans la BDD... en aucun cas à les y insérer... !

Pour faire l'insertion.. tu as déjà le code.. c'est celui que tu nous as montré au départ.
ton code initiale contenant une petite erreur .. tu as oublié le $ devant sql
$sql = "INSERT INTO cash (name, street, city, phone) value ('$name','$street','$city', '$phone')";

if ($conn->query($sql) === TRUE) {
   echo "Thank you! your info has been entered into the database,you may close this window!";
} else {
   // echo "Error:" . sql . "<br>" . $conn->error;
    echo "Error : " . $sql . "<br>" . $conn->error;
}
$conn->close();

Si ce code ne fonctionne pas...dis nous ce qui s'affiche... n'aurais tu pas le message d'erreur ?

Tu peux aussi ajouter au début de ton script les lignes de code qui permettent d'afficher les erreurs de code php (https://www.php.net/manual/fr/function.error-reporting.php#85096)
error_reporting(E_ALL);
ini_set("display_errors", 1);


Tu peux également ajouter un peu de debug ... en affichant le contenu de la varirable $_POST pour voir ce qu'elle contient.....
0
quand je clique sur le lien que je mis sur la page panier, je reste toujour sur le mme page et rien ne change
pour essai de me faire comprend un plus
1)le premiers codes que je vous a envoye je un peut change sa vu que je trouve sa un peu trop complique pour l utilisateur alors le donnees qui devaient etre remplis dans le formulaire la ;je mis sa au debut question que l'utilisateur puis saissir ca une fois pour tout voila pourquoi je vous ai envoye la nouvelles strutures des tables qui on eux a etre modifie et le deux deniers codes le premiers c est pour le lien qui doit etre affiche sur la page panier etsa ce trouve dans le code de la page panier...
et le deniers code c est pour la page qui va nous permettre d insert le donne dans la table cash et celui ci vienvdra avec un message du genre(Merci d\'avoir commandé chez nous. Nous allons vous livrer dans 24h.)
et pour finir mon soucie est que j aimerai que quand l utilisateur clique sur le lien qui just en bas de so panier qu on puis lui afficher une page avec ce message(Merci d\'avoir commandé chez nous. Nous allons vous livrer dans 24h)
et que de mon cote d admin que je puis avoir les information utiles pour faire la livraison...
0
<?php

require_once('includes/header.php');
require_once('includes/sidebar.php');
require_once('includes/functions_panier.php');

///////Affichage des erreurs PHP
error_reporting(E_ALL);
ini_set("display_errors", 1);
//connexion à la bdd
try{

		$db = new PDO('mysql:host=localhost;dbname=site_ecommerce', 'root','root');
		$db->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER); // les noms de champs seront en caractères minuscules
		$db->setAttribute(PDO::ATTR_ERRMODE , PDO::ERRMODE_EXCEPTION); // les erreurs lanceront des exceptions
		$db->exec('SET NAMES utf8');				
	}

	catch(Exception $e){

		die('Une erreur est survenue');

	}
/////
$erreur = false;

$action = (isset($_POST['action'])?$_POST['action']:(isset($_GET['action'])?$_GET['action']:null));

if($action!==null){

if(!in_array($action, array('ajout','suppression','refresh')))

$erreur = true;

$l = (isset($_POST['l'])?$_POST['l']:(isset($_GET['l'])?$_GET['l']:null));
$q = (isset($_POST['q'])?$_POST['q']:(isset($_GET['q'])?$_GET['q']:null));
$p = (isset($_POST['p'])?$_POST['p']:(isset($_GET['p'])?$_GET['p']:null));

$l = preg_replace('#\v#', '', $l);

$p = floatval($p);

if(is_array($q)){

$QteArticle= array();

$i = 0;

foreach($q as $contenu){

$QteArticle[$i++] = intval($contenu);

}

}else{

$q = intval($q);

}

}

if(!$erreur){

	switch($action){

		Case "ajout":

		ajouterArticle($l,$q,$p);

		break;

		Case "suppression":

		supprimerArticle($l);

		break;

		Case "refresh":

		for($i = 0;$i<count($QteArticle);$i++){

			modifierQTeArticle($_SESSION['panier']['slugProduit'][$i], round($QteArticle[$i]));

		}

		break;

		Default:

		break;

	}

}

?>

<form method="post" action="">
	<table width="400">
		<tr>
			<td colspan="4">Votre panier</td>
		</tr>
		<tr>
			<td>Libellé produit</td>
			<td>Prix unitaire</td>
			<td>Quantité</td>
			<td>TVA</td>
			<td>Action</td>
		</tr>
		<?php

			if(isset($_GET['deletepanier']) && $_GET['deletepanier'] == true){

				supprimerPanier();

			}

			if(creationPanier()){

			$nbProduits = count($_SESSION['panier']['libelleProduit']);

			if($nbProduits <= 0){

				echo'<br/><p style="font-size:20px; color:Red;">Oops, panier vide !</p>';

			}else{

				$total = MontantGlobal();
				$totaltva = MontantGlobalTVA();
				$shipping = CalculFraisPorts();
			

				$params = array(
					'RETURNURL' => 'http://localhost/Site_ecommerce/cash.php',
					'CANCELURL' => 'http://localhost/Site e-commerce/cancel.php',

					'PAYMENTREQUEST_0_AMT' => $totaltva + $shipping,
					'PAYMENTREQUEST_0_CURRENCYCODE' => 'EUR',
					'PAYMENTREQUEST_0_SHIPPINGAMT' => $shipping,
					'PAYMENTREQUEST_0_ITEMAMT' => $totaltva
				);


				for($i = 0; $i<$nbProduits; $i++){

					?>

					<tr>

						<td><br/><?php echo $_SESSION['panier']['libelleProduit'][$i]; ?></td>
						<td><br/><?php echo $_SESSION['panier']['prixProduit'][$i];?></td>
						<td><br/><input name="q[]" value="<?php echo $_SESSION['panier']['qteProduit'][$i]; ?>" size="5"/></td>
						<td><br/><?php echo $_SESSION['panier']['tva']." %"; ?></td>
						<td><br/><a href="panier.php?action=suppression&l=<?php echo rawurlencode($_SESSION['panier']['libelleProduit'][$i]); ?>">X</a></td>

					</tr>
					<?php } ?>
					<tr>

						<td colspan="2"><br/>
							<p>Total : <?php echo $total." €"; ?></p><br/>
							<p>Total avec TVA : <?php echo $totaltva." €"; ?></p>
							<p>Calcul des frais de port : <?php echo $shipping." €"; ?></p>
							<?php if(isset($_SESSION['user_id'])){ ?><a href="includes/cash.php" rel="nofollow noopener noreferrer" target="_blank">Payer la commande a la livraison</a><?php }else{?><h4 style="color:red;">Vous devez être connecté pour payer votre commande. <a href="connect.php" rel="nofollow noopener noreferrer" target="_blank">Se connecter</a></h4><?php 


							} ?>
						</td>
					</tr>
					<tr>
						<td colspan="4">
							<input type="submit" value="rafraichir"/>
							<input type="hidden" name="action" value="refresh"/>
							<a href="?deletepanier=true" rel="nofollow noopener noreferrer" target="_blank">Supprimer le panier</a>
						</td>
					</tr>

					<?php
					////
                  if(isset($_SESSION['username'])){


			if($_GET['action']=='buy'){

				if(isset($_POST['submit'])){

					$commande_id = $_POST['commande_id'];
					$user_id = $_POST['user_id'];
					$produit = $_POST['produit'];
					$quantity = $_POST['quantity'];
					$final_price = $_POST['final_price'];
					
				if($commande_id&&$user_id&&$product&&$quantity&&$final_price){

						$commande_id =$_POST['commande_id'];

						$select = $db->query("SELECT user_id FROM users WHERE name='$user_id'");

						$s = $select->fetch(PDO::FETCH_OBJ);

						$select=$db->query("SELECT product FROM products");

						$s1=$select->fetch(PDO::FETCH_OBJ);

						$select=$db->query("SELECT quantiy FROM products_transactions");
                          $s1=$select->fetch(PDO::FETCH_OBJ);

                          $select=$db->query("SELECT final_price FROM products_transactions");
                          $s1=$select->fetch(PDO::FETCH_OBJ);
                          

						$insert = $db->query("INSERT INTO commandes (commande_id,user_id,product,quantity,final_price) VALUES('$commande_id','$user_id','$product','$quantity','$final_price')");
					}
				}
			}
		}

			/////
			}

		}

		?>
	</table>
</form>
<?php

require_once('includes/footer.php');

?>
0
jordane45 Messages postés 38289 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 novembre 2024 4 703
21 août 2017 à 18:10
Bonjour,


Déjà... on place le code de connexion à la bdd dans un fichier à part (comme pour tes header.php.. sidebar.php etc...)
Comme ça tu n'as pas à le réécrire dans chacune de tes pages ...juste à l'inclure via un require !
Donc :

<?php
// Fichier de connexion à la bdd : cnxbdd.php
$host = "localhost";
$dbName = "site_ecommerce";
$user = "roor";
$password =  "root";

try{
	$db = new PDO("mysql:host=$host;dbname=$dbName;charset=utf8", $user,$password);
	$db->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER); // les noms de champs seront en caractères minuscules
	$db->setAttribute(PDO::ATTR_ERRMODE , PDO::ERRMODE_EXCEPTION); // les erreurs lanceront des exceptions
}	catch(Exception $e){
 	echo " Erreur lors de la connexion à la bdd ! " .$e->getMessage();
  exit();
}

?>


Puis tu vas créer un fichier (une page) qui te servira à afficher ton message
<?php
 // fihcier pageconfirmation.php
 require_once('includes/header.php');
?>
  Merci d'avoir commandé chez nous. Nous allons vous livrer dans 24h
<?php
require_once('includes/footer.php');
?>



Ensuite... On évite d'utiliser les ->query(...
En PDO on préfère utiliser les requêtes préparées.
requêtes que l'on placera dans des blocs TRY/CATCH pour intercepter les éventuelles erreurs de requêtes.

On placera également le maximum de code PHP au début du fichier.. en dehors de tout html.
Ca sera le cas pour tout ce qui est lié aux requêtes d'ajout / suppression / modification .. bref... tout ce qui ne concerne pas de l'affichage à proprement parlé.

Je t'ai également fourni dans une de tes précédentes questions des FONCTIONS (que tu as sûrement placé dans ton fichier "functions_panier.php". Fonctions qui servent à ajouter un article, à en retirer etc...
Pourquoi alors ne pas y avoir mis le code pour le BUY ????
Donc ton code :
<?php
 function achter($commande_id,$user_id,$product,$quantity,$final_price){
   if($commande_id && $user_id && $product && $quantity && $final_price){
         $sql = "INSERT INTO commandes (commande_id,user_id,product,quantity,final_price) 
                                VALUES(:commande_id,:user_id,:product,:quantity, :final_price)";
         $datas = array(":commande_id"=>$commande_id 
                       ,":user_id"=>$user_id 
                       ,":product"=>$product 
                       ,":quantity"=>$quantity 
                       ,":final_price"=>$final_price 
                       );
         try{
           $prep = $db->prepare($sql);
           $result = $prep->execute($datas);
           if($result){
            // redirection vers la page de confirmation
             header("location : pageconfirmation.php";
             exit(); //toujours mettre un EXIT après une redirection
           }
         }catch(Exception $e){
           echo "<br>Erreur ! ".$e->getMessage();
           echo "<br>Requete : ".$sql;
           echo "<br>Datas : <br>";
           print_r($datas);
         }
		 }else{
      return array("Error"=>true , "Tous les champs ne sont pas remplis !");
     }
  }


Penses aussi à récupérer LORS DE LA CONNEXION DU USER sur ton site son user_id et le stocker dans une variable de session au lieu d aller le rechercher à chaque fois via une requête...

<?php
///////Affichage des erreurs PHP
error_reporting(E_ALL);
ini_set("display_errors", 1);

//démarrage des SESSIONS
session_start();

//connexion à la bdd
require_once "cnxbdd.php";

//Autres includes
require_once('includes/header.php');
require_once('includes/sidebar.php');
require_once('includes/functions_panier.php');


//Initialisation des différentes variables/constantes
$erreur = false;

//récupération PROPRE des variables AVANT de les utiliser :
$username = !empty($_SESSION['username']) ? $_SESSION['username'] : NULL;
$user_id  = !empty($_SESSION['user_id']) ? $_SESSION['user_id'] : NULL; // user_id récupéré via les variables de session. pense à l'ajouter lors de la connexion du user !

$action = (!empty($_POST['action']) ? $_POST['action'] : (!empty($_GET['action']) ? $_GET['action'] : null));
$commande_id = !empty($_POST['commande_id']) ? $_POST['commande_id'] : NULL;
$user_id = !empty($_POST['user_id']) ? $_POST['user_id'] : NULL;
$produit = !empty($_POST['produit']) ? $_POST['produit'] : NULL;
$quantity = !empty($_POST['quantity']) ? $_POST['quantity'] : NULL;
$final_price = !empty($_POST['final_price']) ? $_POST['final_price'] : NULL;
$commande_id = !empty($_POST['commande_id']) ? $_POST['commande_id'] : NULL;
//---------------------------------------------------//
//traitements des formulaires et autres actions
//--------------------------------------------------//

//lien de suppression du panier
if(isset($_GET['deletepanier']) && $_GET['deletepanier'] == true){
  supprimerPanier();
}

//traitement des "submit"
if($username && isset($_POST['submit'])){
 // TOUT CE QUI CONCERNE LA VARIABLE ACTION DOIT SE TROUVER DANS CE BOUT DE CODE ET PAS AILLEURS !!!
	switch($action){
		Case "ajout":
  		ajouterArticle($l,$q,$p);
		break;
		Case "suppression":
      supprimerArticle($l);
		break;
		Case "refresh":
     for($i = 0;$i<count($QteArticle);$i++){
   		modifierQTeArticle($_SESSION['panier']['slugProduit'][$i], round($QteArticle[$i]));
		}
		break;
    case "buy":
     achter($commande_id,$user_id,$product,$quantity,$final_price);
    break;
		Default:
     //action inconnue
		break;
	}
}

// .... puis le reste de ton code

 



NB : Je ne vais pas continuer à me répéter 50 fois .. il serait bien que tu tiennes compte des remarques que je t'ai déjà fait.
Il faudrait aussi que tu commence à comprendre le code que je te donne et que tu t'en inspire pour tes prochains... au lieu de greffer ça et là des bouts de code sans queue ni tête qui ne respectent pas la "méthode" que je suis en train de te donner !....

Sur ce..je te laisse retravailler ton code en t'inspirant de ce que je viens de te donner.
Ne reviens ici qu'après avoir apporté toutes les modifications à ton code actuel et en ciblant PRECISEMENT ton souci.
Visiblement (si on fait abstraction du "mauvais" code.. ta question aurait pu se résumer par : Comment faire une redirection ! )

0
Bonjour!
je pu cree les deux fichiers cnxbdd et pageconfirmation.php mais avec le fichier pageconfirmation.php j etais oblige de supprime la parti
require_once('includes/header.php');
puisque sa m affiche un erreur
0
et pour le reste du code du fichier panier.php j essai de faire comme vous avez demande et sa donne sa comme codes
<?php
///////Affichage des erreurs PHP
error_reporting(E_ALL);
ini_set("display_errors", 1);

//démarrage des SESSIONS
//////ici je enleve le code de (session)puiqu on affichie une erreur du genre la session est deja ouverte




//Autres includes
require_once('includes/header.php');
require_once('includes/sidebar.php');
require_once('includes/functions_panier.php');
//connexion à la bdd
require_once('includes/cnxbdd.php');

//Initialisation des différentes variables/constantes
$erreur = false;

//récupération PROPRE des variables AVANT de les utiliser :
$username = !empty($_SESSION['username']) ? $_SESSION['username'] : NULL;
$user_id  = !empty($_SESSION['user_id']) ? $_SESSION['user_id'] : NULL; 
// user_id récupéré via les variables de session. pense à l'ajouter lors de la connexion du user !

$action = (!empty($_POST['action']) ? $_POST['action'] : (!empty($_GET['action']) ? $_GET['action'] : null));
$commande_id = !empty($_POST['commande_id']) ? $_POST['commande_id'] : NULL;
$user_id = !empty($_POST['user_id']) ? $_POST['user_id'] : NULL;
$produit = !empty($_POST['produit']) ? $_POST['produit'] : NULL;
$quantity = !empty($_POST['quantity']) ? $_POST['quantity'] : NULL;
$final_price = !empty($_POST['final_price']) ? $_POST['final_price'] : NULL;
$commande_id = !empty($_POST['commande_id']) ? $_POST['commande_id'] : NULL;


//---------------------------------------------------//
//traitements des formulaires et autres actions
//--------------------------------------------------//

//lien de suppression du panier
if(isset($_GET['deletepanier']) && $_GET['deletepanier'] == true){
  supprimerPanier();
}



//le temps des tests
echo "<br>user_id : " . $user_id;
echo "<br>action : " . $action;
echo "<br><pre> Variables POST :<br>";
print_r($_POST);
echo "</pre>";
//---------------------------//


//traitement des "submit"
if($username && isset($_POST['submit'])){
 // TOUT CE QUI CONCERNE LA VARIABLE ACTION DOIT SE TROUVER DANS CE BOUT DE CODE ET PAS AILLEURS !!!
	switch($action){
		Case "ajoute":
  		ajouterArticle($l,$q,$p);
		break;
		Case "suppression":
      supprimerArticle($l);
		break;
		Case "refresh":
     for($i = 0;$i<count($QteArticle);$i++){
   		modifierQTeArticle($_SESSION['panier']['slugProduit'][$i], round($QteArticle[$i]));
		}
		break;
    case "buy":
     achter($commande_id,$user_id,$product,$quantity,$final_price);
    break;
		Default:
     //action inconnue
		break;
	}
   //le temps des tests
    echo "SQL : " .$sql;
    echo "<br> DATAS :<br><pre>";
    print_r($datas);
    echo "</pre>";
    //---------------------------//

}

// .... puis le reste de mon code///


?>

<form method="post" action="">
	<table width="400">
		<tr>
			<td colspan="4">Votre panier</td>
		</tr>
		<tr>
			<td>Libellé produit</td>
			<td>Prix unitaire</td>
			<td>Quantité</td>
			<td>TVA</td>
			<td>Action</td>
		</tr>
		<?php

			if(isset($_GET['deletepanier']) && $_GET['deletepanier'] == true){

				supprimerPanier();

			}

			if(creationPanier()){

			$nbProduits = count($_SESSION['panier']['libelleProduit']);

			if($nbProduits <= 0){

				echo'<br/><p style="font-size:20px; color:Red;">Oops, panier vide !</p>';

			}else{

				$total = MontantGlobal();
				$totaltva = MontantGlobalTVA();
				$shipping = CalculFraisPorts();
			

				$params = array(
					'RETURNURL' => 'http://localhost/Site_ecommerce/cash.php',
					'CANCELURL' => 'http://localhost/Site e_commerce/cancel.php',

					'PAYMENTREQUEST_0_AMT' => $totaltva + $shipping,
					'PAYMENTREQUEST_0_CURRENCYCODE' => 'EUR',
					'PAYMENTREQUEST_0_SHIPPINGAMT' => $shipping,
					'PAYMENTREQUEST_0_ITEMAMT' => $totaltva
				);


				for($i = 0; $i<$nbProduits; $i++){

					?>

					<tr>

						<td><br/><?php echo $_SESSION['panier']['libelleProduit'][$i]; ?></td>
						<td><br/><?php echo $_SESSION['panier']['prixProduit'][$i];?></td>
						<td><br/><input name="q[]" value="<?php echo $_SESSION['panier']['qteProduit'][$i]; ?>" size="5"/></td>
						<td><br/><?php echo $_SESSION['panier']['tva']." %"; ?></td>
						<td><br/><a href="panier.php?action=suppression&l=<?php echo rawurlencode($_SESSION['panier']['libelleProduit'][$i]); ?>">X</a></td>

					</tr>
					<?php } ?>
					<tr>

						<td colspan="2"><br/>
							<p>Total : <?php echo $total." €"; ?></p><br/>
							<p>Total avec TVA : <?php echo $totaltva." €"; ?></p>
							<p>Calcul des frais de port : <?php echo $shipping." €"; ?></p>
							<?php if(isset($_SESSION['user_id'])){ ?><a href="includes/pageconfirmation.php" rel="nofollow noopener noreferrer" target="_blank">Payer la commande a la livraison</a><?php }else{?><h4 style="color:red;">Vous devez être connecté pour payer votre commande. <a href="connect.php" rel="nofollow noopener noreferrer" target="_blank">Se connecter</a></h4><?php 


							} ?>
						</td>
					</tr>
					<tr>
						<td colspan="4">
							<input type="submit" value="rafraichir"/>
							<input type="hidden" name="action" value="refresh"/>
							<a href="?deletepanier=true" rel="nofollow noopener noreferrer" target="_blank">Supprimer le panier</a>
						</td>
					</tr>

					<?php
					////
                  if(isset($_SESSION['username'])){


			if($_GET['action']=='buy'){

				if(isset($_POST['submit'])){

					$commande_id = $_POST['commande_id'];
					$user_id = $_POST['user_id'];
					$produit = $_POST['produit'];
					$quantity = $_POST['quantity'];
					$final_price = $_POST['final_price'];
					
				if($commande_id&&$user_id&&$product&&$quantity&&$final_price){

						$commande_id =$_POST['commande_id'];

						$select = $db->prepare("SELECT user_id FROM users WHERE name='$user_id'");

						$s = $select->fetch(PDO::FETCH_OBJ);

						$select=$db->prepare("SELECT product FROM products");

						$s1=$select->fetch(PDO::FETCH_OBJ);

						$select=$db->prepare("SELECT quantiy FROM products_transactions");
                          $s1=$select->fetch(PDO::FETCH_OBJ);

                          $select=$db->prepare("SELECT final_price FROM products_transactions");
                          $s1=$select->fetch(PDO::FETCH_OBJ);
                          

						$insert = $db->query("INSERT INTO commandes (commande_id,user_id,product,quantity,final_price) VALUES('$commande_id','$user_id','$product','$quantity','$final_price')");
					}
				}
			}
		}

		
			}

		}

		?>
	</table>
</form>
<?php

require_once('includes/footer.php');

?>

mais avec tout ces modification je remarque le code function bien mais il ya deux petit souci au niveau de la page panier, le boutton rafreshir et ajoute au panier n es fonction plus bien.

et pour revenir a mon soucis j aimerai que lorsque l utilsateur clique sur le lien (Payer la commande a la livraison) qu on puis lui affiche une page pageconfirmation.php avec les details sur son achat et que moi de mon cote en tant que admin que je puis etre en mesure de voir sa dana la base de bonne precisement dant la table commandes dont celui lui sera remplir grace a ce trois table (users,products,products_transations) voila un peu leur struture
#users(id,username,email,password,phone,address,area)
#products(ID,title,slug,description,price,category,weight,shipping,tva,final_price,stock)
#products_transactions(id,product,quantity)
0
et pour la parti function acheter , je mis sa dans le code du fichier function_panier.php c est qui donne ca
<?php

function creationPanier(){

   try{

      $db = new PDO('mysql:host=localhost;dbname=site_ecommerce', 'root','root');
      $db->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER); // les noms de champs seront en caractères minuscules
      $db->setAttribute(PDO::ATTR_ERRMODE , PDO::ERRMODE_EXCEPTION); // les erreurs lanceront des exceptions
      $db->exec('SET NAMES utf8');           
   }

   catch(Exception $e){

      die('Une erreur est survenue');

   }

   if (!isset($_SESSION['panier'])){
      $_SESSION['panier']=array();
      $_SESSION['panier']['libelleProduit'] = array();
      $_SESSION['panier']['slugProduit'] = array();
      $_SESSION['panier']['qteProduit'] = array();
      $_SESSION['panier']['prixProduit'] = array();
      $_SESSION['panier']['verrou'] = false;
      $select = $db->query("SELECT tva FROM products");
      $data = $select->fetch(PDO::FETCH_OBJ);
      $_SESSION['panier']['tva'] = $data->tva;
   }
   return true;
}

function ajouterArticle($slugProduit,$qteProduit,$prixProduit){

   try{

      $db = new PDO('mysql:host=localhost;dbname=site_ecommerce', 'root','root');
      $db->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER); // les noms de champs seront en caractères minuscules
      $db->setAttribute(PDO::ATTR_ERRMODE , PDO::ERRMODE_EXCEPTION); // les erreurs lanceront des exceptions
      $db->exec('SET NAMES utf8');            
   }

   catch(Exception $e){

      die('Une erreur est survenue');

   }

   if (creationPanier() && !isVerrouille())
   {

      $s = $db->query("SELECT title FROM products WHERE slug = '$slugProduit'");
      $r = $s->fetch(PDO::FETCH_OBJ);
      $libelleProduit = $r->title;

      $positionProduit = array_search($slugProduit,  $_SESSION['panier']['slugProduit']);

      if ($positionProduit !== false)
      {
         $_SESSION['panier']['qteProduit'][$positionProduit] += $qteProduit ;
      }
      else
      {  
         array_push( $_SESSION['panier']['libelleProduit'],$libelleProduit);
         array_push( $_SESSION['panier']['slugProduit'],$slugProduit);
         array_push( $_SESSION['panier']['qteProduit'],$qteProduit);
         array_push( $_SESSION['panier']['prixProduit'],$prixProduit);
      }
   }
   else{
   echo "Un problème est survenu veuillez contacter l'administrateur du site.";
   }
}

function modifierQTeArticle($slugProduit,$qteProduit){
   //Si le panier éxiste
   if (creationPanier() && !isVerrouille())
   {
      //Si la quantité est positive on modifie sinon on supprime l'article
      if ($qteProduit > 0)
      {
         //Recharche du produit dans le panier
         $positionProduit = array_search($slugProduit,  $_SESSION['panier']['slugProduit']);

         if ($positionProduit !== false)
         {
            $_SESSION['panier']['qteProduit'][$positionProduit] = $qteProduit ;
         }
      }
      else{
      supprimerArticle($slugProduit);
      }
   }
   else{
   echo "Un problème est survenu veuillez contacter l'administrateur du site.";
   }
}

function supprimerArticle($slugProduit){

   if (creationPanier() && !isVerrouille())
   {

      $tmp=array();
      $tmp['libelleProduit'] = array();
      $tmp['slugProduit'] = array();
      $tmp['qteProduit'] = array();
      $tmp['prixProduit'] = array();
      $tmp['verrou'] = $_SESSION['panier']['verrou'];
      $tmp['tva'] = $_SESSION['panier']['tva'];

      for($i = 0; $i < count($_SESSION['panier']['slugProduit']); $i++)
      {
         if ($_SESSION['panier']['slugProduit'][$i] !== $slugProduit)
         {
            array_push( $tmp['libelleProduit'],$_SESSION['panier']['libelleProduit'][$i]);
            array_push( $tmp['slugProduit'],$_SESSION['panier']['slugProduit'][$i]);
            array_push( $tmp['qteProduit'],$_SESSION['panier']['qteProduit'][$i]);
            array_push( $tmp['prixProduit'],$_SESSION['panier']['prixProduit'][$i]);
         }

      }

      $_SESSION['panier'] =  $tmp;

      unset($tmp);
   }
   else{
   echo "Un problème est survenu veuillez contacter l'administrateur du site.";
   }
}

function MontantGlobal(){
   $total=0;
   for($i = 0; $i < count($_SESSION['panier']['slugProduit']); $i++)
   {
      $total += $_SESSION['panier']['qteProduit'][$i] * $_SESSION['panier']['prixProduit'][$i];
   }
   return $total;
}

function MontantGlobalTva(){

   $total=0;
   for($i = 0; $i < count($_SESSION['panier']['slugProduit']); $i++)
   {
      $total += $_SESSION['panier']['qteProduit'][$i] * $_SESSION['panier']['prixProduit'][$i];
   }
   return $total + $total*$_SESSION['panier']['tva']/100;
}

function supprimerPanier(){
   unset($_SESSION['panier']);
}

function isVerrouille(){
   if (isset($_SESSION['panier']) && $_SESSION['panier']['verrou']){
   return true;
   }else{
   return false;
   }  
}

function compterArticles()
{
   if (isset($_SESSION['panier'])){
   return count($_SESSION['panier']['slugProduit']);
   }else{
   return 0;
   }

}

function CalculFraisPorts(){

   try{

      $db = new PDO('mysql:host=localhost;dbname=site_ecommerce', 'root','root');
      $db->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER); // les noms de champs seront en caractères minuscules
      $db->setAttribute(PDO::ATTR_ERRMODE , PDO::ERRMODE_EXCEPTION); // les erreurs lanceront des exceptions
      $db->exec('SET NAMES utf8');            
   }

   catch(Exception $e){

      die('Une erreur est survenue');

   }

   $weight_product = 0;
   $shipping = 0;

   for($i = 0; $i < compterArticles(); $i++){

      for($j = 0; $j < $_SESSION['panier']['qteProduit'][$i]; $j++){

         $slug = addslashes($_SESSION['panier']['slugProduit'][$i]);
         $select = $db->query("SELECT weight FROM products WHERE slug='$slug'");
         $result = $select->fetch(PDO::FETCH_OBJ);
         $weight = $result->weight;

         $weight_product += $weight;

      }

   }

   $select2 = $db->query("SELECT * FROM weights WHERE name <= '$weight_product' ORDER BY price DESC");
   
   $result2 = $select2->fetch(PDO::FETCH_OBJ);

   $shipping = $result2->price;   

   return $shipping;

///////
   function achter($commande_id,$user_id,$product,$quantity,$final_price){
   if($commande_id && $user_id && $product && $quantity && $final_price){
         $sql = "INSERT INTO commandes (commande_id,user_id,product,quantity,final_price) 
                                VALUES(:commande_id,:user_id,:product,:quantity, :final_price)";
         $datas = array(":commande_id"=>$commande_id 
                       ,":user_id"=>$user_id 
                       ,":product"=>$product 
                       ,":quantity"=>$quantity 
                       ,":final_price"=>$final_price 
                       );
         try{
           $prep = $db->prepare($sql);
           $result = $prep->execute($datas);
           if($result){
            // redirection vers la page de confirmation
             header("location : pageconfirmation.php");
             exit(); //toujours mettre un EXIT après une redirection
           }
         }catch(Exception $e){
           echo "<br>Erreur ! ".$e->getMessage();
           echo "<br>Requete : ".$sql;
           echo "<br>Datas : <br>";
           print_r($datas);
         }
       }else{
      return array("Error"=>true , "Tous les champs ne sont pas remplis !");
     }
  }


}

?>
0
jordane45 Messages postés 38289 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 novembre 2024 4 703
22 août 2017 à 12:18
Tu n'écoutes rien de ce que je te dis ...
Dans le code que tu nous montres tu nous as de nouveau coller les lignes de connexion à la BDD dans toutes tes fonctions .............. alors qu'il suffit de faire appel au fichier cnxbdd.php !!!

Tu continues à utiliser du pdo->query au lieu des requêtes préparées

Certaines de tes requêtes ne sont toujours pas dans des blocs try/catch

Tu récupère les variables de session dans tes Fonctions.... alors qu'il vaut mieux envoyer les infos via les paramètres de tes fonctions


Brerf... du grand n'importe quoi.

Reviens nous voir quand tu auras compris et corrigé ... en attendant je ne répondrai plus à cette discussion.
0
excuse moi je fais l erreur voila le lefichie apret modification ici en bas
<?php

//connexion à la bdd
require_once('includes/cnxbdd.php');


function creationPanier(){

   
   if (!isset($_SESSION['panier'])){
      $_SESSION['panier']=array();
      $_SESSION['panier']['libelleProduit'] = array();
      $_SESSION['panier']['slugProduit'] = array();
      $_SESSION['panier']['qteProduit'] = array();
      $_SESSION['panier']['prixProduit'] = array();
      $_SESSION['panier']['verrou'] = false;
      $select = $db->query("SELECT tva FROM products");
      $data = $select->fetch(PDO::FETCH_OBJ);
      $_SESSION['panier']['tva'] = $data->tva;
   }
   return true;
}

function ajouterArticle($slugProduit,$qteProduit,$prixProduit){

  

   if (creationPanier() && !isVerrouille())
   {

      $s = $db->prepare("SELECT title FROM products WHERE slug = '$slugProduit'");
      $r = $s->fetch(PDO::FETCH_OBJ);
      $libelleProduit = $r->title;

      $positionProduit = array_search($slugProduit,  $_SESSION['panier']['slugProduit']);

      if ($positionProduit !== false)
      {
         $_SESSION['panier']['qteProduit'][$positionProduit] += $qteProduit ;
      }
      else
      {  
         array_push( $_SESSION['panier']['libelleProduit'],$libelleProduit);
         array_push( $_SESSION['panier']['slugProduit'],$slugProduit);
         array_push( $_SESSION['panier']['qteProduit'],$qteProduit);
         array_push( $_SESSION['panier']['prixProduit'],$prixProduit);
      }
   }
   else{
   echo "Un problème est survenu veuillez contacter l'administrateur du site.";
   }
}

function modifierQTeArticle($slugProduit,$qteProduit){
   //Si le panier éxiste
   if (creationPanier() && !isVerrouille())
   {
      //Si la quantité est positive on modifie sinon on supprime l'article
      if ($qteProduit > 0)
      {
         //Recharche du produit dans le panier
         $positionProduit = array_search($slugProduit,  $_SESSION['panier']['slugProduit']);

         if ($positionProduit !== false)
         {
            $_SESSION['panier']['qteProduit'][$positionProduit] = $qteProduit ;
         }
      }
      else{
      supprimerArticle($slugProduit);
      }
   }
   else{
   echo "Un problème est survenu veuillez contacter l'administrateur du site.";
   }
}

function supprimerArticle($slugProduit){

   if (creationPanier() && !isVerrouille())
   {

      $tmp=array();
      $tmp['libelleProduit'] = array();
      $tmp['slugProduit'] = array();
      $tmp['qteProduit'] = array();
      $tmp['prixProduit'] = array();
      $tmp['verrou'] = $_SESSION['panier']['verrou'];
      $tmp['tva'] = $_SESSION['panier']['tva'];

      for($i = 0; $i < count($_SESSION['panier']['slugProduit']); $i++)
      {
         if ($_SESSION['panier']['slugProduit'][$i] !== $slugProduit)
         {
            array_push( $tmp['libelleProduit'],$_SESSION['panier']['libelleProduit'][$i]);
            array_push( $tmp['slugProduit'],$_SESSION['panier']['slugProduit'][$i]);
            array_push( $tmp['qteProduit'],$_SESSION['panier']['qteProduit'][$i]);
            array_push( $tmp['prixProduit'],$_SESSION['panier']['prixProduit'][$i]);
         }

      }

      $_SESSION['panier'] =  $tmp;

      unset($tmp);
   }
   else{
   echo "Un problème est survenu veuillez contacter l'administrateur du site.";
   }
}

function MontantGlobal(){
   $total=0;
   for($i = 0; $i < count($_SESSION['panier']['slugProduit']); $i++)
   {
      $total += $_SESSION['panier']['qteProduit'][$i] * $_SESSION['panier']['prixProduit'][$i];
   }
   return $total;
}

function MontantGlobalTva(){

   $total=0;
   for($i = 0; $i < count($_SESSION['panier']['slugProduit']); $i++)
   {
      $total += $_SESSION['panier']['qteProduit'][$i] * $_SESSION['panier']['prixProduit'][$i];
   }
   return $total + $total*$_SESSION['panier']['tva']/100;
}

function supprimerPanier(){
   unset($_SESSION['panier']);
}

function isVerrouille(){
   if (isset($_SESSION['panier']) && $_SESSION['panier']['verrou']){
   return true;
   }else{
   return false;
   }  
}

function compterArticles()
{
   if (isset($_SESSION['panier'])){
   return count($_SESSION['panier']['slugProduit']);
   }else{
   return 0;
   }

}

function CalculFraisPorts(){

   

   $weight_product = 0;
   $shipping = 0;

   for($i = 0; $i < compterArticles(); $i++){

      for($j = 0; $j < $_SESSION['panier']['qteProduit'][$i]; $j++){

         $slug = addslashes($_SESSION['panier']['slugProduit'][$i]);
         $select = $db->prepare("SELECT weight FROM products WHERE slug='$slug'");
         $result = $select->fetch(PDO::FETCH_OBJ);
         $weight = $result->weight;

         $weight_product += $weight;

      }

   }

   $select2 = $db->prepare("SELECT * FROM weights WHERE name <= '$weight_product' ORDER BY price DESC");
   
   $result2 = $select2->fetch(PDO::FETCH_OBJ);

   $shipping = $result2->price;   

   return $shipping;

///////
   function achter($commande_id,$user_id,$product,$quantity,$final_price){
   if($commande_id && $user_id && $product && $quantity && $final_price){
         $sql = "INSERT INTO commandes (commande_id,user_id,product,quantity,final_price) 
                                VALUES(:commande_id,:user_id,:product,:quantity, :final_price)";
         $datas = array(":commande_id"=>$commande_id 
                       ,":user_id"=>$user_id 
                       ,":product"=>$product 
                       ,":quantity"=>$quantity 
                       ,":final_price"=>$final_price 
                       );
         try{
           $prep = $db->prepare($sql);
           $result = $prep->execute($datas);
           if($result){
            // redirection vers la page de confirmation
             header("location : pageconfirmation.php");
             exit(); //toujours mettre un EXIT après une redirection
           }
         }catch(Exception $e){
           echo "<br>Erreur ! ".$e->getMessage();
           echo "<br>Requete : ".$sql;
           echo "<br>Datas : <br>";
           print_r($datas);
         }
       }else{
      return array("Error"=>true , "Tous les champs ne sont pas remplis !");
     }
  }


}

?>
0
et pour le reste du code du fichier panier.php j essai de faire comme vous avez demande et sa donne sa comme codes

<?php
///////Affichage des erreurs PHP
error_reporting(E_ALL);
ini_set("display_errors", 1);

//démarrage des SESSIONS




//Autres includes
require_once('includes/header.php');
require_once('includes/sidebar.php');
require_once('includes/functions_panier.php');
//connexion à la bdd
require_once('includes/cnxbdd.php');

//Initialisation des différentes variables/constantes
$erreur = false;

//récupération PROPRE des variables AVANT de les utiliser :
$username = !empty($_SESSION['username']) ? $_SESSION['username'] : NULL;
$user_id  = !empty($_SESSION['user_id']) ? $_SESSION['user_id'] : NULL; 
// user_id récupéré via les variables de session. pense à l'ajouter lors de la connexion du user !

$action = (!empty($_POST['action']) ? $_POST['action'] : (!empty($_GET['action']) ? $_GET['action'] : null));
$commande_id = !empty($_POST['commande_id']) ? $_POST['commande_id'] : NULL;
$user_id = !empty($_POST['user_id']) ? $_POST['user_id'] : NULL;
$produit = !empty($_POST['produit']) ? $_POST['produit'] : NULL;
$quantity = !empty($_POST['quantity']) ? $_POST['quantity'] : NULL;
$final_price = !empty($_POST['final_price']) ? $_POST['final_price'] : NULL;
$commande_id = !empty($_POST['commande_id']) ? $_POST['commande_id'] : NULL;


//---------------------------------------------------//
//traitements des formulaires et autres actions
//--------------------------------------------------//

//lien de suppression du panier
if(isset($_GET['deletepanier']) && $_GET['deletepanier'] == true){
  supprimerPanier();
}



//le temps des tests
echo "<br>user_id : " . $user_id;
echo "<br>action : " . $action;
echo "<br><pre> Variables POST :<br>";
print_r($_POST);
echo "</pre>";
//---------------------------//


//traitement des "submit"
if($username && isset($_POST['submit'])){
 // TOUT CE QUI CONCERNE LA VARIABLE ACTION DOIT SE TROUVER DANS CE BOUT DE CODE ET PAS AILLEURS !!!
	switch($action){
		Case "ajoute":
  		ajouterArticle($l,$q,$p);
		break;
		Case "suppression":
      supprimerArticle($l);
		break;
		Case "refresh":
     for($i = 0;$i<count($QteArticle);$i++){
   		modifierQTeArticle($_SESSION['panier']['slugProduit'][$i], round($QteArticle[$i]));
		}
		break;
    case "buy":
     achter($commande_id,$user_id,$product,$quantity,$final_price);
    break;
		Default:
     //action inconnue
		break;
	}
   //le temps des tests
    echo "SQL : " .$sql;
    echo "<br> DATAS :<br><pre>";
    print_r($datas);
    echo "</pre>";
    //---------------------------//

}

// .... puis le reste de mon code///


?>

<form method="post" action="">
	<table width="400">
		<tr>
			<td colspan="4">Votre panier</td>
		</tr>
		<tr>
			<td>Libellé produit</td>
			<td>Prix unitaire</td>
			<td>Quantité</td>
			<td>TVA</td>
			<td>Action</td>
		</tr>
		<?php

			if(isset($_GET['deletepanier']) && $_GET['deletepanier'] == true){

				supprimerPanier();

			}

			if(creationPanier()){

			$nbProduits = count($_SESSION['panier']['libelleProduit']);

			if($nbProduits <= 0){

				echo'<br/><p style="font-size:20px; color:Red;">Oops, panier vide !</p>';

			}else{

				$total = MontantGlobal();
				$totaltva = MontantGlobalTVA();
				$shipping = CalculFraisPorts();
			

				$params = array(
					'RETURNURL' => 'http://localhost/Site_ecommerce/cash.php',
					'CANCELURL' => 'http://localhost/Site e_commerce/cancel.php',

					'PAYMENTREQUEST_0_AMT' => $totaltva + $shipping,
					'PAYMENTREQUEST_0_CURRENCYCODE' => 'EUR',
					'PAYMENTREQUEST_0_SHIPPINGAMT' => $shipping,
					'PAYMENTREQUEST_0_ITEMAMT' => $totaltva
				);


				for($i = 0; $i<$nbProduits; $i++){

					?>

					<tr>

						<td><br/><?php echo $_SESSION['panier']['libelleProduit'][$i]; ?></td>
						<td><br/><?php echo $_SESSION['panier']['prixProduit'][$i];?></td>
						<td><br/><input name="q[]" value="<?php echo $_SESSION['panier']['qteProduit'][$i]; ?>" size="5"/></td>
						<td><br/><?php echo $_SESSION['panier']['tva']." %"; ?></td>
						<td><br/><a href="panier.php?action=suppression&l=<?php echo rawurlencode($_SESSION['panier']['libelleProduit'][$i]); ?>">X</a></td>

					</tr>
					<?php } ?>
					<tr>

						<td colspan="2"><br/>
							<p>Total : <?php echo $total." €"; ?></p><br/>
							<p>Total avec TVA : <?php echo $totaltva." €"; ?></p>
							<p>Calcul des frais de port : <?php echo $shipping." €"; ?></p>
							<?php if(isset($_SESSION['user_id'])){ ?><a href="includes/pageconfirmation.php" rel="nofollow noopener noreferrer" target="_blank">Payer la commande a la livraison</a><?php }else{?><h4 style="color:red;">Vous devez être connecté pour payer votre commande. <a href="connect.php" rel="nofollow noopener noreferrer" target="_blank">Se connecter</a></h4><?php 


							} ?>
						</td>
					</tr>
					<tr>
						<td colspan="4">
							<input type="submit" value="rafraichir"/>
							<input type="hidden" name="action" value="refresh"/>
							<a href="?deletepanier=true" rel="nofollow noopener noreferrer" target="_blank">Supprimer le panier</a>
						</td>
					</tr>

					<?php
					////
                  if(isset($_SESSION['username'])){


			if($_GET['action']=='buy'){

				if(isset($_POST['submit'])){

					$commande_id = $_POST['commande_id'];
					$user_id = $_POST['user_id'];
					$produit = $_POST['produit'];
					$quantity = $_POST['quantity'];
					$final_price = $_POST['final_price'];
					
				if($commande_id&&$user_id&&$product&&$quantity&&$final_price){

						$commande_id =$_POST['commande_id'];

						$select = $db->prepare("SELECT user_id FROM users WHERE name='$user_id'");

						$s = $select->fetch(PDO::FETCH_OBJ);

						$select=$db->prepare("SELECT product FROM products");

						$s1=$select->fetch(PDO::FETCH_OBJ);

						$select=$db->prepare("SELECT quantiy FROM products_transactions");
                          $s1=$select->fetch(PDO::FETCH_OBJ);

                          $select=$db->prepare("SELECT final_price FROM products_transactions");
                          $s1=$select->fetch(PDO::FETCH_OBJ);
                          

						$insert = $db->prepare("INSERT INTO commandes (commande_id,user_id,product,quantity,final_price) VALUES('$commande_id','$user_id','$product','$quantity','$final_price')");

						 try{
           $prep = $db->prepare($sql);
           $result = $prep->execute($datas);
           if($result){
            
             header("location : pageconfirmation.php");
             exit(); 
           }
         }catch(Exception $e){
           echo "<br>Erreur ! ".$e->getMessage();
           echo "<br>Requete : ".$sql;
           echo "<br>Datas : <br>";
           print_r($datas);
         }
					}
				}
			}
		}

		
			}

		}

		?>
	</table>
</form>
<?php

require_once('includes/footer.php');

?>
0
mais avec tout ces modification je remarque le code function bien mais il ya deux petit souci au niveau de la page panier, le boutton rafreshir et ajoute au panier n es fonction plus bien.

et pour revenir a mon soucis j aimerai que lorsque l utilsateur clique sur le lien (Payer la commande a la livraison) qu on puis lui affiche une page pageconfirmation.php avec les details sur son achat et que moi de mon cote en tant que admin que je puis etre en mesure de voir sa dana la base de bonne precisement dant la table commandes dont celui lui sera remplir grace a ce trois table (users,products,products_transations) voila un peu leur struture
#users(id,username,email,password,phone,address,area)
#products(ID,title,slug,description,price,category,weight,shipping,tva,final_price,stock)
#products_transactions(id,product,quantity)
0
jordane45 Messages postés 38289 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 novembre 2024 4 703 > hm0123
22 août 2017 à 14:03
- Il manque toujours les blocs try/catch autour de certaines requêtes
- Il faut ajouter la ligne de code suivante au début CHAQUE fonction
glob $db;
0