Variables session sous Drupal

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

Pour passer d'un script que j'ai programmé à l'autre, j'utilise des variables de session pour faire passer certaines informations. Or, les variables de session ne sont pas prises en compte lors du passage sur le 2e script.

A quoi cela est-il du ?

Merci de votre aide.

Forum : 

J'ai un formulaire avec un champ nommé "libelle", et je le récupère grâce au paramètre passé en POST.

J'aimerais mettre cette valeur dans une variable session pour la réutiliser plus tard.

Pour ce qui est du code, il s'agit d'un formulaire tout simple, et il semblerait que les variables sessions soient stockées dans la table sessions sours Drupal, donc je ne vois pas du tout comment les utiliser...

Merci de ton aide.

J'ai trouvé une alternative en utilisant des variables passées par URL.

Par contre, j'aimerais récupérer le nom de l'utilisateur en cours dans une variable session... est-ce qu'il en existe déjà une ?

Merci de votre aide.

Bjr,

Comment tu fait pour recuperer une variables session sous Drupal ?
Car j'aimerais faire une requete vers la base de données pour recuperer l'email de l'utilisateur connecté selon son name :

$rep = $bdd->query('SELECT mail FROM users WHERE name='.$user->name);

Merci

Bjr,

Comment tu fait pour recuperer une variables session sous Drupal ?
Car j'aimerais faire une requete vers la base de données pour recuperer l'email de l'utilisateur connecté selon son name :

$rep = $bdd->query('SELECT mail FROM users WHERE name='.$user->name);

Merci

Bjr,

Comment tu fait pour recuperer une variables session sous Drupal ?
Car j'aimerais faire une requete vers la base de données pour recuperer l'email de l'utilisateur connecté selon son name :

$rep = $bdd->query('SELECT mail FROM users WHERE name='.$user->name);

Merci

Bonjour,

dans tous les cas il vaut mieux passer par les API Drupal, et ne pas faire des requêtes sur la base de données.

Pour l'objet utilisateur, c'est ici : http://api.drupal.org/api/drupal/developer--globals.php/global/user/6

Par exemple, pour le mail, ce serait :

global $user;
echo "L'adresse mail de l'utilisateur ",$user->name," est : ",$user->mail;

Bjr Vincent
Merci por ta reponse.
1) Est-ce dangéreux de faire des requetes sur la base de données ? Pourquoi
Car j'ai fait des requetes, et ça a l'air de marcher

2) l'objet dont tu parles est "stdClass Object" ?. Faut-il faire un copier coller de cet objet pour le mettre dans le repertoire des modules ? comment ça se passe ?
Peux-tu m'expliquer claire comment on doit mettre tout cela en oeuvre ? je débute sur Drupal 7

Merci

1)Ce n'est pas dangereux, mais les API permettent de s'assurer que les règles d'accès sont respectées, et elles peuvent utiliser des objets en cache

2) l'objet est de type stdClass, mais la variable $user est déclarée dans tous les cas. Pas besoin de faire un copier/coller, il suffit juste de mettre dans ton code les lignes que j'ai donné en exemple.

... mon code
global $user;
// Adresse mail :
$adresse_mail = $user->mail;
... le reste de mon code

Tu peux faire un var_dump($user) pour avoir une idée de ce que ça comporte comme attributs

Les API sont incluses dans le core<:em> Drupal : tous est disponible dès que tu installes le produit.

C'est d'ailleurs la grande force de Drupal (et ce qui en fait autant un framework qu'un CMS), d'avoir de multiples API en standard, pour gérer une foultitude de choses, développer ses propres modules, etc.

Voir les hook_* qui permettent d'intervenir dans le déroulement des événements.

Pour tester, tu peux modifier par exemple une page de ton thème, et ajouter les lignes

global $user;
echo "<h2>Bonjour ",$user->name,"</h2>";

ça devrait afficher un message de bienvenue quelque part dans la page

Oui, mais quand je mets par exemple ce code pour afficher le noms et prenom :

$field_connexion_nom_value = $user->field_connexion_nom_value;
$field_connexion_prenom_value = $user->field_connexion_prenom_value;

ça m'affiche l'erreur suivante :

Notice : Undefined property: stdClass::$field_connexion_nom_value dans eval() (ligne 6 dans /srv/d_biolit/www/www.devt.biolit.fr/htdocs/modules/php/php.module(74) : eval()'d code).
Notice : Undefined property: stdClass::$field_connexion_prenom_value dans eval() (ligne 7 dans /srv/d_biolit/www/www.devt.biolit.fr/htdocs/modules/php/php.module(74) : eval()'d code).

OK, en fait les attributs de la stdClass sont les attributs par défaut.

Ici je pense qu'il s'agit de champs ajoutés. Dans ce cas, ce serait plutôt :

global $user;
$user_fields = user_load($user->uid);

$field_connexion_nom_value= $user_fields->field_connexion_nom_value['und']['0']['value'];
$field_connexion_prenom_value= $user_fields->field_connexion_prenom_value['und']['0']['value'];

Via http://drupal.org/node/1063552

J'ai bien mis :

global $user;
$user_fields = user_load($user->uid);

$field_connexion_nom_value= $user_fields->field_connexion_nom_value['und']['0']['value'];
$field_connexion_prenom_value= $user_fields->field_connexion_prenom_value['und']['0']['value'];

Et ensuite, quand je passe le nom en paramètre pour l'afficher :

<a href="http://atlantique.biolit.fr/index.php?lastName=

<?php
 
echo $field_connexion_nom_value;
?>

J'ai apparemment la même erreur :

Notice : Undefined property: stdClass::$field_connexion_nom_value dans eval() (ligne 5 dans /srv/d_biolit/www/www.devt.biolit.fr/htdocs/modules/php/php.module(74) : eval()'d code).
Notice : Undefined property: stdClass::$field_connexion_prenom_value dans eval() (ligne 6 dans /srv/d_biolit/www/www.devt.biolit.fr/htdocs/modules/php/php.module(74) : eval()'d code).

Je comprends mieux le problème. En fait il aurait fallu commencer par l'exemple...

Les infos que j'ai données sont correctes pour des données liées à un profil utilisateur, qui est connecté. Dans ce cas, Drupal instancie sa classe $user avec les données.

Je pense qu'il vaudrait mieux repartir du besoin exact. A quoi correspond le lastname passé en paramètre ?
Si c'est dans un module perso, ce devrait plutôt être :

?q=/monsupermodule/list/valeur_du_lastname

ou quelque chose dans ce genre.

J'avoue que je ne comprends plus trop le problème, ou plutôt comment le traiter...

Entièrement d'accord avec Damien !

C'est à force de faire n'importe quoi qu'on ..... continue à faire n'importe quoi ...
Apprenez les bonnes pratique directement :)

Drupal est simple d'utilisation et les API telles form, etc ... sont vraiment puissantes.
Renseignez-vous bien sur les globales proposées par drupal comme $user, $language, ...
Les différentes fonctions natives aussi qui permettent de récupérer ce que vous voulez !

Sinon pour revenir au sujet de départ, je n'ai jamais eu le cas de session détruite dans un site ...

Par contre j'ai eu le cas en passant http à https !

J'y ai remédier en passant le sessid dans l'url et je reconstruis la session de cette façon :

$sessid = $_GET['SESSID'];
$var = sess_read($sessid);

session_start();

Ensuite, toute les infos de la session se trouvent dans $var.

A+