Discussion:
Messieurs : Connaissez le $_SESSION ?
(trop ancien pour répondre)
Pseudonyme
2008-02-21 14:27:19 UTC
Permalink
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
CrazyCat
2008-02-21 17:50:40 UTC
Permalink
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
Olivier Miakinen
2008-02-21 17:50:41 UTC
Permalink
Bonjour,
Post by Pseudonyme
Connaissez-vous le $_SESSION ?
De nom.
http://fr2.php.net/session
Post by Pseudonyme
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é.
Post by Pseudonyme
$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 ?
Post by Pseudonyme
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.
Post by Pseudonyme
$bob=$_SESSION['status'];
Puis tu mets cette même valeur dans $bob.
Post by Pseudonyme
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() ».
Bruno Desthuilliers
2008-02-21 17:50:41 UTC
Permalink
Post by Pseudonyme
Hello,
Connaissez-vous le $_SESSION ?
Oui, je prend l'apéro avec lui presque tous les soirs !-)
Post by Pseudonyme
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)
Post by Pseudonyme
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'.
Post by Pseudonyme
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...
P'tit Marcel
2008-02-22 10:08:05 UTC
Permalink
Post by Pseudonyme
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...
Post by Pseudonyme
$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();
}
Post by Pseudonyme
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/
Bruno Desthuilliers
2008-02-22 14:25:47 UTC
Permalink
P'tit Marcel a écrit :
(snip)
Post by P'tit Marcel
2- ton programme n'est pas protégé contre un hacker
pour contrer le 2, il faudrait ajouter avant la ligne getvignoble ces
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 ???
Bruno Baguette
2008-02-22 15:38:20 UTC
Permalink
Post by Bruno Desthuilliers
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
Guillaume
2008-02-22 15:43:14 UTC
Permalink
Post by Bruno Desthuilliers
(snip)
Post by P'tit Marcel
2- ton programme n'est pas protégé contre un hacker
pour contrer le 2, il faudrait ajouter avant la ligne getvignoble ces
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
Continuer la lecture sur narkive:
Loading...