Requete sql et affichage php

Eléphanteau du PHP | 46 Messages

13 févr. 2012, 21:55

Bonsoir

J'ai un petit problème avec mon code php et sql aussi je crois :D

Voila, je choisis dans mon panier les articles que les membres ont commandé.

Ma table panier est composée comme ça :

id, membre, id_produit

Le problème, c'est que lorsque je sélectionne un membre pour afficher ses produits, il m'affiche tous les produits à la suite, donc par exemple les produits 1, 15, 32 s'affichent 11532
et de par ce fait, impossible de mettre en forme l'affichage des produits.

Voila le code :
<?php

	// on recupere les produits du membre
	$sql="SELECT id_produit FROM panier WHERE membre='$username' AND validate='0' ORDER BY id_produit";
	$req= mysql_query($sql) or die('Erreur !<br /><br /> Aucun produit dans votre panier');
	while($data=mysql_fetch_assoc($req)){
		echo "{$data["id_produit"]}";// optionnel, c pour vous montrer
		}
		// on recupere les produits en fonction des id produits
	$sql2="SELECT produit FROM boutique WHERE id='$data[id_produit]'";
	$req2= mysql_query($sql2) or die('Erreur SQL !<br />'.$sql2.'<br />'.mysql_error());
	while($data2=mysql_fetch_assoc($req2)){
		echo "{$data2["produit"]}"; // on affiche le nom du produit
		echo "{$data2["image"]}"; // on affiche son image
		echo "{$data2["prix"]}"; // on affiche son prix
		}	

?>

Voici votre panier :

<?php
echo '<br/>';
echo "<br/>
<form method='validate'> 
<input type=submit name='validate' value='Valider la commande'\><br> 
</form> 
"; 
echo '<br/>';

if (isset($_POST['validate'])) {
  $validate="UPDATE panier WHERE membre='$username' AND id_produit='$data[id_produit]' SET validate='$data[id_produit]'";
  $req= mysql_query($ajout);
  if ($req) { // si le insert s'est correctement déroulé
	header("Location: index.php?site=panier"); 
  echo 'Commande validée';

  }
  else { // sinon
    echo 'Vous n\'avez aucun produit dans votre panier ou votre commande est validée';
  }
} 
 // affichage des liens quoi qu'il arrive
echo '<a href="index.php?site=panier">Voir votre panier</a><br/>';
echo '<br/>';
echo '<a href="index.php?site=boutique">Retour &agrave; la boutique</a>'; 

?>
Si vous pouvez m'aider, merci d'avance.

Eléphant du PHP | 209 Messages

14 févr. 2012, 10:23

Ton champ validate c'est quoi ?

Sinon pour ta requête, il faut que tu fasses une jointure. Un truc dans le genre :
SELECT b.* FROM boutique b
JOIN panier ON panier.id_produit = b.id_produit
WHERE panier.membre='$username'
AND panier.validate = '0'
ORDER BY b.produit;

Eléphanteau du PHP | 46 Messages

14 févr. 2012, 14:03

Merci de ta réponse

Le validate sert à valider la commande.

Pour ce qui est du code sql, j'ai essayé mais le tien ne marche pas, je vais tenter de résoudre ça.

Eléphant du PHP | 209 Messages

14 févr. 2012, 14:27

Remplace par le nom des champs correspondants. Validate par exemple n'est pas dans panier d'après ce que tu as mis mais je l'ai mis dedans et il y a sans doute d'autres erreurs du genre ;)

Eléphanteau du PHP | 46 Messages

14 févr. 2012, 14:33

Ok merci

Pour le champ validate, il est dans panier, dsl j'avais mal lu

Voila ça marche, merci, mais impossible de valider ma commande maintenant.

Ma requête UPDATE ne se fait pas. Tu peux m'aider ?
Modifié en dernier par atome13 le 14 févr. 2012, 14:54, modifié 1 fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

14 févr. 2012, 14:34

salut,

une sous requête semble plus appropriée vue que c'est pour un seul membre précis.
select id_produit, produit, image, prix from boutique
where id_produit in ( select id_produit from panier where membre='$username');
ton affiche est correct avec le code.

Tu mélange les " dans les variables c'est pas clair surtout que echo "{$data2["produit"]}"; peux avantageusement être remplacé par echo $data2["produit"]; ^^ (ton code en sera plus clair).

Si tu veux que tout ne s'affiche pas a la suite il faut penser à mettre des saut de ligne (<br />).

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 46 Messages

14 févr. 2012, 15:02

Merci a toi aussi Moogli