Problème $_SESSION

Eléphant du PHP | 184 Messages

08 nov. 2011, 22:11

Bonjour à vous,

Je ne sais pas pourquoi, quand je change de page, je n'arrive pas à récupèrer.
$categorie = $_SESSION['type_base']; 
J'ai bien session_start au début de chacune de mes pages.

Je passe d'une page à l'autre avec ça, si jamais c'est ça qui pose soucis:
<input type="button" name="nouveau" value="Nouvelle image" onclick="self.location.href='addimage.php'"/>
Elle est bien sur la page d'où je veux repartir, puisque je m'en sers pour une requête.

Merci à vous si vous avez une petite idée :)

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

09 nov. 2011, 00:17

Salut,

Que donne un var_dump($_SESSION); ?

Sinon passe le sid dans l'url.

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

Eléphant du PHP | 184 Messages

09 nov. 2011, 12:49

Je viens de vérifier un peu avec des echo $_session.

Je remarque que je perd SESSION quand je passe sur la supression par exemple:
<td align="center" valign="middle">&nbsp;<input type="button" name="Supprimer" value="Supprimer" onclick="supprimer(<?php echo $result['ID_image']; ?>)"/>&nbsp;</td> 

Code : Tout sélectionner

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

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

09 nov. 2011, 12:53

Je viens de vérifier un peu avec des echo $_session.
heu la si tu n'a pas un message d'erreur c'est qu'il y au n gros problème !!!!!!

c'est vard_ump($_SESSION); qui faut utiliser la casse (différence minuscule et majuscule) est importante car il s'agit la de deux variables différentes !

et y a quoi dans la page de suppression ?


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

Eléphant du PHP | 184 Messages

09 nov. 2011, 14:30

array(1) { ["type_base"]=> string(1) "1" }

J'ai bien ça qui correspond bien à l'id.
Je m'en sert de nouveau sur une page pour afficher des images:
$type = $_SESSION['type_base'];

 //Images

$sql_image = "SELECT * FROM images_simple WHERE categorie_id = '$type'";
Mais quand je veux revenir sur la page précédant, avec:

Code : Tout sélectionner

<input type="button" name="categories" value="Revenir aux articles" onclick="self.location.href='images.php'"/>
Le var_dump affiche array(0) { }

Pour la suppression, c'est une autre page, mais le problème est le même.
Quand je clique sur le bouton supprimer, j'ai la même erreur ( la suppression est sur la même page que l'affichage, elle appelle un js )

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

09 nov. 2011, 15:52

tu veux nous montrer le code de la page cela sera plus simple :)

s'il s'agit de la même page, est ce que le session_start() est valable pour tous les cas utilisant les sessions (genre un session_start() mis dans if mais on va dans le else ?).

est ce que tu n'aurais pas une variable qui se nomme $type_base (avec l'auto déclaration des variables et une affectation dessus et c'est la loose ;) )

est ce que ton niveau de rapport d'erreur est bien à E_ALL|E_STRICIT ? (voir error_reporting dans la doc :))

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

Eléphant du PHP | 184 Messages

09 nov. 2011, 16:10

Oui normalement pas de soucis avec les session.
J'ai une question avant de passer à la suite de mon post, c'est quelque chose qui se fait de faire passer une variable dans une session quand on a besoin de savoir
sur quoi on travaille ( dans mon cas, il me faut l'ID de la catégorie ) où c'est complètement farfelu ?

Je viens de fouiller un petit peu, et si, par exemple, il n'y a pas d'image à afficher, la session ne foire pas.

J'ai l'impression que cela vient de ma boucle qui affiche les 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>';?>

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

09 nov. 2011, 17:07

pour la question, non pas forcément ça dépend de ce que tu attend.

Par contre tu perd la possibilité de garde un marque page sur la galerie choisie (vu que la navigation ce fait via les sessions).
c'est un choix de conception :)

quand a ton code celui où tu gère la session serait plus intéressant.

et si avant cette requête le var_dump() indique que le tableau est vide c'est qu'il est vidé avant ou qu'il n'y a pas de session_start() pour ce cas. (les super globales sont toujours déclarées).

y a pas beaucoup de solution, soit la session contient quelque chose en haut de page et la tu fait un truc qui merde, soit y a jamais rien et la y a pas d'insertion dans le tableau de session ?

debug aussi l'insertion dans tableau de cette info (le $_SESSION['type_base'] = $truc).

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

Eléphant du PHP | 184 Messages

09 nov. 2011, 18:03

Je sais que c'est un peu hors sujet mais j'ai réussis après plusieurs test à préciser un peu plus.

Ce soucis ne se produit que si il y a un champ url_mini de ma base image vide.

De cette ligne:
while ($result_image = mysql_fetch_array($requete_image)){
        $image = $result_image['url_image_mini'];
En gros, si on upload pas d'image et qu'on se retrouve avec un champ vide à cet affichage.
Si il y a une image à chaque fois, pas de soucis.

Je sais que je pourrais mettre un truc qui refuse l'enregistrement s'il n'y a pas d'upload, mais j'aimerai bien comprendre pourquoi cela fait sauter la session :(

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

09 nov. 2011, 18:08

sans le code je ne peux t'aider. il n'y a pas 10000 possibilités la plus part sont listée ci dessus.
Il en faut peu pour être heureux ......

Eléphant du PHP | 184 Messages

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>

ViPHP
xTG
ViPHP | 7331 Messages

09 nov. 2011, 18:53

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

Eléphant du PHP | 184 Messages

09 nov. 2011, 18:56

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

ViPHP
xTG
ViPHP | 7331 Messages

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)

Eléphant du PHP | 184 Messages

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.