Page 1 sur 1

Pb caddie

Posté : 11 févr. 2009, 17:52
par azigui
Bonjour à tous,

Y'aurait-il un bonne âme pour m'aider. Voilà je débute en PHP, je dois créer un panier.
J'ai réussi à faire de l'incrémentation et de la décrémentation pour mes produits. Par contre là où je sèche, c'est comment je peux récupérer les tarifs de mes produits stockés dans une base MySQL et effectuer les calculs (montant ht, ttc par article puis montant total).

Voici mon code :

<?php
session_start();

if (isset($_GET["prod"]))
{
switch ($_GET["sens"])

{
case "ajout" :
$_SESSION[$_GET["prod"]] ++;
break;
case "sup" :
$_SESSION[$_GET["prod"]] --;

//-- si la quantité < 1, le produit est supprimé du panier -----
if ($_SESSION[$_GET["prod"]] < 1)
unset($_SESSION[$_GET["prod"]]);
break;
}
}
?>
<?php
include_once 'class.php';
//Lecture de la Base
// requete sur la table Licences
open();
$Produit='"'.$_GET['prod'].'"';
$requete2="SELECT Tarifs from Licences where ProduitFMP=$ProduitFMP";
$result2=mysql_query($requete2);

if($result2==0)
{
echo "Impossible d'effectuer la requête<br>$requete2";
exit;
}
$Tarifs=mysql_fetch_row($result2);
?>

<!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">
<head>
<title></title>
<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1">
</head>
<body>
<table cellspacing="1" width="65%" align="center">
<tr align="left">
<th>Produit</th>
<th>Type de licence</th>
<th></th>
</tr>
<tr>
<td>Prod 1</td>
<td>Produit Complet</td>
<td> <a href="test.php?prod=Prod 1&sens=ajout">Ajouter</a></td>
</tr>
<tr>
<td>Prod 2</td>
<td>Mise à jour</td>
<td><a href="test.php?prod=Prod 2&sens=ajout">Ajouter</a></td>
</tr>
<tr>
<td>Prod 3</td>
<td>Education</td>
<td><a href="test.php?prod=Prod 3&sens=ajout">Ajouter</a></td>
</tr>
</table>
</body>
</html>
</html>
<?php

echo "<p align=\"center\"><b>contenu de votre panier</b></p>";
foreach($_SESSION as $produit => $quantite)
{
echo "
<table cellspacing=\"1\" width=\"65%\" align=\"center\">
<tr align=\"left\">
<td>$produit</td>
<td></td>
<td>$quantite</td>
<td><a href=\"test.php?prod=$produit&sens=sup\">Enlever</a></td>
</tr>
</table>";
}
echo "<hr><br>";
//---------------------------------------------------------------------------
?>

Merci d'avance
:(

Posté : 11 févr. 2009, 18:00
par zigz4g
Salut,
peux tu mettre ton code dans une balise PHP dans l'editeur du forum pour rendre ton code lisible, STP.
Tu aura plus de reponse en indentant ton code au passage.

Posté : 11 févr. 2009, 18:28
par azigui
A priori, cela n'a pas fonctionné, peux tu m'expliquer comment fait-on pour baliser mon code ?

Merci pour ton aide

Posté : 11 févr. 2009, 18:37
par Stef
...balise PHP dans l'editeur du forum...
L'éditeur c'est ce qui te sert à rédiger ton message, au dessus du champ de texte y a plusieurs boutons, dont un nommé PHP...

il te suffit d'éditer ton post contenant ton code et d'encadrer ton code justement avec les balises adéquates...

Posté : 11 févr. 2009, 18:48
par azigui
c'est ce que j'ai effectué, mais cela n'a pas colorisé le texte ou l'indenté. Cela a tout simplement ajouter les balises. Cela te suffirait ?

Merci

Posté : 11 févr. 2009, 19:07
par Stef
il faut que ton code se trouve entre ces deux balises

Code : Tout sélectionner

[php] .... [/php]
essaie voir comme ça, si ça marche pas c'est que tu n'as pas activé le bbcode... :)

Posté : 11 févr. 2009, 19:23
par azigui
<?php
session_start();

