Page 1 sur 1

Requete SQL INNER JOIN

Posté : 27 avr. 2009, 03:15
par davidb1967
Bonjour,

je réalise un panier de commande

J'ai 2 table

Table shop_panier et table shop_format.

La table shop_panier contient les colonne suivante: (dans l'ordre)
id, client, album, photo, quantite, format

La table shop_format contient les colonnes:
id, format, prix

Le but etant d'afficher le prix unitaire en fonction du format choisi par le client puis de le mutiplier par la quantité le tout pour une session.(pas simple la vie :( )

Voici la requette actuel qui ne me donne aucun resultat



SELECT shop_panier.*, shop_format.format, shop_format.prix, (shop_format.prix*shop_panier.quantite) AS total_ttc,
FROM shop_panier INNER JOIN shop_format ON shop_panier.format=shop_format.id
WHERE client = 'paramclient'

Bref je m'en sort pas depuis 2 jours

Merci de votre aide

Posté : 27 avr. 2009, 07:42
par Ryle
Modération :
Afin d'obtenir plus de réponses, le sujet est déplacé dans le forum "SQL & Bases de données".

Posté : 27 avr. 2009, 10:35
par GiorgioLino
Dans
AS total_ttc , <-- ICI

il y a une virgule qui ne devrait pas y être tout simplement.


Bon codage.

Posté : 27 avr. 2009, 12:04
par davidb1967
ok pour pour la virgule (j'ai plus d'erreur sql)
meme sans j'obtiens un enregistement vide alors que j'ai des enregistement dans mes 2 table.

voici mon code php

Code : Tout sélectionner

<?php $paramclient_panier = "0"; if (isset($_SESSION['MM_Username'])) { $paramclient_panier = (get_magic_quotes_gpc()) ? $_SESSION['MM_Username'] : addslashes($_SESSION['MM_Username']); } mysql_select_db($database_newtrip, $newtrip); $query_panier = sprintf("SELECT shop_panier.*, shop_format.format, shop_format.prix, (shop_format.prix*shop_panier.quantite) AS total_ttc FROM shop_panier INNER JOIN shop_format ON shop_panier.format=shop_format.id WHERE client = '%s' ", $paramclient_panier); $panier = mysql_query($query_panier, $newtrip) or die(mysql_error()); $row_panier = mysql_fetch_assoc($panier); $totalRows_panier = mysql_num_rows($panier); session_start();?>

Posté : 27 avr. 2009, 13:09
par GiorgioLino
Pistes à creuser :

As-tu vérifié que la requête renvoyait les résultats attendus (ou non) dans phpMyAdmin ?
Tester en rentrant une valeur de '$paramclient_panier'.

Si ça fonctionne alors le problème se trouve très probablement dans ton script php et plus précisément dans ce qui se trouve après la clause "WHERE". Dans ce cas vérifier avec des 'echo' et des 'var_dump($paramclient_panier)' que ta variable $paramclient_panier est bien envoyée et qu'elle a la valeur et le type voulu.

Sinon avise en fonction du message d'erreur de MySQL

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 27 avr. 2009, 13:19
par davidb1967
justement dans php admin la requete ne revoit rien . c'est donc bien dans cette requete que j'ai un probleme je pense

Posté : 27 avr. 2009, 15:11
par GiorgioLino
Comme dit dans mon précédent post, si ta requête ne renvoie aucun enregistrement et qu'il n'y pas d'erreur SQL non plus, c'est que le problème se trouve dans la clause WHERE.

Ce qui signifie 2 choses :

1) Il n'y pas d'enregistrement correspondant au client $paramclient_panier
OU
2) PIRE : la variable est vide.

Je te renvoie donc ma suggestion précédente
Dans ce cas vérifier avec des 'echo' et des 'var_dump($paramclient_panier)' que ta variable $paramclient_panier est bien envoyée et qu'elle a la valeur et le type voulu


