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.
- Vous devez vous identifier ou créer un compte pour écrire des commentaires

peut on avoir un bout de code et un cas d’utilisation precis pour t’aider ?
lxs
19
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.
cyberkate
30
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 :)Damien Tournoud
808
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.
cyberkate
30
essayes avec la variable $user->name
alkahan
357
Merci, cela marche bien.
J’ai du ajouter global $user ; devant. ;-)
@+
cyberkate
30
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
tchoul
154
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
tchoul
154
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
tchoul
154
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;
vincent59
2428
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
tchoul
154
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 codeglobal $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
vincent59
2428
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
tchoul
154
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
vincent59
2428
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).
tchoul
154
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
vincent59
2428
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=
<?phpecho $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).
tchoul
154
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_lastnameou quelque chose dans ce genre.
J’avoue que je ne comprends plus trop le problème, ou plutôt comment le traiter…
vincent59
2428
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»).
tchoul
154
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.
Damien Tournoud
808
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
ceadreak
80
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
ceadreak
80