Mysql jointure
Résolu
Programming_018
Messages postés
108
Date d'inscription
Statut
Membre
Dernière intervention
-
Programming_018 Messages postés 108 Date d'inscription Statut Membre Dernière intervention -
Programming_018 Messages postés 108 Date d'inscription Statut Membre Dernière intervention -
Bonjour je voudrais vous posez une question peut-être bête mais qui me bloque vraiment.
Je programme du php dans le logiciel sublimetext3 et comme hébergeur je me sert du logiciel wamp.
Voilà ce qui se passe : Je voudrais faire une jointure entre 3 tables : clients, articles, panier
Pour que si jamais le clients clique à nouveau sur le bouton ajouter au panier et que l'article existe déjà dans son panier et bien que cela additionne juste 1 dans la colonne quantité.
Pour cela voici le script que j'ai effectué :
Je tiens à préciser que tout fonctionne sauf l'update dans le panier voici ce que cela me sort comme erreur.
Notice: Trying to get property 'rowCount' of non-object in C:\wamp64\www\chemin\chemin\article.php on line 63
Mais par contre même avec cette erreur cela passe dans la fonction sinon de l'update se qui insère l'article comme ci c'était un nouveau. Je pense que j'ai un problème dans mes jointures.
Sachant que la ligne 63 = if($articlepanierexist->rowCount == 1){
Je programme du php dans le logiciel sublimetext3 et comme hébergeur je me sert du logiciel wamp.
Voilà ce qui se passe : Je voudrais faire une jointure entre 3 tables : clients, articles, panier
Pour que si jamais le clients clique à nouveau sur le bouton ajouter au panier et que l'article existe déjà dans son panier et bien que cela additionne juste 1 dans la colonne quantité.
Pour cela voici le script que j'ai effectué :
<?php if(isset($_GET['id']) AND !empty($_GET['id'])){ $get_id = htmlspecialchars($_GET['id']); $article = $bdd->prepare('SELECT * FROM article WHERE id = ?'); $article->execute(array($get_id)); if($article->rowCount() == 1){ $article = $article->fetch(); $id_article = $article['id']; $titre = $article['titre']; $reference = $article['reference']; $contenu = $article['contenu']; $prixht = $article['prixht']; $promotion = $article['promotion']; $tva = $article['tva']; $quantite = $article['quantite']; $categorie = $article['categorie']; }else{ die('Cet article n\'existe pas !'); } if($_SESSION['email']){ $clients = $bdd->prepare('SELECT * FROM clients WHERE email = ?'); $clients->execute(array($_SESSION["email"])); if($clients->rowCount() == 1){ $clients = $clients->fetch(); $email = $clients['email']; } }else{ header('Location: ../../'); } if(isset($_GET['action']) AND !empty($_GET['action'])){ $articlepanierexist = $bdd->prepare("SELECT * FROM clients,article,panier WHERE clients.email = panier.email and panier.id_article = article.id and panier.email = ?"); $articlepanierexist->execute(array($_SESSION["email"]); $articlepanierexist = $articlepanierexist->fetch(); $id = $articlepanierexist["id"]; $quantite = $articlepanierexist['quantite']; if($articlepanierexist->rowCount == 1){ $maj = $bdd->prepare("UPDATE panier SET quantite = ? WHERE id = ?"); $maj->execute(array($quantite,$id)); }else{ $insertmbr = $bdd->prepare("INSERT INTO panier(id_article,email,article,quantite,datePanierAjouter) VALUES (?, ?, ?, ?, NOW())"); $insertmbr->execute(array($id_article,$email,$titre,1)); } } } ?>
Je tiens à préciser que tout fonctionne sauf l'update dans le panier voici ce que cela me sort comme erreur.
Notice: Trying to get property 'rowCount' of non-object in C:\wamp64\www\chemin\chemin\article.php on line 63
Mais par contre même avec cette erreur cela passe dans la fonction sinon de l'update se qui insère l'article comme ci c'était un nouveau. Je pense que j'ai un problème dans mes jointures.
Sachant que la ligne 63 = if($articlepanierexist->rowCount == 1){
EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici : ICI Merci d'y penser dans tes prochains messages. |
A voir également:
- Mysql jointure
- Mysql community server - Télécharger - Bases de données
- Mysql gratuit ou payant - Forum MySQL
- Could not connect to mysql! please check your database settings! - Forum Redhat
- Mysql error 1 ✓ - Forum Réseaux sociaux
- Sql jointure - Forum Bases de données
1 réponse
Bonjour,
1 - Merci de poster ton code CORRECTEMENT un indiquant le LANGAGE dans les balises de code. Cela permet d'avoir la coloration syntaxique ainsi que l'indentation.
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code
2 - Si ta question concernait réélement un souci de JOINTURE avec ta bdd mysql... il aurait fallut poster ta question dans le forum Mysql...
3 - Au final tu as posté au bon endroit.. car ce n'est pas un souci de jointure.
Déjà... ROWCOUNT ne s'utilise PAS sur des requêtes SELECT (comme indiqué dans la documentation officielle de PHP pour le PDO )
Vu que tu utilises PDO.. il faut correctement détecter les éventuelles erreurs dans les requêtes SQL.
Pour cela, il faut activer l'affichage des erreurs ET placer CHAQUE requête dans des blocs try/catch.
Applique ce qui indiqué ici : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Je t'invite également à lire et à appliquer TOUT ce qui se trouve là : https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
4 - la fonction ROWCOUNT, quoi qu'il en soit s'utiliser sur un "objet" de requête... pas sur l'array issu d'un fetch...
Bref... remplace ce bout de code
par
1 - Merci de poster ton code CORRECTEMENT un indiquant le LANGAGE dans les balises de code. Cela permet d'avoir la coloration syntaxique ainsi que l'indentation.
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code
2 - Si ta question concernait réélement un souci de JOINTURE avec ta bdd mysql... il aurait fallut poster ta question dans le forum Mysql...
3 - Au final tu as posté au bon endroit.. car ce n'est pas un souci de jointure.
Déjà... ROWCOUNT ne s'utilise PAS sur des requêtes SELECT (comme indiqué dans la documentation officielle de PHP pour le PDO )
Vu que tu utilises PDO.. il faut correctement détecter les éventuelles erreurs dans les requêtes SQL.
Pour cela, il faut activer l'affichage des erreurs ET placer CHAQUE requête dans des blocs try/catch.
Applique ce qui indiqué ici : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Je t'invite également à lire et à appliquer TOUT ce qui se trouve là : https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
4 - la fonction ROWCOUNT, quoi qu'il en soit s'utiliser sur un "objet" de requête... pas sur l'array issu d'un fetch...
Bref... remplace ce bout de code
$articlepanierexist = $articlepanierexist->fetch(); $id = $articlepanierexist["id"]; $quantite = $articlepanierexist['quantite']; if($articlepanierexist->rowCount == 1){
par
$res_articlepanierexist = $articlepanierexist->fetch(); $id = !empty($res_articlepanierexist ["id"]) ? $res_articlepanierexist ["id"] : NULL; $quantite =!empty( $res_articlepanierexist ['quantite']) ? $res_articlepanierexist ['quantite'] : 0 if($id ){
Tu utilises le même nom de variables pour deux choses différentes
Soit c'est le prépare...
Soit le Fetch
Mais pas les trois .... faut donner des noms différentes...
Merci pour tes explications
J'ai trouvé d'où viens le soucis bonne journée.