Variables session sous Drupal

Catégories:

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.

#

peut on avoir un bout de code et un cas d’utilisation precis pour t’aider ?

#

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.

#

Il suffit normalement d’utiliser la variable global $_SESSION, comme d’habitude en PHP. Si votre problème est ailleurs, un bout de code aiderait bien :)

  • DamZ
#

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.

#

essayes avec la variable $user->name

#

Merci, cela marche bien.

J’ai du ajouter global $user ; devant. ;-)

@+

#

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

#

Merci, mais quel API faut-il dont utiliser et dans quel repertoire faut-il mettre ce fichier ou dossier de l’API. Je peut le mettre dans le repertoire des «modules» ?

Merci

#

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…

#

Bjr

le lastName passé en paramètre est une variable qui correspond au nom de l’utilisateur connecté. cette variable «lastName» sera affichée dans une page( avec un «echo»).

#

Je vous recommenderais de consulter le Module developer’s guide, et en particulier de suivre le tutoriel de manière complète.

Vous avez des a priori sur Drupal et son fonctionnement qui sont totalement faux.

#

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 !

Drupal 6 Certified

#

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+

Drupal 6 Certified

Syndiquer le contenu