Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Messieurs : Connaissez le $_SESSION ?

7 réponses
Avatar
Pseudonyme
Hello,

Connaissez-vous le $_SESSION ?

On me dit d'utiliser le $_SESSION pour cacher des résultats MYSQL.

N'arrive pas à le faire marcher

<?php
session_start();
include_once("connector.php");

$cerise=$_REQUEST['cerise'];
$raisin=$_REQUEST['raisin'];

$rsstatus = getVignoble("ps.website_id=$cerise and b.raisin_id $raisin");

if(isset($_SESSION['status'])) {
$_SESSION['status']=$rsstatus;
$bob=$_SESSION['status'];
echo 'case 1 <br>';
} else {

$rsstatus = getVignoble("ps.cerise_id=$cerise and b.raisin_id $raisin");
$bob=$_SESSION['status'];
echo 'case 2 <br>';

}

// Je fais une selection dans getVignoble du statut du raisin qui
normalement est A.

// Je souhaite appeler ce A stocker dans la RAM du serveur.

// J'essaie plusieurs alternatives qui merdouillent. Celle-ci
fonctionne mais j'ai peur que la requête MYSQL soit tout même
réalisée :
echo $bob[0]['status'];

// Celle-ci marche pas (malheureusement) :
$_SESSION[0]['status']

// Celle-ci demande l'Array :
$_SESSION[0]['status']

//Pourtant la session est lancée, car cela fonctinone :
$_SESSION['myName'] = 'bpat1434';
echo '<br><br>My Name Is (session set): ' . $_SESSION['myName'];
?>

Merci, Merci 1000x pour votre retour

cougloff

7 réponses

Avatar
CrazyCat
Je te conseille de faire un var_dump() de $_SESSION pour voir ce que
contient réellement ta session.

De plus, tu fais:
$_SESSION['status']=$rsstatus;

Donc, tu dois essayer de lire $_SESSION['status'][0] et non pas
$_SESSION[0]['status']

--
Réseau IRC Francophone: http://www.zeolia.net
Aide et astuces webmasters : http://www.c-p-f.org
Communauté Francophone sur les Eggdrops: http://www.eggdrop.fr
Avatar
Olivier Miakinen
Bonjour,


Connaissez-vous le $_SESSION ?


De nom.
http://fr2.php.net/session

On me dit d'utiliser le $_SESSION pour cacher des résultats MYSQL.


Ah ? « Cacher » dans le sens « mettre en cache », ou dans le sens « ne
pas montrer » ? Quelle que soit la réponse, je n'ai pas l'impression que
ce soit vraiment adapté.

$cerise=$_REQUEST['cerise'];
$raisin=$_REQUEST['raisin'];

$rsstatus = getVignoble("ps.website_id=$cerise and b.raisin_id $raisin");


Bizarre cette syntaxe avec « = » d'un côté et une espace de l'autre. En
outre, que se passe-t-il si $_REQUEST['cerise'] est une chaîne vide, ou
bien comprend des caractères guillemets ?

