Requête sql et bouton

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Requête sql et bouton

Re: Requête sql et bouton

par atome13 » 13 févr. 2012, 01:06

Nickel sujet résolue, merci encore.

Re: Requête sql et bouton

par Ryle » 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>';

?>

Re: Requête sql et bouton

par atome13 » 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.

Re: Requête sql et bouton

par Ryle » 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 :))

Re: Requête sql et bouton

par atome13 » 12 févr. 2012, 00:34

Quelqu'un a une idée ?

Re: Requête sql et bouton

par atome13 » 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

Re: Requête sql et bouton

par crash » 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 {


}

Requête sql et bouton

par atome13 » 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.