if (isset($_GET["prod"]))
{
switch ($_GET["sens"])

{
case "ajout" :
$_SESSION[$_GET["prod"]] ++;
break;
case "sup" :
$_SESSION[$_GET["prod"]] --;

//-- si la quantité < 1, le produit est supprimé du panier -----
if ($_SESSION[$_GET["prod"]] < 1)
unset($_SESSION[$_GET["prod"]]);
break;
}
}
?>
<?php
include_once 'class.php';
//Lecture de la Base
// requete sur la table Licences
open();
$Produit='"'.$_GET['prod'].'"';
$requete2="SELECT Tarifs from Licences where ProduitFMP=$ProduitFMP";
$result2=mysql_query($requete2);

if($result2==0)
{
echo "Impossible d'effectuer la requête<br>$requete2";
exit;
}
$Tarifs=mysql_fetch_row($result2);
?>

Code : Tout sélectionner

<!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"> <head> <title></title> <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1"> </head> <body> <table cellspacing="1" width="65%" align="center"> <tr align="left"> <th>Produit</th> <th>Type de licence</th> <th></th> </tr> <tr> <td>Prod 1</td> <td>Produit Complet</td> <td> <a href="test.php?prod=Prod 1&sens=ajout">Ajouter</a></td> </tr> <tr> <td>Prod 2</td> <td>Mise à jour</td> <td><a href="test.php?prod=Prod 2&sens=ajout">Ajouter</a></td> </tr> <tr> <td>Prod 3</td> <td>Education</td> <td><a href="test.php?prod=Prod 3&sens=ajout">Ajouter</a></td> </tr> </table> </body> </html>
<?php

echo "<p align=\"center\"><b>contenu de votre panier</b></p>";
foreach($_SESSION as $produit => $quantite)
{
echo "
<table cellspacing=\"1\" width=\"65%\" align=\"center\">
<tr align=\"left\">
<td>$produit</td>
<td></td>
<td>$quantite</td>
<td><a href=\"test.php?prod=$produit&sens=sup\">Enlever</a></td>
</tr>
</table>";
}
echo "<hr><br>";
//---------------------------------------------------------------------------
?>
Yes merci pour l'astuce

Posté : 12 févr. 2009, 12:39
par zigz4g
C'est deja mieux et un bon debut, il manque encore l'indentation et les nom des fichiers pour
comprendre tes includes mais ca ce rapproche du lisible.

Sinon je vois une petite incomprehension dans ce code :
<?php
include_once 'class.php';
//Lecture de la Base
//requete sur la table Licences
open();
$Produit = '"' . $_GET['prod'] . '"';
$requete2 = "SELECT Tarifs from Licences where ProduitFMP = $ProduitFMP";
$result2 = mysql_query($requete2);
if ($result2 == 0) {
    echo "Impossible d'effectuer la requête<br>$requete2";
    exit;
}
$Tarifs = mysql_fetch_row($result2);
?>
Dans ton SELECT tu met la variable $ProduitFMP mais elle n'est pas declarer et initialisee avant.
Peut etre que tu veux faire ceci ?
if (isset($_GET['prod'])) {
    $Produit = '"' . $_GET['prod'] . '"';
    $requete2 = "SELECT Tarifs from Licences where ProduitFMP = $Produit";
    //Le reste de ton code car si tu ne recoit pas $_GET['prod'] ca peut planter ton code
}
Ce n'est qu'un bout de code qui me parait eronne.

PS: Remarque l'indentation que j'ai ajoute a ton code.

Posté : 12 févr. 2009, 13:06
par azigui
Je te remercie du coup de pousse. J'ai donc récupérer ton bout de code :
<?php
session_start();

if (isset($_GET["prod"]))
  {
   switch ($_GET["sens"])
  {
case "ajout" :
$_SESSION[$_GET["prod"]] ++;
break;

case "sup" :
$_SESSION[$_GET["prod"]] --;

//-- si la quantité < 1, le produit est supprimé du panier -----
if ($_SESSION[$_GET["prod"]] < 1)
  unset($_SESSION[$_GET["prod"]]);
  break;
  }
  }
include_once 'class.php';
//Lecture de la Base
// requete sur la table Licences
open();

if (isset($_GET['prod'])) {
    $Produit = '"' . $_GET['prod'] . '"';
    $requete2 = "SELECT Tarifs from Licences where ProduitFMP = $Produit";
	$result2=mysql_query($requete2);
	if($result2==0)
		{
		echo "Impossible d'effectuer la requête<br>$requete2";
		exit;
		}
		$Tarifs=mysql_fetch_row($result2);
    
} 

