Problème $_SESSION

ViPHP
xTG
ViPHP | 7331 Messages

09 nov. 2011, 20:16

Okay, donc la valeur se perd lorsque tu changes de page après celle-ci ?
Quel est le code complet de la page vers laquelle tu te rends ? Si la session se vide ce n'est pas à cause du contenu des codes que tu nous as montré.

Eléphant du PHP | 184 Messages

09 nov. 2011, 20:34

Voici ma page image:

C'est à partir de celle ci que je vais vers la liste de mes images en cliquant sur "Gestion des images" où vers laquelle je reviens après avoir consulter ces dernières:
<?php session_start(); ?> 
<?php require_once('../../connexion/localhost.php');

$conn = mysql_connect($hostname_localhost, $username_localhost, $password_localhost) or trigger_error(mysql_error(),E_USER_ERROR);
 
mysql_query("SET CHARACTER SET 'utf8';")or die(mysql_error()); 
 
mysql_select_db($database_localhost, $conn); 
 
//param modifiables
$nb_par_page=2;
var_dump($_SESSION);
if(isset($_SESSION['type_base']) || isset($_GET['page'])){ //le bouton valider a été cliqué ou appel par pagination

	//nom du script
	$currentScript = $_SERVER["PHP_SELF"];
	//recup id_produit sélectionné ou passé par l'url
	if(isset($_SESSION['type_base'])){
		$categorie_pagination = $_SESSION['type_base'];
	}else{
		$categorie_pagination = $_GET['categ'];
	}
	//recup page demandée passée par l'URL
	if(isset($_GET['page'])){
		$page_courante=$_GET['page'];
	}else{
		$page_courante=0;
	}
	//calcul nombre de pages
	$sql_pagination = "SELECT * FROM articles WHERE categorie_id = '".$categorie_pagination."'"; 
	$requete_pagination = mysql_query($sql_pagination) or die( mysql_error());
	$nb_enr=mysql_num_rows($requete_pagination);
	$nb_pages=ceil($nb_enr/$nb_par_page);
 
	//calcul limites d'affichage 
	$debut=$page_courante*$nb_par_page;
 
	//requette avec les limites
	$sql_pagination = "SELECT * FROM articles WHERE categorie_id = '".$categorie_pagination."' LIMIT ".$debut.",".$nb_par_page." "; 
	$requete_pagination = mysql_query($sql_pagination) or die( mysql_error()); 
}
else{
	
	$categorie_pagination = $_SESSION['type_base'];
	$sql_pagination = "SELECT * FROM articles WHERE categorie_id = '".$categorie_pagination."'"; 
	$requete_pagination = mysql_query($sql_pagination) or die( mysql_error());
	$nb_enr=mysql_num_rows($requete_pagination);
	$nb_pages=ceil($nb_enr/$nb_par_page);
	
}
?>
<!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" />
 
<title>Liste des articles</title>

<link href="../../style.css" rel="stylesheet" type="text/css"/>
 
</head>
 
<body>
 
<script type="text/javascript">
 
function supprimer(id)
 
   {
      if(confirm('Voulez vous vraiment supprimer ?'))
      {
        window.open("?Supprimer=Supprimer&id="+id,"_self");
      }
   }
 
</script>
 
<center>
 
<?php
 
if(isset($_GET['id'])){ 
 
$id = $_GET['id'];

mysql_query("DELETE FROM articles WHERE ID_article='$id'")or die(mysql_error()); 
 
echo '<br/><br/>'.'<p style="color:#ff0000;font-weight:bold;">Article correctement supprimé</p>'."<br/><br/><a href=\"addarticle.php\">Ajouter un nouvel article</a>"."<br/><br/><a href=\"images.php\">Revenir à l'accueil</a>";
 
} 
 
else{
?>

<br />

<p style="text-align: center;"><input type="button" name="nouveau" value="Nouvel article" onclick="self.location.href='addarticle.php'"/>&nbsp;&nbsp;&nbsp;&nbsp;<input type="button" name="categories" value="Revenir aux catégories" onclick="self.location.href='../admin.php'"/>&nbsp;&nbsp;&nbsp;&nbsp;<input type="button" name="utilisateurs" value="Gestion des utilisateurs" onclick="self.location.href='../../utilisateurs.php'"/>&nbsp;&nbsp;&nbsp;&nbsp;

<a href="../../index.php">Se déconnecter</a>

<?php

echo '<br/><br/><br/>';
 
	//affichage
	echo '<table align="center" border="1">'; //tableau
	echo '<tr><th>&nbsp;ID article&nbsp;</th><th>&nbsp;Titre&nbsp;</th><th>&nbsp;Titre anglais&nbsp;</th></tr>'; 
	while ($result = mysql_fetch_array($requete_pagination)) {
		echo '<tr>'; //ligne
		echo '<td align="center" valign="middle">&nbsp;'.$result['ID_article'].'&nbsp;</td>'; //colonne
		echo '<td align="center" valign="middle">&nbsp;'.$result['titre_article'].'&nbsp;</td>';
        echo '<td align="center" valign="middle">&nbsp;'.$result['titre_article_en'].'&nbsp;</td>';?>
        <td align="center" valign="middle">&nbsp;<input type="button" name="Supprimer" value="Supprimer" onclick="supprimer(<?php echo $result['ID_article']; ?>)"/>&nbsp;</td> 
    <td align="center" valign="middle">
 
<?php 
 
echo '&nbsp;'.'<a href="modifier.php?ID_article='.$result['ID_article'].'">
Modifier</a>'.'&nbsp;';
 
echo '</tr>'; //fin ligne
}
echo '</table>';

//pagination:
// gestion numeros de page + page courante
$i=0;
$j=1;
 
if($nb_enr>$nb_par_page){
	while($i<$nb_pages){
	if($i!=$page_courante){
    echo "<a href=\"".$currentScript."?page=".$i."&categ=".$categorie_pagination."\">&nbsp; ".$j." &nbsp;</a>"; 
					//on passe par l'URL le numero de page demandée (commence à 0) et l'id_produit selectionné
} else {
echo  "<a href=\"".$currentScript."?page=".$i."&categ=".$categorie_pagination."\" >&nbsp;<b> ".$j." </b>&nbsp;</a>"; 
				   }
	$i++;
	$j++;
	}
  }?>
<br /><br />
<p style="text-align: center;"><input type="button" name="nouvelle_image" value="Gestion des images" onclick="self.location.href='gestion_images.php'"/>
<?php
}
?>

</center>
</body>
</html>

ViPHP
xTG
ViPHP | 7331 Messages

09 nov. 2011, 20:38

Rien de suspect non plus... Donc le var_dump() de cette page affiche un array vide ?
Si c'est le cas affiches session_id() sur tes trois pages et regardes si sa valeur ne change pas au cours de la navigation.
Cela montrerai que la session est perdue et qu'une nouvelle démarre.

Eléphant du PHP | 184 Messages

09 nov. 2011, 20:52

C'est sur la page de gestion des images que la connexion foire, car à l'arrivée, les images s'affichent bien, et j'ai toujours l'id dans l'array, mais il suffit simplement d'actualiser la page
pour que l'array tombe a 0 ( donc sur la même page )

Cela ne me le fait sur aucune autre page:
<?php session_start();
session_id();?>
<?php var_dump($_SESSION);?>
<?php require_once('../../connexion/localhost.php');

$conn = mysql_connect($hostname_localhost, $username_localhost, $password_localhost) or trigger_error(mysql_error(),E_USER_ERROR);
 
mysql_query("SET CHARACTER SET 'utf8';")or die(mysql_error()); 
 
mysql_select_db($database_localhost, $conn); ?>
<!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" />
 
<title>Liste des articles</title>

<link href="../../style.css" rel="stylesheet" type="text/css"/>
 
</head>
 
<body>

<script type="text/javascript">
 
function supprimer(id)
 
   {
      if(confirm('Voulez vous vraiment supprimer ?'))
      {
        window.open("?Supprimer=Supprimer&id="+id,"_self");
      }
   }
 
</script>
 
<center>
 
<?php


if(isset($_GET['id'])){ 
 
$id = $_GET['id'];

$requete_supp = "SELECT *
        		 FROM images_simple
				 WHERE ID_image = '$id'";
				 								
//exécution de la requête:
$requete_query_supp = mysql_query($requete_supp) or die( mysql_error());
$result_supp_array = mysql_fetch_array ($requete_query_supp);
$supp_image = $result_supp_array['url_image'];
$supp_image_mini = $result_supp_array['url_image_mini'];

//nom de ton fichier ici.
$filename = "../../$supp_image";
$filename2 = "../../$supp_image_mini";

unlink($filename);
unlink($filename2);
 

mysql_query("DELETE FROM images_simple WHERE ID_image='$id'")or die(mysql_error()); 
 
echo '<br/><br/>'.'<p style="color:#ff0000;font-weight:bold;">Image correctement supprimée</p>'."<br/><br/><a href=\"addimage.php\">Ajouter une nouvelle image</a>"."<br/><br/><a href=\"images.php\">Revenir à l'accueil</a>";
 
} 
 
else{ 
?>

<br />

<p style="text-align: center;"><input type="button" name="nouveau" value="Nouvelle image" onclick="self.location.href='addimage.php'"/>&nbsp;&nbsp;&nbsp;&nbsp;<input type="button" name="categories" value="Revenir aux articles" onclick="self.location.href='images.php'"/>&nbsp;&nbsp;&nbsp;&nbsp;<input type="button" name="utilisateurs" value="Gestion des utilisateurs" onclick="self.location.href='../../utilisateurs.php'"/>&nbsp;&nbsp;&nbsp;&nbsp;

<a href="../../index.php">Se déconnecter</a>

<?php

echo '<br/><br/>';

//Images
$sql_image = "SELECT * FROM images_simple WHERE categorie_id = '".mysql_real_escape_string($_SESSION['type_base'])."'";
$requete_image = mysql_query($sql_image) or die( mysql_error());

echo '<table align="center" border="1">'; //tableau
echo '<tr><th>&nbsp;Images&nbsp;</th></tr>'; 
	while ($result_image = mysql_fetch_array($requete_image)){
	$image = $result_image['url_image_mini'];
		echo '<tr>'; //ligne
		echo '<td align="center" valign="middle"><img src="../../'.$image.'"</img></td>';?>
		      <td align="center" valign="middle">&nbsp;<input type="button" name="Supprimer" value="Supprimer" onclick="supprimer(<?php echo $result_image['ID_image']; ?>)"/>&nbsp;</td> 

<?php 
 
echo '</tr>'; //fin ligne
	}
echo '</table>';
}
?>
 
</center>
</body>
</html>
Par contre je ne comprend pas le rapport, mais c'est bien uniquement si il y a un champ vide dans la base image au niveau de l'url qui s'affiche dans la boucle ( à la fin )
Si j'ai bien une image à chaque fois, pas de soucis.

Je n'ai aucune perte de session sur les autres pages ni en arrivant jusqu’à celle là.
Je récupère bien la session, puisque les images s'affichent ( et elles ont besoin de l'id passé en session pour s'afficher ) mais j'ai l'impression qu'elle dégage tout de suite.

Eléphant du PHP | 184 Messages

09 nov. 2011, 23:13

Cela ne peut pas venir de ma base de donnée ?

