problème de cookie

Eléphant du PHP | 83 Messages

31 déc. 2007, 14:44

bonjour je suis en train de comprendre comment marche l'histoire des cookies j'ai donc trouvé sur un livre du code mais le problème c que le cookie ne se crée pas et que rien ne se passe sur ma page
voilà j'ai la page boutique .php
<?php
include ("variables.inc.php");
if (!isset ($_REQUEST['id']))$id =1;
else $id= $_REQUEST ['id'];
?>
<html >
<head>
<title>boutique</title>
<link href ="look.css" rel="stylesheet" type=="text/css"/>
</head>
<body>
<div class ='titre'><a href='boutique.php'>boutique<i>aie<i/></a></div>
<table class='catalogue'>
<tr>
<td class='liste'>
<div class='tdTitre'>nos produits</div>
<?php
$liendb = mysql_connect($server,$login,$password);
mysql_select_db ($bdd);
$sql ="SELECT * FROM $table_produit";
$resultat =mysql_query ($sql);
while($produit =mysql_fetch_array ($resultat)){
print("-");
print ("<a href=".$_SERVER['PHP_SELF']."?id=".$produit['idproduit'].">".
$produit['nom']."</a>");
print("<br/>");
}
?>
</td>
<td class='detail'>
<?php
$sql ="SELECT * FROM $table_produit WHERE idproduit = '$id'";
$resultat= mysql_query ($sql);
$produit =mysql_fetch_array($resultat);
print("<div class='tdTitre'>".$produit['nom'].
"[ref#".$produit['reference']."]</div>");
?>
<div class='description'>
<?php
print(nl2br($produit['description'])."<br/><br/>");
print($produit['prix']."<br/><br/>");
mysql_close($liendb);
?>
<form action="ajout_caddie.php" method="post">
<input type="hidden name ="id" value="<?php echo $id; ?>"/>
<input type="submit" value="ajouter au panier"/>
</form>
<?php
if (isset($_COOKIE['monpanier']))
{
print("<div class='panier'>");
$tab =split(",",$_COOKIE['monpanier']);
$nb_prod = sizeof($tab)-1;
print("votre panier contient ".$nb_prod."produit(s)<br/>");
print("<form action='voir_caddie.php' method='post'>");
print ("<input type='submit' value ='valider la commande'/></form>");
print("cookie = {".$_COOKIE['monpanier']."}");
print("</div>");
}
?>
</div>
</td>
</tr>
</table>


</body>
</html>
puis j'ai la page ajout_caddie
<?php header("Location:$url/boutique.php?id=".$_REQUEST['id']); ?>

<html >
<head>
<title>Document sans titre</title>
</head>
<body>
<?php
include("variables.inc.php");
setcookie("monpanier",$_COOKIE['monpanier'].",".$_REQUEST ['id'],time()+86400);
?>
</body>
</html>


mais quand j'ajoute des produits dans panier
le bouton valider la commande n'apparait pas
quelqu'un peut il m'aider
merci d'avance pour votre aide

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

04 janv. 2008, 14:23

Les cookies font partie des en-têtes HTTP, ce qui impose que setcookie() soit appelée avant tout affichage de texte. Ce sont les mêmes limitations que pour header(). Vous pouvez utiliser les fonctions de bufferisation de sortie pour retarder l'affichage de votre script tant que vous n'avez pas décidé d'envoyer un cookie ou des en-têtes.
En gros, la définition du cookie doit avoir lieu avant l'affichage de code html, code html qui en l'occurence ici ne sert à rien puisque le header() est exécuté et redirigera l'utilisateur vers la page $url/boutique.php avant l'affichage du code html. (Nota : la variable $url n'est pas définie)

Dans ton cas, la fonction setcookie() te retourne donc une erreur que tu ne vois pas à cause de la redirection qui le précède. Il faut réorganiser ton code pour faire les choses dans l'ordre :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 83 Messages

10 janv. 2008, 19:45

bonjour
j'ai fait comme tu as dit j'ai inversé l'ordre et j'ai mis

Code : Tout sélectionner

<?php setcookie("monpanier",$_COOKIE['monpanier'].",".$_REQUEST ['id'],time()+86400); header("Location:$url/boutique.php?id=".$_REQUEST['id']); include("variables.inc.php"); ?> <html> <head> <title>Document sans titre</title> </head> <body> </body> </html>
et là j'ai bien vous avez "xproduits" qui s'affichent mais pour
cookie = {,,,,,,,,,} qui s'affiche je n'ai rien entre les virgules est ce normale?
Merci pour votre aide

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

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

10 janv. 2008, 20:19

Il n'y a pas d'espace entre le nom d'un tableau et les crochets contenant l'index :)

Par ailleurs, puisque tu fais une redirection, l'include et le code html qui suivent ne servent à rien, puisque l'utilisateur sera redirigé et ne verra jamais ce code :)

Essaye comme ceci :
<?php 
setcookie("monpanier", $_COOKIE['monpanier'].",".$_REQUEST['id'], time()+86400); 
header("Location:".$url."/boutique.php?id=".$_REQUEST['id']);  
?> 
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...