if(isset($_SESSION['status'])) {
$_SESSION['status']=$rsstatus;


Si $_SESSION['status'] est positionné, tu te contrefiches de cette
valeur puisque tu l'écrases avec la valeur de $rsstatus.

$bob=$_SESSION['status'];


Puis tu mets cette même valeur dans $bob.

echo 'case 1 <br>';
} else {

$rsstatus = getVignoble("ps.cerise_id=$cerise and b.raisin_id $raisin");
$bob=$_SESSION['status'];


Au contraire, si $_SESSION['status'] n'est pas positionné, tu mets la
valeur vide dans $bob et tu fais un deuxième appel à ta fonction (dont
je suppose qu'elle fait une requête à la base de données).

Je suppose que tu as en fait oublié un « ! » dans « !isset() ».

Avatar
Bruno Desthuilliers
Hello,

Connaissez-vous le $_SESSION ?


Oui, je prend l'apéro avec lui presque tous les soirs !-)

On me dit d'utiliser le $_SESSION pour cacher des résultats MYSQL.


Je ne sais pas qui est "On", mais il n'a pas forcément raison. En
mettant en cache de cette façon le résultat d'une requête, tu risques
d'avoir des données pas à jour si la base est modifiée pendant la durée
de la session... Accessoirement, il n'est pas forcément plus rapide
(selon la requête, la taille du jeu de données, le système, la phase de
la lune etc) de récupérer des données en session que de faire une
requête (il se peut même que récupérer des données en session implique
une requête SQL -> si la session est stockée en base)

N'arrive pas à le faire marcher

<?php
session_start();
include_once("connector.php");

$cerise=$_REQUEST['cerise'];
$raisin=$_REQUEST['raisin'];

$rsstatus = getVignoble("ps.website_id=$cerise and b.raisin_id $raisin");


*Attention:* injection SQL possible.
http://www.google.fr/search?hl=fr&q=%22injection+sql

Accessoirement aussi, requête invalide => il manque un opérateur entre
'b.raisin' et '$raisin'.

if(isset($_SESSION['status'])) {
$_SESSION['status']=$rsstatus;
$bob=$_SESSION['status'];
echo 'case 1 <br>';
} else {

$rsstatus = getVignoble("ps.cerise_id=$cerise and b.raisin_id $raisin");
$bob=$_SESSION['status'];
echo 'case 2 <br>';

}



Euh... Tu essayes les trucs au petit bonheur jusqu'à ce que ça tombe en
marche par accident, ou tu essaies parfois de réfléchir ?

Reprenons: le but des sessions, c'est de stocker des données entre deux
requêtes d'un même utilisateurs. Donc, logiquement:

1/ tu commences par regarder si ta donnée est dans la session
2/ si elle n'y est pas, tu la calcule et tu la stoques
3/ enfin, tu l'utilises.

Ce qui nous donne:

<?php
session_start();
include_once("connector.php");

if(! isset($_SESSION['status'])) {
// pas encore en session
echo "pas en session<br />n";

$cerise = isset($_REQUEST['cerise']) && $_REQUEST['cerise'];
$raisin = isset($_REQUEST['raisin']) && $_REQUEST['raisin'];

if (! ($cerise && $raisin)) {
// gérer l'erreur mieux que ça...
die("paramètres manquants");
}

$cerise = ma_fonction_de_nettoyage($cerise);
$raisin = ma_fonction_de_nettoyage($raisin);

$where = "ps.website_id=$cerise and b.raisin_id=$raisin";
$_SESSION['status'] = getVignoble($where);
}

// maintenant, ça devrait être ok
$status = $_SESSION['status'];

var_export($status);
?>

Mais bon... je le repète: ce n'est pas *nécessairement* une bonne idée,
donc réfléchis bien à *pourquoi* tu veux mettre ça en session ('On m'a
dis de le faire' n'étant pas une bonne réponse).


Mes deux centimes...

Avatar
P'tit Marcel
On me dit d'utiliser le $_SESSION pour cacher des résultats MYSQL.


Je suis d'accord avec Bruno: ce n'est pas une top idée de cacher des
résultats d'une requête, sauf si ton site n'a qu'un seul utilisateur aiu
monde...


$cerise=$_REQUEST['cerise'];
$raisin=$_REQUEST['raisin'];
$rsstatus = getVignoble("ps.website_id=$cerise and b.raisin_id $raisin");


Il faudrait savoir ce qu'il y a dans cette fonction. A priori :
1- il manque un = avant $raisin
2- ton programme n'est pas protégé contre un hacker

pour contrer le 2, il faudrait ajouter avant la ligne getvignoble ces
instructions :
if(!is_numeric($cerise) or !is_numeric($raisin)) {
// gestion d'erreur
die();
}



if(isset($_SESSION['status'])) {


comme vu par Olivier, il manque un ! avant le isset (ou alors le reste a
été programmé par un Bandar-Log bourré)


eça
--
P'tit Marcel
stats sur les forums modérés http://www.centrale-lyon.org/ng/

Avatar
Bruno Desthuilliers
(snip)
2- ton programme n'est pas protégé contre un hacker

pour contrer le 2, il faudrait ajouter avant la ligne getvignoble ces
instructions :
if(!is_numeric($cerise) or !is_numeric($raisin)) {
// gestion d'erreur
die();
}


Heu... Qu'est-ce qui te permet d'affirmer que les champs ps.website_id
et b.raisin_id sont numériques ??? Tu connais le schéma de la base de
données ???

Avatar
Bruno Baguette

Heu... Qu'est-ce qui te permet d'affirmer que les champs ps.website_id
et b.raisin_id sont numériques ??? Tu connais le schéma de la base de
données ???


Dès fois - on n'en connait pas les raisons - la boule de cristal retombe
en marche, et permet de trouver la lumières dans l'ombre !

--
Bruno Baguette

Avatar
Guillaume
(snip)
2- ton programme n'est pas protégé contre un hacker

pour contrer le 2, il faudrait ajouter avant la ligne getvignoble ces
instructions :
if(!is_numeric($cerise) or !is_numeric($raisin)) {
// gestion d'erreur
die();
}


Heu... Qu'est-ce qui te permet d'affirmer que les champs ps.website_id
et b.raisin_id sont numériques ??? Tu connais le schéma de la base de
données ???
Je doute qu'il l'ait affirmé, mais plutôt qu'il soit parti sur l'idée de

champs numériques parce que la requête SQL compare ces champs à des
"_id", qui sont généralement numériques aussi :)

J'étais sur la même idée.

--
Guillaume