Requête sql et bouton

Eléphanteau du PHP | 46 Messages

11 févr. 2012, 15:29

Bonjour.

J'essaye de créer une boutique par mes propres moyens, j'ai déjà créer une liste avec l'image des produits et un bouton commander en dessous.

Cependant, j'ai un soucis, quand je clique sur commander, j'arrive sur la page ou mon produit est défini, mais le produit s'ajoute au panier avant même que j'ai cliqué sur Ajouter au panier.

Je sèche un peu sur le moyen d'activer ma requête sql à travers ce bouton.

Voici le code :
<!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>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <link href="<?php echo $design; ?>defaut/style.css" rel="stylesheet" title="Style" />
    </head>
        <div class="content"><center>		
<?php
// Connexion à la base de donnée
mysql_connect(DB_HOST, DB_LOGIN, DB_PASS) or die('<h1>Connexion au serveur impossible !</h1>');
mysql_select_db(DB_BDD) or die('<h1>Connexion impossible à la base</h1>');

//On verifie que le produit est choisi
if(isset($_GET['id']))
{
	$id = intval($_GET['id']);
	//On verifie que le produit existe
	$dn = mysql_query('select produit, image, prix, cat from boutique where id="'.$id.'"');
	if(mysql_num_rows($dn)>0)
	{
		$dnn = mysql_fetch_array($dn);
		//On affiche les donnees du produit
?>
Voici votre produit : "<?php echo htmlentities($dnn['produit']); ?>" : 

<table style="width:500px;">
	<tr><td>

	<?php
if($dnn['image']!='')
{ 
	echo '<br /><img src="'.htmlentities($dnn['image'], ENT_QUOTES, 'UTF-8').'" alt="Image" style="max-width:100px;max-height:100px;" />';
	}
else
{
	echo 'Il n\y a pas d\'image pour cet article.';
}
?>
</td>
    	<td class="left"><?php echo htmlentities($dnn['produit'], ENT_QUOTES, 'UTF-8'); ?><br /><br />
    	prix: <?php echo htmlentities($dnn['prix'], ENT_QUOTES, 'UTF-8'); ?><br /></td>
    </tr>
</table>
<?php
	}
	else
	{
		echo 'Ce produit n\'existe pas.'; 
	}
}
else
{
	echo 'Vous n\'avez commander aucun produit.';
}
?>
	<br/>
<?php	
echo '<a href="index.php?site=command">Ajouter au panier';
$sql="INSERT INTO panier (membre, id_produit) VALUES ('$username', '$id') ";
$req= mysql_query($sql) or die('<font color="red">Vous avez déjà ajouté cet article</font><br />');
echo '</a>';

echo 'Produit ajouté au panier <br/>';

echo '<a href="index.php?site=panier">Voir votre panier</a><br/>';
echo '<a href="index.php?site=boutique">Retour &agrave; la boutique</a>';

?></center>	

Donc je cherche le moyen d’exécuter ma requête, puis de recharger la page et afficher que l'ajout au panier a été fait.

D'avance, merci. Cordialement.


Edit : Excusez moi je viens de trouver la solution :
<?php	
echo "<br/>
<form method='post'> 
<input type=submit name='ajout' value='Ajouter au panier'\><br> 
</form> 
"; 
echo '<br/>';
if (isset($_POST['ajout'])) 
{ 
$ajout="INSERT INTO panier (membre, id_produit) VALUES ('$username', '$id') ";
$req= mysql_query($ajout) or die ('Vous avez déjà ajouté cet article <br/>');
echo 'Produit ajouté au panier';} 
else {


}

echo '<br/>';
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>';
?></center>	


Cependant j'ai un autre problème, quand le produit a déjà été ajouté, mes liens Voir votre panier et Retour à la boutique ne s'affiche pas.

Eléphant du PHP | 99 Messages

11 févr. 2012, 19:46

Les liens ne s'affichent pas car ils ne sont pas dans le if :
if (isset($_POST['ajout']))
{
$ajout="INSERT INTO panier (membre, id_produit) VALUES ('$username', '$id') ";
$req= mysql_query($ajout) or die ('Vous avez déjà ajouté cet article <br/>');
echo 'Produit ajouté au panier';
echo '<br/>';
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>';
?></center>
}
else {


}

Eléphanteau du PHP | 46 Messages

11 févr. 2012, 20:59

Oui mais le problème est que si l'article a été ajouté, et qu'on essaye a nouveau de commander, il ne m'affiche pas mes liens en dessous, juste que le produit est déja dans le panier

Eléphanteau du PHP | 46 Messages

12 févr. 2012, 00:34

Quelqu'un a une idée ?

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

12 févr. 2012, 11:20

En fait la solution de crash n'est pas la bonne et ton postulat de départ était le bon.. ce qui est en dehors du if() sera traité après le if, que php soit entré dans le if ou non. En gros, quoi qu'il arrive tes liens seront bien affichés.

Le problème est en fait lié à ta gestion d'erreur... en gros pour savoir si un article est déjà présent tu tentes d'insérer cet article à nouveau. J'imagine qu'en base tu as une contrainte qui dit qu'un même couple utilisateur/id ne peut pas être enregistré deux fois et ta base retourne donc une erreur.

PHP traite alors cette erreur avec ton die() qui affiche le message d'erreur et interrompt l'exécution de php (qui ne va donc pas interpréter le reste du code et donc qui n'affichera pas les liens qui suivent :))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 46 Messages

12 févr. 2012, 14:19

Oui en effet j'ai réglé une clé unique sur les id_produit, pour ce qui est du code, même en plaçant mon code en dehors du if, je ne vois pas mes liens.

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

12 févr. 2012, 20:24

C'est parce qu'en cas d'erreur sql, ton die interrompt toute exécution de php. Ce qui se trouve ensuite n'est donc pas exécuté dès lors que le die est activé...

Il faudrait soit tester avec un select si l'article est déjà dans le panier avant de l'insérer en base (si oui tu mets le message d'erreur, si non tu l'insères), du coup pas d'erreur sql, pas de die, et php continue jusqu'à la fin du script. Soit supprimer le die et vérifier le résultat du mysql_query() qui retourne TRUE en cas de succès et FALSE sinon :
if (isset($_POST['ajout'])) {
  $ajout="INSERT INTO panier (membre, id_produit) VALUES ('$username', '$id') ";
  $req= mysql_query($ajout);
  if ($req) { // si le insert s'est correctement déroulé
    echo 'Produit ajouté au panier';
  }
  else { // sinon
    echo 'Vous avez déjà ajouté cet article';
  }
} // fin du test sur l'ajout.. y a pas besoin de else s'il n'y a rien dedans 

echo '<br/>'; // 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>';

?>
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 46 Messages

13 févr. 2012, 01:06

Nickel sujet résolue, merci encore.