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 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 - 24 août 2017 à 10:20
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 - 24 août 2017 à 10:20
A voir également:
- Récupérer les données de plusieurs tables à partir d'une id
- Comment récupérer les messages supprimés sur whatsapp - Guide
- Recuperer video youtube - Guide
- Impossible de récupérer mon compte gmail - Guide
- Comment faire une recherche à partir d'une photo - Guide
- Comment récupérer un compte facebook piraté - Guide
7 réponses
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
17 août 2017 à 02:20
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
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
1) voila une peu le structure de ma BDD
TABLES AVEC LEURS ATTRIBUTS
voila la table la ou j aimerai recupere le donnees sur du client ou user(cash)
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
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>
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
17 août 2017 à 10:44
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...
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...
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>
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
17 août 2017 à 13:44
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....
Vu ton erreur... avant de continuer commence par aprendre comment fonctionne php....
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
>
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
Modifié le 18 août 2017 à 00:18
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 :
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); } }
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
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)
et ici en bas ce le codes de la page cashlivre.php
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/>'; ?>
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
18 août 2017 à 00:03
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
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....
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....
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
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
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
>
hm0123
18 août 2017 à 00:24
18 août 2017 à 00:24
Erreur de copier/coller
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
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)
Tu peux également ajouter un peu de debug ... en affichant le contenu de la varirable $_POST pour voir ce qu'elle contient.....
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.....
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...
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...
<?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'); ?>
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
21 août 2017 à 18:10
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 :
Puis tu vas créer un fichier (une page) qui te servira à afficher ton message
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 :
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...
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 ! )
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 ! )
et pour le reste du code du fichier panier.php j essai de faire comme vous avez demande et sa donne sa comme codes
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)
<?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)
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 !"); } } } ?>
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
22 août 2017 à 12:18
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.
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.
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 !"); } } } ?>
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'); ?>
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)
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)
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
>
hm0123
22 août 2017 à 14:03
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
- Il faut ajouter la ligne de code suivante au début CHAQUE fonction
glob $db;