?>
<?php
//-- ces lignes ne servent à rien, simplement un affichage de controle ------
echo "<p align=\"center\"><b>contenu de votre panier</b></p>";
foreach($_SESSION as $produit => $quantite)
  {
  echo "
  <table cellspacing=\"1\" width=\"65%\" align=\"center\">";
  echo "<tr align=\"left\">";
  echo "<td>$produit</td>";
  echo "<td>$Tarifs[0]</td>";
  echo "<td>$quantite</td>";
  echo "<td><a href=\"test.php?prod=$produit&sens=sup\">Enlever</a></td>";
  echo "</tr>";
  echo "</table>";
  }
echo "<hr><br>";
//---------------------------------------------------------------------------
?>
Seulement maintenant, j'ai le même tarif qui apparait pour mes trois produits.
J'avais déjà trouvé une soluce qui me donnait le même résultat.

URGENT

Posté : 12 févr. 2009, 17:16
par azigui
SVP, aidez-moi j'en peux plus je n'arrive même pas à récupérer le prix de mes produits.
Je ne parle même pas d'essayer d'effectuer les calculs.

Cela fait près de 4 jours que je suis dessus, je deviens fou, je dois finir mon site pour demain.

SVP, j'ai vraiment besoin d'aide.

Merci à tous ceux qui auraient du temps à me consacrer, j'ai vraiment dû mal à comprendre ce système de caddie.

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

Posté : 12 févr. 2009, 17:58
par Calimero
  echo "<td>$Tarifs[0]</td>";
Je pense que cette ligne explique que tu manipules le même tarif pour tous tes produits... $Tarifs ne contient le tarif que d'un seul produit, que tu répètes pour tous les produits trouvés dans la session : ça ne peut pas aller.

Il faudrait à la place que tu récupères dans ta boucle le tarif de chaque produit (si nécessaire en faisant une requête en base : comme tu as déjà réalisé un code qui fait cela, il peut être judicieux de le transformer en fonction).

Posté : 12 févr. 2009, 18:20
par azigui
Merci pour ta réponse, pourrais-tu m'aider pour la fonction.

Merci

Posté : 12 févr. 2009, 18:20
par zigz4g
Je n'avais meme pas compris que $Tarifs etait dans les deux fichiers. Il doit manquer un include quelque part.

Enfin sinon, le open(); n'a pas l'air de servir.

Pour t'aider, tu dois comprendre ce que ton script te propose comme variable et contenu.
Je te propose de regarder $Tarifs a la sortie de ton mysql_fetch_row. Tu saura si tu as bien des donnees a afficher.
$Tarifs=mysql_fetch_row($result2);
echo '<pre>';var_dump($Tarifs);echo'</pre><br/>';
Avec ce debug tu verra si tu as bien 0, 1, ou plusieurs resultats a ta requette.

Comme dis plus haut, dans ta boucle tu affiche toujours le meme $Tarifs[0].
C'est effectivement le seul resultat que tu a car tu ne prend pas les tarifs de tous les produits.

Je te propose de faire une requette qui recupere tous les prix et apres tu le recherche par rapport
au nom du produit pour obtenir son prix. Ou tu peux aussi faire une requette pour chaque produit
affiche.
Troisieme cas, tu fais une requette qui te sors les infos de tes produits en une seule fois et tu les affiche. Je pense a une clause where IN. Par contre il te faut $produit = un identifiant pour le rechercher plus facilement.

Posté : 12 févr. 2009, 18:24
par zigz4g
Je viens de tomber sur un exemple de caddie en php : http://files.codes-sources.com/fichier. ... caddie.php
Peut-etre que ca t'aidera a comprendre comment il passe les infos de page en page.

Posté : 12 févr. 2009, 18:28
par azigui
Que signifie Resource id #4 ?

effectivement, j'avais utilisé la variable de debug qui ne me sortait qu'une seule valeur.

Merci pour l'URL, je vais y jeter un oeil

Je crois que je vais arrêter le PHP, je suis vraiment pas bon, je n'y arrive pas malgrévos recommandations.

Si vous pouviez m'aider à définir les requêtes ce serait sympa.

Dsl pour le dérangement.


Comment feriez-vous si j'avais les prix directement dans ma page sans passer par la base