P.S.
J'ai testé ta requête en créant les tables et en y mettant quelques valeurs comme suit.
CREATE TABLE `shop_panier` (
  `id` int(10) NOT NULL,
  `client` varchar(45) collate utf8_unicode_ci default NULL,
    `album` varchar(45) collate utf8_unicode_ci default NULL,
	`photo`varchar(45) collate utf8_unicode_ci default NULL,
	`quantite`varchar(45) collate utf8_unicode_ci default NULL,
	`format`varchar(45) collate utf8_unicode_ci default NULL,
  PRIMARY KEY  (`id`),
  KEY `shop_panier_FKindex1` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO `shop_panier` VALUES 
(1, 'MARTIN', 'Vacances', 'Vacances_1', 1, 10),
(2, 'MARTIN', 'Vacances', 'Vacances_1', 2, 11),
(3, 'DUPONT', 'Fiesta', 'Fiesta_1', 2, 11),
(4, 'DUPONT', 'Fiesta', 'Fiesta_2', 3, 12);


CREATE TABLE `shop_format` (
  `id` int(10) unsigned NOT NULL,
  `format` varchar(45) collate utf8_unicode_ci default NULL,
  `prix` int(10) unsigned NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `shop_format_FKindex1` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO `shop_format` VALUES 
(10, 'A1', 30),
(11, 'A2', 20),
(12, 'A3', 10);

avec $paramclient_panier = 'MARTIN', j'obtiens bien le résultat voulu avec la requête suivante.
SELECT shop_panier.*, shop_format.format, shop_format.prix, (shop_format.prix*shop_panier.quantite) AS total_ttc 
FROM shop_panier 
INNER JOIN shop_format 
ON shop_panier.format=shop_format.id  
WHERE client = 'MARTIN'
J'ai évidemment pris quelques libertés sur les types des différents champs .

Posté : 27 avr. 2009, 17:39
par davidb1967
Mon probleme de jointure est resolu , mais j'ai toujour un probleme d'affichage des ligne.

ca ne m'affiche que la derniere ligne rentrer dans la table shop_panier.

Voici mon code

Code : Tout sélectionner

<?php require_once('Connections/newtrip.php'); ?> <?php require_once('Connections/newtrip.php'); ?> <?php session_start(); $MM_authorizedUsers = ""; $MM_donotCheckaccess = "true"; // *** Restrict Access To Page: Grant or deny access to this page function isAuthorized($strUsers, $strGroups, $UserName, $UserGroup) { // For security, start by assuming the visitor is NOT authorized. $isValid = False; // When a visitor has logged into this site, the Session variable MM_Username set equal to their username. // Therefore, we know that a user is NOT logged in if that Session variable is blank. if (!empty($UserName)) { // Besides being logged in, you may restrict access to only certain users based on an ID established when they login. // Parse the strings into arrays. $arrUsers = Explode(",", $strUsers); $arrGroups = Explode(",", $strGroups); if (in_array($UserName, $arrUsers)) { $isValid = true; } // Or, you may restrict access to only certain users based on their username. if (in_array($UserGroup, $arrGroups)) { $isValid = true; } if (($strUsers == "") && true) { $isValid = true; } } return $isValid; } $MM_restrictGoTo = "login.php"; if (!((isset($_SESSION['MM_Username'])) && (isAuthorized("",$MM_authorizedUsers, $_SESSION['MM_Username'], $_SESSION['MM_UserGroup'])))) { $MM_qsChar = "?"; $MM_referrer = $_SERVER['PHP_SELF']; if (strpos($MM_restrictGoTo, "?")) $MM_qsChar = "&"; if (isset($QUERY_STRING) && strlen($QUERY_STRING) > 0) $MM_referrer .= "?" . $QUERY_STRING; $MM_restrictGoTo = $MM_restrictGoTo. $MM_qsChar . "accesscheck=" . urlencode($MM_referrer); header("Location: ". $MM_restrictGoTo); exit; } ?> <?php function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") { $theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue; switch ($theType) { case "text": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "long": case "int": $theValue = ($theValue != "") ? intval($theValue) : "NULL"; break; case "double": $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL"; break; case "date": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "defined": $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; break; } return $theValue; } $editFormAction = $_SERVER['PHP_SELF']; if (isset($_SERVER['QUERY_STRING'])) { $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']); } if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "quantite")) { $updateSQL = sprintf("UPDATE shop_panier SET client=%s, article=%s, quantite=%s WHERE id=%s", GetSQLValueString($_POST['client'], "text"), GetSQLValueString($_POST['article'], "int"), GetSQLValueString($_POST['quantite'], "int"), GetSQLValueString($_POST['id'], "int")); mysql_select_db($database_newtrip, $newtrip); $Result1 = mysql_query($updateSQL, $newtrip) or die(mysql_error()); $updateGoTo = "panier.php"; if (isset($_SERVER['QUERY_STRING'])) { $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?"; $updateGoTo .= $_SERVER['QUERY_STRING']; } header(sprintf("Location: %s", $updateGoTo)); } if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "validation")) { $insertSQL = sprintf("INSERT INTO shop_commande (client, `date`, total_ht, total_ttc) VALUES (%s, %s, %s, %s)", GetSQLValueString($_POST['client'], "text"), GetSQLValueString($_POST['date'], "date"), GetSQLValueString($_POST['total_ht'], "double"), GetSQLValueString($_POST['total_ttc'], "double")); mysql_select_db($database_newtrip, $newtrip); $Result1 = mysql_query($insertSQL, $newtrip) or die(mysql_error()); $insertGoTo = "traitement_commande.php"; if (isset($_SERVER['QUERY_STRING'])) { $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?"; $insertGoTo .= $_SERVER['QUERY_STRING']; } header(sprintf("Location: %s", $insertGoTo)); } $paramclient_panier = "1"; if (isset($_SESSION[ 'MM_Username' ])) { $paramclient_panier = (get_magic_quotes_gpc()) ? $_SESSION[ 'MM_Username' ] : addslashes($_SESSION[ 'MM_Username' ]); } mysql_select_db($database_newtrip, $newtrip); $query_panier = sprintf("SELECT shop_panier.*, shop_format.format, shop_format.prix, (shop_format.prix*shop_panier.quantite) AS total_ttc FROM shop_panier INNER JOIN shop_format ON shop_panier.format=shop_format.format WHERE client = '%s' ", $paramclient_panier); $panier = mysql_query($query_panier, $newtrip) or die(mysql_error()); $row_panier = mysql_fetch_assoc($panier); $totalRows_panier = mysql_num_rows($panier); session_start();?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <title>Document sans titre</title> </head> <?php require 'header.inc.php' ?> <?php require("conf.php"); ?> <body> <p>Bonjour </p> <p>Votre adresse mail est : <?php echo $_SESSION['MM_Username']; ?></p> <table width="61%" border="1"> <tr> <td width="16%"><div align="center">Vignette</div></td> <td width="14%"><div align="center">Album</div></td> <td width="14%"><div align="center">N&deg; de photo </div></td> <td width="14%"><div align="center">Format</div></td> <td width="15%"><div align="center">Quantit&eacute;</div></td> <td width="12%"><div align="center">Prix unitaire </div></td> <td width="15%"><div align="center">Sous-Total</div></td> </tr> <tr> <td height="69"><div align="center"><img src="<?php echo PHOTOS_DIR."/" . rawurlencode($photodir) . "/" . THUMBS_DIR . "/__".$listvalidimg[$i] ?>" border="0" alt="<?php echo $listvalidimg[$i]; ?>" class="photo">&nbsp;</div></td> <td><div align="center"><span class="Style1"><?php echo $row_panier['album']; ?></span></div></td> <td><div align="center"><span class="Style1">N&deg;<?php echo $row_panier['photo']; ?><br />(<a href="suppr_panier.php?id=<?php echo $row_panier['id']; ?>">Supprimer</a>)</span></div></td> <td><div align="center"><span class="Style1"><?php echo $row_panier['format']; ?></span></div></td> <td><form action="<?php echo $editFormAction; ?>" method="POST" name="quantite" id="quantite"> <div align="center"> <input name="quantite" type="text" id="quantite" value="<?php echo $row_panier['quantite']; ?>" size="3" maxlength="3"> <input name="id" type="hidden" id="id" value="<?php echo $row_panier['id']; ?>"> <input name="client" type="hidden" id="client" value="<?php echo $row_panier['client']; ?>"> <input name="photo" type="hidden" id="photo" value="<?php echo $row_panier['photo']; ?>"> <input type="hidden" name="MM_update" value="quantite"> <input type="submit" name="Submit" value="Modifier"> </div> </form> <div align="center"><span class="Style1"></span></div></td> <td><div align="center"><?php echo $row_panier['prix']; ?>&euro;</div></td> <td><div align="center"><span class="Style1"><?php echo $row_panier['total_ttc']; ?> &euro; </span></div></td> </tr> </table> <p>&nbsp;</p> </body> </html> <?php mysql_free_result($panier); ?> <?php require 'footer.inc.php' ?>

Posté : 27 avr. 2009, 19:54
par AB
Houlà tu veux faire une application professionnelle en utilisant le code php généré par dreamweaver ?
C'est pas sérieux ça :?
Faut pas croire la pub :wink:
Dreamweaver peut t'aider accessoirement mais surtout pas pour générer du code php :!:
Sinon cela va vite devenir un foutoir ingérable :?

Sinon pour ton problème tu fais ton association $row_panier = mysql_fetch_assoc($panier); mais je ne vois pas trop dans ton code où tu parcoures les résultats : tu ne fais pas de boucle donc tu n'as qu'une valeur! enfin si j'ai bien vu (en formatant ton code avec les balises PHP plutôt qu'avec les balises Code cela aurait été plus lisible :wink: )

Et puis tu utilises une vieille version de dreamweaver et de fait ton code pour protéger les requêtes n'est pas à jour : cf le manuel php et la fonction mysql_real_escape_string()

Posté : 27 avr. 2009, 23:27
par davidb1967
Dreamweaver et oui pas le choix vu mon niveau en php.
c'est une apli que je developpe pour moi. c'est assez compliqué comme historique.

Je te remercie pour toute les info que tu ma donné et pour le moment ca y es ca fonctione!!!!! :D

Posté : 28 avr. 2009, 00:01
par AB
Content d'avoir pu t'aider, cela dit GiorgioLino avait fait l'essentiel du travail de vérification.

A part cela il faudrait quand même que tu te mette à étudier php un peu plus dans les détails si tu veux quelque chose de fonctionnel et surtout d'évolutif.
Avec le code php généré par Dreamweaver tu seras vite limité, et la maintenance sera injouable :wink: