Problème $_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 $_SESSION

Re: Problème $_SESSION

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

Re: Problème $_SESSION

par moogli » 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 ?

@+

Re: Problème $_SESSION

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

Re: Problème $_SESSION

par TRUNCKS » 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 :?

Re: Problème $_SESSION

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

Re: Problème $_SESSION

par TRUNCKS » 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. :(

Re: Problème $_SESSION

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

Re: Problème $_SESSION

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

Re: Problème $_SESSION

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

Re: Problème $_SESSION

par xTG » 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é.

Re: Problème $_SESSION

par TRUNCKS » 09 nov. 2011, 19:58

La même chose:

Un array(1) { ["type_base"]=> string(1) "3" } si toutes mes tables contiennent un image.

Et array array(0) { } si il y a une entrée du champ url_image_mini est vide.

Re: Problème $_SESSION

par xTG » 09 nov. 2011, 19:39

Les cookies sont-ils activés sur ton navigateur ? Car sans cookie il se peut qu'une nouvelle session débute.
Que donne un var_dump() sur la page de destination juste après le session_start() ? (et non pas à la fin comme tu le fais, ça sert à rien)

Re: Problème $_SESSION

par TRUNCKS » 09 nov. 2011, 18:56

Yep, j'ai enlevé le début car c'est toujours pareil, connexion etc...

Re: Problème $_SESSION

par xTG » 09 nov. 2011, 18:53

Et tu as un session_start() dans le premier code montré ?

Re: Problème $_SESSION

par TRUNCKS » 09 nov. 2011, 18:18

Voici ce que je vais passer en session:
( J'ai besoin de savoir le type de catégorie pour envoyer sur une page diffèrente )
$requete_type = "SELECT ID_categorie, type
        		 FROM categories
				 WHERE ID_categorie = '$id'";
									
//exécution de la requête:
$query_type = mysql_query($requete_type) or die( mysql_error());
$result_type = mysql_fetch_array ($query_type);
$result_categorie = $result_type['ID_categorie'];

if ($result_type['type'] == 'Classique'){
$type = "simple/images.php";
}

if ($result_type['type'] == "Expert"){
$type = "images.php";
}

$_SESSION['type_base'] = $result_categorie;

header ("Location: $type");
}
Et le code de ma page qui affiche les images:
<?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); ?>
<!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>';
}
var_dump($_SESSION);
?>
 
</center>
</body>
</html>