Page 1 sur 1
pb avec les sessions
Posté : 29 juil. 2006, 21:29
par yann_g
bonjour,
j'ai un petit problème avec les sessions, une de mes variables est modifiée sans que je le demande. lorsque un utilisateur se loggue, j'affecte ma variable de session :
$_SESSION['id'] = mysql_result($req, 0, 'id');
et sur une de mes pages, pour chercher à résoudre un bug, j'affiche ma variable de session :
echo $_SESSION['id'];
et je m'aperçois que sa valeur est celle d'un $id récupéré par la méthode GET !!!
quelqu'un peut-il m'éclairer ???
(je précise que nulle part dans mon script je ne redéfinis $_SESSION['id'] - le bug ne se produit que sur mon serveur distant, sur mon serveur local tout va bien...)
Posté : 29 juil. 2006, 21:54
par Ouaibou
Salut,
Serait-il possible de voir le reste du script ? Car sinon je suis pas sur que quelqu'un puisse t'aider.
+
Posté : 29 juil. 2006, 22:21
par Truc
Salut,
Encore une histoire de
register_globals... exécute un phpinfo() pour vérifier la valeur (on-off).
Si tu peux modifier la configuration du serveur il est préférable de mettre cette directive à "off"
Toutes les variables passées par l'url doivent être récupérées par $_GET donc dans ton cas tu devrais avoir:
$id = $_GET['id'];
Tu peux aussi changer le nom de la variable tout simplement (mais c'est juste pour contourner):
$_SESSION['id_user'] = mysql_result($req, 0, 'id');
Posté : 31 juil. 2006, 16:25
par yann_g
je n'ai pas la possibilité de le mettre à off. (il est effectivement sur on)
il ne reste que la solution d'esquive ?
merci
Posté : 31 juil. 2006, 17:07
par Truc
Le principal c'est de récupérer toutes les variables en passant par les
super globales POST, GET, SESSION ...
Posté : 31 juil. 2006, 17:15
par yann_g
c'est ce que je fais
Posté : 31 juil. 2006, 17:18
par Truc
Les joies du register_globals
Montre un peu le code où le problème se présente.
Posté : 31 juil. 2006, 17:48
par yann_g
session_start();
// redir si utilisateur pas loggué
if (!isset($_SESSION['id'])) header ('Location: login.php?redir=rsc_manage.php');
// connection BDD
include('connexion.php');
// démarrage de la session si cookie
if (!isset($_SESSION["moniker"]) && isset($_COOKIE["OOImoniker"])) {
$sql = "SELECT * FROM utilisateurs WHERE moniker = '".$_COOKIE['OOImoniker']."'";
$req = mysql_query($sql) or die (mysql_error());
if (mysql_num_rows($req) > 0) {
$_SESSION["moniker"] = $_COOKIE["OOImoniker"];
$_SESSION["id"] = mysql_result($req, 0, "id");
$_SESSION['email'] = mysql_result($req, 0, "email");
}
}
//RéCUP BDD
if (isset($_GET['id'])) {
$id = $_GET['id'];
$sql = "SELECT * FROM rsc_samples WHERE id = ".$id;
$req = mysql_query($sql) or die(mysql_error());
$fic_adresse = mysql_result($req, 0, 'adresse');
$fic_nom_descr = mysql_result($req, 0, "nom");
$fic_cat = mysql_result($req, 0, "categories");
$fic_format = mysql_result($req, 0, "format");
$fic_descr = mysql_result($req, 0, 'description');
$fic_date = mysql_result($req, 0, "date");
}
else header('Location: rsc_manage.php');
if (isset($_POST['poste'])) {
if ($_POST['poste'] == "YES") {
$reponse = $_POST['delete'];
$id_ceaumor = $_POST['id_ceaumor'];
// on vérifie que l'auteur est bien l'utilisateur loggué
$sql = "SELECT * FROM rsc_samples WHERE id = ".$id_ceaumor;
$req = mysql_query($sql) or die(mysql_error());
$id_auteur = mysql_result($req, 0, "id_auteur");
if ($reponse == "oui" && $id_auteur == $_SESSION['id']) {
$sql = "DELETE FROM rsc_samples WHERE id = ".$id_ceaumor;
mysql_query($sql) or die(mysql_error());
$_SESSION['msg'] = FILE_DELETED;
$_SESSION['msg_class'] = "ok";
}
elseif ($reponse == "non") {
$_SESSION['msg'] = FILE_NOT_DELETED;
$_SESSION['msg_class'] = "ok";
}
if ($id_auteur != $_SESSION['id']) {
$_SESSION['msg'] = YOU_ARE_NOT_THE_OWNER_OF_THOSE_FILES;
$_SESSION['msg_class'] = "err";
}
header ('Location: rsc_manage.php');
}
}
// si pas d'erreur
if (!isset($err1) && !isset($err2[0]) && isset($_POST['poste'])) {
$sql = "UPDATE rsc_samples SET adresse = '".$fic_adresse."', format = '".$fic_format."', nom = '".$fic_nom_descr."', description = '".$fic_descr."', categories = '".$fic_cat."' WHERE id = ".$id;
mysql_query($sql) or die ($sql."<br />".mysql_error());
header('Location: rsc_manage.php');
}
?>
Posté : 31 juil. 2006, 18:30
par logikstik
Je trouve ça plus clair de cette façon, non ?
<?php
session_start();
// redir si utilisateur pas loggué
if (!isset($_SESSION['id']))
{
header('Location: login.php?redir=rsc_manage.php');
}
// connection BDD
include 'connexion.php';
// démarrage de la session si cookie
if (!isset($_SESSION['moniker']) && isset($_COOKIE['OOImoniker']))
{
$sql = "SELECT * FROM utilisateurs WHERE moniker = '".$_COOKIE['OOImoniker']."'";
$req = mysql_query($sql) or die (mysql_error());
$raw = mysql_fetch_array($req);
if (mysql_num_rows($req) > 0)
{
$_SESSION["moniker"] = $_COOKIE['OOImoniker'];
$_SESSION["id"] = $raw['id'];
$_SESSION['email'] = $raw['email'];
}
}
// RéCUP BDD
if (isset($_GET['id']))
{
$id = $_GET['id'];
$sql = "SELECT *
FROM rsc_samples
WHERE id = ".$id;
$req = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_array($req);
}
else
{
header('Location: rsc_manage.php');
}
if (isset($_POST['poste']))
{
if ($_POST['poste'] == 'YES')
{
$reponse = $_POST['delete'];
$id_ceaumor = $_POST['id_ceaumor'];
// on vérifie que l'auteur est bien l'utilisateur loggué
$sql = "SELECT *
FROM rsc_samples
WHERE id = ".$id_ceaumor;
$req = mysql_query($sql) or die(mysql_error());
$id_auteur = mysql_result($req, 0, 'id_auteur');
if ($reponse == 'oui' && $id_auteur == $_SESSION['id'])
{
$sql = "DELETE FROM rsc_samples WHERE id = ".$id_ceaumor;
mysql_query($sql) or die(mysql_error());
$_SESSION['msg'] = FILE_DELETED;
$_SESSION['msg_class'] = 'ok';
}
else if ($reponse == 'non')
{
$_SESSION['msg'] = FILE_NOT_DELETED;
$_SESSION['msg_class'] = 'ok';
}
if ($id_auteur != $_SESSION['id'])
{
$_SESSION['msg'] = YOU_ARE_NOT_THE_OWNER_OF_THOSE_FILES;
$_SESSION['msg_class'] = 'err';
}
header('Location: rsc_manage.php');
}
}
// si pas d'erreur
if (!isset($err1) && !isset($err2[0]) && isset($_POST['poste']))
{
$sql = "UPDATE rsc_samples
SET adresse = '".$row['adresse']."',
format = '".$row['format']."',
nom = '".$row['nom']."',
description = '".$row['description']."',
categories = '".$row['categories']."'
WHERE id = ".$id;
mysql_query($sql) or die ($sql."<br />".mysql_error());
header('Location: rsc_manage.php');
}
?>
Posté : 31 juil. 2006, 18:32
par Truc
Essaie en renommant la variable, sinon je ne vois pas d'erreurs:
$id = $_GET['id'];
en
$id_url = $_GET['id'];
$sql = "SELECT * FROM rsc_samples WHERE id = ".$id_url;
sinon modifie l'identifian de session :
$_SESSION['id_user']
ce n'est pas vraiment une solution d'esquive mais c'est surtout que les variables sont automatiquement crées avec le register_global à "on" et avec les mêmes indices...

Posté : 31 juil. 2006, 18:37
par yann_g
merci, je me serais arraché les cheveux à dépouiller mon code ! merci encore !
Posté : 31 juil. 2006, 18:43
par Truc
On peut considérer que c'est [Résolu] ?
Posté : 31 juil. 2006, 18:45
par yann_g
hop ! tout-à-fait !