Problème de session

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 : Problème de session

par lenouvdu44 » 01 sept. 2008, 20:02

Bonjour
Tout est include à l'index (ce n'est pas moi qui l'a fait, je n'ai fait que reprendre le site en construction)
Et l'index contient bien le session_start().
Vwala en gros la structure et les tests que j'ai fait (ps : les fichiers sont raccourcis, je ne mets que ce qui est intéressant) :
index.php :
<?php	
	session_save_path('tmp');
	session_start();
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
	<head>
		<title>Bijoul (non spo le vrai titre ^^)</title>
		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
		<link href="style/style.css" rel="stylesheet" type="text/css" />
	</head>
	<body>
<?php
		if ($_GET['page'] == 'panier'){ // avec un isset naturellement juste avant
			include(panier.php);
		}
		else{
			include(accueil.php);
		}
?>
		<div id='footer'>
	
			(c) mon_booo_site.fr 2008
			<?php
				echo "test 4 : ".$_SESSION[1]['largeur']."<br / >";
			?>
		</div>
$_SESSION[1]['largeur'] doit contenir quelque chose à partir du moment où nous avons ajouté quelques chose dans le panier (largeur étant la largeur de l'image commandée)

et dans le panier.php
<?php
// include de connexion BDD

// Vérification si j'ai des articles à récupérer


	echo "test 1 : ".$_SESSION[1]['largeur']."<br / >";
if ($find == TRUE){
			$i = 10;
			$m = 1;
			while (($i > 9) && ($i < 40)){
				if (isset($_POST[$i])){
					if ($_POST[$i] != 0 && is_numeric($_POST[$i]) == true){
						$_SESSION[$m]['quantity'] = $_POST[$i];
						$_SESSION[$m]['prix'] = $_POST["prix$i"];
						$_SESSION[$m]['largeur'] = $_POST["largeur$i"];
						$_SESSION[$m]['picurl'] = $_POST['picurl'];
						$_SESSION[$m]['time'] = $time;
						$_SESSION[$m]['ip'] = $_SERVER["REMOTE_ADDR"];
						$m++;
					}
				}
				$i++;
				if ($i == 20){
					$i = 30;
				}
			}
		// Fin
	}
	echo "test 2 : ".$_SESSION[1]['largeur']."<br / >";

// affiche du panier
$m = 1;
			$total = 0;
			
			for ($m = 1 ; ($_SESSION[$m]['largeur'] != "" || $_SESSION[$m]['largeur'] != NULL) ; $m++){
				?>
				<tr>
					<td>
						<input type="checkbox" name="sup<?php echo $m; ?>" id="tableau"/>
					</td>
					<td>
						<?php echo $_SESSION[$m]['largeur']; ?>
					</td>
					<td>
						<input type="text" name="up<?php echo $z?>" id="quantity" size="2" maxlength="2" value="<?php echo $_SESSION[$m]['quantity'];?>">
						<input type="hidden" name="uparti<?php echo $z?>" value="<?php /*echo $donnees['id'] ;*/ ?>" />
					</td>
					<td>
						<?php 
							$xart = $_SESSION[$m]['prix'];
							$x = $_SESSION[$m]['quantity'];
							//echo $xart . '€ x ' . $x;
							$xart = $xart * $x;  
							echo $xart . '€'; 
							//echo afficheprix($donnees['model']);
							$total += $xart;
						?>
					</td>
				</tr>
				<?php
			}
	echo "test 3 : ".$_SESSION[1]['largeur']."<br / >";
Donc, quand je rajoute des articles, mes tests d'affichage ne commence qu'au test2, ce qui est logique car j'enregistre les données dans les sessions juste avant.
Tout mes tests fonctionnent sur le premier passage, même le 4 (après l'include, et vraiment à la fin du fichier, y'a aucun traitement derrière).

Par contre, si je retourne sur le panier, aucun de mes tests ne fonctionnent.

Humf, des idées ? Merci pour vos futures réponses ;) (la phrase que je déteste lire :ah:)



EDIT :
J'ai trouvé : les sessions n'aiment pas les tableaux indexé, comme je le fais avec mes $m.
J'ai rajouté un mot devant ['test'.$m] et tout va mieux ^^


Merci pour ceux qui m'ont aidés,
@bientôt !

par Djay51 » 01 sept. 2008, 15:00

Tu déclares bien la session dans la page du panier (si ce n'est pas une page en include) : session_start(); :?:

par lenouvdu44 » 01 sept. 2008, 12:37

Je vais tester :/
Faut savoir que c'est depuis que j'ai fait des modifications dans le panier.php que cela arrive.
Je l'ai repris entièrement (refais entièrement) et cela n'a pas changer.

Je teste en retirant ce que tu me demandes.

EDIT : cela n'a rien changé :/

par AB » 01 sept. 2008, 02:42

Et si tu enlèves la ligne session_save_path('tmp'); ?

Problème de session

par lenouvdu44 » 01 sept. 2008, 02:10

Bonjour,
Je suis sur un problème de session depuis déjà pas mal d'heures :/ j'explique mon cas.

Gestion d'un panier, je récupère correctement l'articles, la quantité, etc que je dois ajouter au panier.
Je les ajoute automatiquement en Variable de SESSION, de style :
$_SESSION[$m]['quantity'] = $_POST[$i];
$_SESSION[$m]['prix'] = $_POST["prix$i"];
$_SESSION[$m]['largeur'] = $_POST["largeur$i"];
Où $m est l'index du produit dans le panier (1 si c'est le premier article, 2 si c'est le second, etc.)

Ensuite, j'affiche mon panier en indiquant directement le nom des variables de session.
La fois où j'ajoute les articles au panier, tout ce passe correctement, mon panier s'affiche avec les articles correspondant.
Par contre, si je retourne dans le panier, plus rien.

J'ai bien fouillé, rien trouvé, mais je suis rendu là :
dès que j'ajoute des articles au panier, je télécharge le fichier de session pour voir son contenu ... et il est vide : Donc normal que quand je vais retourner voir mon panier je n'ai plus rien.

Niveau structure, que des includes à partir de l'index.php (oui, c'est pas beau ^^), index.php qui contient donc tout au début :
session_save_path('tmp');
session_start();
Je le précise quand même, je ne détruis jamais la session, où rien d'autre du genre.
Testé sous FF, IE7, IE8.

Si vous avez des idées, merci ;)
@bientôt.