Mon champ url_mini où je stocke le chemin vers l'image que j'affiche est un varchar(200), la base est en innodb. :(

ViPHP
xTG
ViPHP | 7331 Messages

10 nov. 2011, 10:17

Même si ta bdd a des champs erronés le fait que tu perdes la variable de session alors qu'il ne semble y avoir aucune instruction permettant de l'évincer est bizarre.
Je n'ai aucune idée supplémentaire pour trouver d'où vient le problème cela dit.

Eléphant du PHP | 184 Messages

10 nov. 2011, 10:59

Je m'approche, je m'approche, même si je ne comprend pas pourquoi, je sais d'où cela viens.

C'est le ../../ qui est en cause:
<img src="../../'.$image.'"</img></td>';?>
J'ai déplacé mon dossier image pour pouvoir l'écrire comme cela:
<img src="'.$image.'"</img></td>';?>
Et là plus de soucis.

Reste à comprendre et à reformuler :?

Eléphant du PHP | 184 Messages

10 nov. 2011, 13:40

En fait je viens de comprendre.

J'ai l'impression que la session se perd parce que je le demande de se rendre dans un dossier qui se trouve à deux niveau au dessus.
J'ai déplacé le dossier image pour tester, je peux parfaitement me rendre dans un sous dossier inférieur, mais pas remonter sans perdre la session.

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

10 nov. 2011, 15:24

oula y a comme un soucis la , le fait d'afficher une image ça ne fait pas partis de php ça O_o

a tu des log serveur où tu pourrais voir cela ?

les images sont dans le server root ?

doit y avoir d'autre chose, a tu debugger tout les script mis en jeux dans cette page ?

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

Eléphant du PHP | 184 Messages

10 nov. 2011, 17:44

J'ai trouvé cela au niveau des logs, je ne sais pas si c'est cela dont vous avez besoin ( c'est sous wamp )

Code : Tout sélectionner

127.0.0.1 - - [10/Nov/2011:16:15:21 +0100] "GET /admin/upload/admin.php HTTP/1.1" 200 1212 127.0.0.1 - - [10/Nov/2011:16:15:21 +0100] "GET /admin/images/fond.jpg HTTP/1.1" 404 219 127.0.0.1 - - [10/Nov/2011:16:15:24 +0100] "POST /admin/upload/admin.php HTTP/1.1" 302 429 127.0.0.1 - - [10/Nov/2011:16:15:24 +0100] "GET /admin/upload/simple/images.php?ID_image=3 HTTP/1.1" 200 2544 127.0.0.1 - - [10/Nov/2011:16:15:24 +0100] "GET /admin/images/fond.jpg HTTP/1.1" 404 219 127.0.0.1 - - [10/Nov/2011:16:15:26 +0100] "GET /admin/upload/admin.php HTTP/1.1" 200 1212 127.0.0.1 - - [10/Nov/2011:16:15:26 +0100] "GET /admin/images/fond.jpg HTTP/1.1" 404 219 127.0.0.1 - - [10/Nov/2011:16:15:28 +0100] "POST /admin/upload/admin.php HTTP/1.1" 302 429 127.0.0.1 - - [10/Nov/2011:16:15:28 +0100] "GET /admin/upload/simple/images.php?ID_image=3 HTTP/1.1" 200 2544 127.0.0.1 - - [10/Nov/2011:16:15:28 +0100] "GET /admin/images/fond.jpg HTTP/1.1" 404 219 127.0.0.1 - - [10/Nov/2011:16:15:29 +0100] "GET /admin/upload/simple/gestion_images.php HTTP/1.1" 200 2004 127.0.0.1 - - [10/Nov/2011:16:15:29 +0100] "GET /admin/ HTTP/1.1" 200 1022 127.0.0.1 - - [10/Nov/2011:16:15:29 +0100] "GET /admin/images/fond.jpg HTTP/1.1" 404 219 127.0.0.1 - - [10/Nov/2011:16:15:30 +0100] "GET /admin/upload/simple/images.php HTTP/1.1" 200 1638 127.0.0.1 - - [10/Nov/2011:16:15:30 +0100] "GET /admin/images/fond.jpg HTTP/1.1" 404 219 127.0.0.1 - - [10/Nov/2011:16:15:32 +0100] "GET /admin/upload/admin.php HTTP/1.1" 200 1212 127.0.0.1 - - [10/Nov/2011:16:15:32 +0100] "GET /admin/images/fond.jpg HTTP/1.1" 404 219
Mes images sont à un niveau en dessous de la racine:

www/admin/images ----> dossier image
www/admin/categories ----> dossier des scripts