Sessions PHP

Sessions PHP - PHP - Programmation

Marsh Posté le 02-05-2012 à 17:41:08    

Bonjour, je bloque sur les sessions.
J'ai crée deux pages :

Code :
  1. <?php
  2. session_start() ;
  3. $login = isset($_POST['login']) ? $_POST['login'] : '';
  4. $_SESSION["login"]="$login";
  5. ?>
  6. <FORM method=POST action="ses2.php">
  7. login : <INPUT type=text name="login" >
  8. <INPUT type="submit" value="Envoyer">
  9. </FORM>


Page 2 :

Code :
  1. <?php
  2. session_start() ;
  3. echo $_SESSION["login"];
  4. ?>


Rien ne s'affiche sur la 2ème page ...
Merci;


Message édité par lp77 le 02-05-2012 à 17:41:55
Reply

Marsh Posté le 02-05-2012 à 17:41:08   

Reply

Marsh Posté le 03-05-2012 à 00:50:49    

A première vue ton formulaire appelle ta 2ème page, il est donc peu probable que les actions de la première page aient une influence.

 

page1.php

Code :
  1. <form method="post" action="page2.php">
  2.     login: <input type="text" name="login" />
  3.     <input type="submit" value="Envoyer" />
  4. </form>
 

page2.php:

Code :
  1. <?php
  2.     session_start();
  3.     $_SESSION["login"] = $_POST["login"];
  4.     echo $_SESSION[login"];
  5. ?>
 

C'est la page appelée dans l'action du formulaire de la page1.php qui va recevoir la variable $_POST et donc pouvoir faire l'affectation dans ta variable de session. D'autre part je ne sais pas s'il est très recommandable de mettre des session_start() sur toutes tes pages.

 

Enfin il faut faire attention aux données passées dans les formulaires si tu ne veux pas te retrouver avec quelques petits malins qui profiteraient de failles.


Message édité par xaeon le 03-05-2012 à 00:53:40
Reply

Marsh Posté le 03-05-2012 à 00:55:00    

Salut

 

tu as du t'emmêler les pinceaux ;)

 

Si tu regardes bien ton code, tu donnes à ta variable de session le résultat du formulaire sur la même page... ça ne marchera pas ! Tu dois assigner après l'envoi du formulaire ;)

 

EDIT : Grilled par @xaeon :D ^^


Message édité par Buldozerben le 03-05-2012 à 00:55:50

---------------
Topic Ach/Vds/Ech jeux vidéo
Reply

Marsh Posté le 03-05-2012 à 08:38:27    

c'était pour tester les sessions, le but est de demander les paramètres de connexion à une BDD dans une page et de les récupérer dans toutes les pages qui suivent (pour rouvrir une connexion avec les mêmes paramètres), comment je dois m'y prendre ?
Merci ..

Reply

Marsh Posté le 03-05-2012 à 09:41:01    

Salut !
 
J'imagine que tu as du faire le tour des sites comme le site du zéro ou autre pour te faire au moins une idée. Tout y est bien expliqué tu devrais t'en sortir à moindre frais. Si tu ne l'as pas fait commence au moins par là, ou avec un bon livre !
 
Sinon @xaeon t'a montré comment faire ... si tu ne comprends pas voici comment en reprenant ton code modifié pour que cela fonctionne  ... mais attention tu fais des erreurs d'apostrophe ou de double guillement et les balises en majuscule ça date de l'an 2000 ^^ :
 
page 1 :
 

Code :
  1. <?php
  2. session_start() ;
  3. ?>
  4. <form method="post" action="ses2.php">
  5. login : <input type=text name="login" >
  6. <input type="submit" value="Envoyer">
  7. </form>


 
page 2 :
 

Code :
  1. <?php
  2. session_start() ;
  3. $login = isset($_POST['login']) ? $_POST['login'] : '';
  4. $_SESSION['login']=$login;
  5. echo $_SESSION['login'];
  6. ?>


 
 
Bon courage ;)


---------------
Topic Ach/Vds/Ech jeux vidéo
Reply

Marsh Posté le 03-05-2012 à 10:12:48    

Merci, Je veux demander les paramètres de connection dans un formulaire (1ère page) et donner ces paramètres à toutes les autres pages pour garder la même connexion à la BDD. Pour récupérer les paramètres sur les autres pages je fais comment ? :

Code :
  1. <?php session_start();
  2. $_SESSION['BDD_IP']=$BDD_IP;
  3. $_SESSION['BDD_util']=$BDD_util;
  4. $_SESSION['BDD_PSW']=$BDD_PSW;
  5. $_SESSION['BDD_name']=$BDD_name;
  6. ?>


Message édité par lp77 le 03-05-2012 à 10:13:05
Reply

Marsh Posté le 03-05-2012 à 10:57:08    

les sessions ne sont pas assez sures pour protéger tes données (suivant l'environnement). Je mettrais plutôt une condition qui fait que si la session est bien identifié tu fais alors un include d'un fichier .php contenant la connexion à la base de données.
 
 


---------------
Topic Ach/Vds/Ech jeux vidéo
Reply

Marsh Posté le 03-05-2012 à 11:03:53    

Les paramètres sont tapés par l'utilisateur ..., puis pour la sécurité pas de soucis (intranet)


Message édité par lp77 le 03-05-2012 à 11:04:24
Reply

Marsh Posté le 03-05-2012 à 11:23:16    

je ne mettrais quand même pas les paramètres de connexion à la bdd en session.


---------------
Topic Ach/Vds/Ech jeux vidéo
Reply

Marsh Posté le 03-05-2012 à 11:29:37    

Tu as une autre solution (plus simple) ?

Reply

Marsh Posté le 03-05-2012 à 11:29:37   

Reply

Marsh Posté le 03-05-2012 à 13:33:13    

En fait que cherches tu à faire exactement sur ton intranet ? Je pense que ça serait plus simple si tu nous détaille bien tout ça !


---------------
Topic Ach/Vds/Ech jeux vidéo
Reply

Marsh Posté le 03-05-2012 à 23:12:33    

On a plusieurs BDD en réseau, je voudrais mettre en place un formulaire à remplir (paramètre de connection : nom_BDD,password,ip,utilisateur) et envoyer ces paramètres sur d'autre pages pour rouvrir la même connection (lecture de table ...)

Reply

Marsh Posté le 04-05-2012 à 10:26:01    

Pour revenir au sessions, voyez vous pourquoi je n'arrive pas à me connecter à la BDD ? Alors que je récupère bien les valeurs d'un formulaire, j'arrive maintenant à les afficher ... ?

Code :
  1. <?php
  2. session_start();
  3. echo "BDD_name : "; echo $_SESSION['BDD_name']; echo "<br />";
  4. echo "BDD_IP : "; echo $_SESSION['BDD_IP']; echo "<br />";
  5. echo "BDD_PSW : "; echo $_SESSION['BDD_PSW']; echo "<br />";
  6. echo "BDD_util : "; echo $_SESSION['BDD_util']; echo "<br />";
  7. $db = mysql_connect('$_SESSION["BDD_IP"]', '$_SESSION["BDD_util"]', '$_SESSION["BDD_PSW"]'); 
  8. mysql_select_db('$_SESSION["BDD_name"]',$db);
  9. ?>


Merci;


Message édité par lp77 le 04-05-2012 à 11:08:26
Reply

Marsh Posté le 04-05-2012 à 13:43:49    

quand tu as demandé à l'utilisateur les logins/pass de base de données, normmalement tu les stockes en sessions ou en base (enfin je me comprends), mais surtout tu ne fais pas cette connerie de les trimballer de page en page dans des champs hidden, c'est juste du suicide et du bricolage du dimanche


---------------
Blablaté par Harko
Reply

Marsh Posté le 04-05-2012 à 14:03:15    

C'est bon, j'avais un problème de cote'' :)  
Je voudrais que lorsque l'utilisateur clique sur un bouton, la session se ferme et on affiche de nouveau le formulaire pour se connecter à une autre BDD, c'est ce que j'ai fais mais lorsque je retape de nouveaux paramètres j'ai des erreurs :
J'ai créer une nouvelle page :

Code :
  1. <?php // page deconnection.php
  2. session_start();
  3. session_destroy();
  4. header('location: lecture1.php');
  5. exit;
  6. ?>


Dans la page lecture1 j'ai le formulaire (4 champs de connection à la BDD), lorsque je détruis une session, je tape de nouveaux paramètres, j'ai des messages d'erreurs comme quoi les variables ne sont pas définis (ca marchait avant la destruction ...) ?

Reply

Marsh Posté le 04-05-2012 à 14:38:49    

Salut !
 
essai de voir avec : http://www.php.net/manual/fr/funct [...] -unset.php
 
par contre suivant ta version de PHP installé sur le serveur ne fait pas de unset($_SESSION);
 
Essai de voir si déjà avec le session_unset cela fonctionne.
 
Après j'ai une question par rapport aux différentes bases de données. Pourquoi ne mets tu pas une liste déroulante (ou autre) afin que l'utilisateur choisisse celle ou celles qu'il doit utiliser ? Des bases de données ne peuvent pas être utilisées par certains et non par d'autres ? Si c'est le cas tu pourrais automatiser la chose en assignant telle ou telle base à tel utilisateur et l'utilisateur n'aurait qu'à se logguer avec son login et mot de passe afin de joindre sa base ou ses bases !   :whistle:  :sweat:  
 
Bon essai avec le session_unset et dis nous !  :D  
 
 


---------------
Topic Ach/Vds/Ech jeux vidéo
Reply

Marsh Posté le 04-05-2012 à 14:43:30    

Après c'est ce que je devrais faire, d'abord j'essaie en demande les paramètres aux utilisateurs. Donc je mets unset à la place de destroy ? J'essaie ...

Code :
  1. <?php // page deconnection.php
  2. session_start();
  3. unset($_SESSION['BDD_name']);
  4. unset($_SESSION['BDD_IP']);
  5. unset($_SESSION['BDD_psw']);
  6. unset($_SESSION['BDD_util']);
  7. header('location: lecture1.php');
  8. exit;
  9. ?>


Message édité par lp77 le 04-05-2012 à 15:01:13
Reply

Marsh Posté le 04-05-2012 à 14:53:33    

oui car session_destroy (indiqué dans la doc )  
 

Citation :

session_destroy() détruit toutes les données associées à la session courante. Cette fonction ne détruit pas les variables globales associées à la session, de même, elle ne détruit pas le cookie de session. Pour accéder à nouveau aux variables de session, la fonction session_start() doit être appelée de nouveau.
 
Pour détruire complètement une session, comme faire sortir l'utilisateur, l'identifiant de la session doit également être effacé. Si un cookie est utilisé pour propager l'identifiant de session (comportement par défaut), alors le cookie de session doit être effacé. La fonction setcookie() peut être utilisée pour cela.


 
Donc le session_start() dans la page du formulaire récupère à nouveau les variables de session !
 
edit :  
 

Code :
  1. <?php // page deconnection.php
  2. session_start();
  3. session_unset();
  4. header('location: lecture1.php');
  5. exit;
  6. ?>


Message édité par Buldozerben le 04-05-2012 à 14:55:59

---------------
Topic Ach/Vds/Ech jeux vidéo
Reply

Marsh Posté le 04-05-2012 à 14:56:11    

Parcontre je ne peux plus taper de nouveaux paramètres depuis le destroy, j'ai des messages du type :
Notice: Undefined index: BDD_IP in C:\wamp\www\site\ses2.php on line 7

Reply

Marsh Posté le 04-05-2012 à 15:00:59    

C'est bizarre car si tu ré affecte un contenu à ta variable de session il ne devrait pas y avoir d'erreur.  
 
Redémarre ton serveur et ton navigateur et vire tes cookies ! :D


---------------
Topic Ach/Vds/Ech jeux vidéo
Reply

Marsh Posté le 04-05-2012 à 15:06:21    

J'ai supprimer les cookies et redémarrer le serveur, mais j'ai toujours les mêmes erreurs lors du remplissage du formulaire

Reply

Marsh Posté le 04-05-2012 à 17:49:50    

Bizarre.
 
Afin de pouvoir voir où tu as une coquille il nous faudrait voir le code ...  
Qu'elle est la version de php utilisé aussi ?  
 


---------------
Topic Ach/Vds/Ech jeux vidéo
Reply

Marsh Posté le 04-05-2012 à 20:07:28    

En fait si je comprends bien ca devrait donner un code comme ca:
 
page1.php // Formulaire de connexion

Code :
  1. <form method="post" action="page2.php">
  2. <table>
  3.  <tr>
  4.   <th>Login :</th>
  5.   <td>
  6.    <input type="text" name="login" />
  7.   </td>
  8.  </tr>
  9.  <tr>
  10.   <th>Password :</th>
  11.   <td>
  12.    <input type="password" name="password" />
  13.   </td>
  14.  </tr>
  15.  <tr>
  16.   <th>Database :</th>
  17.   <td>
  18.    <input type="text" name="database" />
  19.   </td>
  20.  </tr>
  21.  <tr>
  22.   <th></th>
  23.   <td>
  24.    <input type="submit" value="send" />
  25.   </td>
  26.  </tr>
  27. </table>
  28. </form>


 
page2.php // Formulaire de déconnexion

Code :
  1. <?php
  2. session_start();
  3. // Affectation des variables de session
  4. $_SESSION["login"] = $_POST["login"];
  5. $_SESSION["password"] = $_POST["password"];
  6. $_SESSION["database"] = $_POST["database"];
  7. // Test de la connexion
  8. $dsn = 'mysql:dbname='.$_SESSION["database"].';host=127.0.0.1';
  9. $user = $_SESSION["login"];
  10. $password = $_SESSION["password"];
  11. try{
  12.  $db = new PDO($dsn, $user, $password); //ou même un $_SESSION["db"] = new PDO... et dans ce cas, pas besoin des autres variables de session
  13. }
  14. catch(PDOException $e){
  15.  echo 'Connexion échouée : '.$e->getMessage();
  16. }
  17. // Après tu fais ce que tu veux
  18. ?>
  19. <form method="post" action="page3.php">
  20. <input type="submit" value="disconnect" />
  21. </form>


 
page3.php // Script de déconnexion (on peut le faire sur la page1.php aussi)

Code :
  1. <?php
  2. unset($_SESSION["user"]);
  3. unset($_SESSION["password"]);
  4. unset($_SESSION["database"]);
  5. header("Location: page1.php" );
  6. exit;
  7. ?>


 
Concernant la remise à zéro de tes variables de session:
http://fr2.php.net/manual/fr/funct [...] -unset.php
 
Le code que j'ai posté est fonctionnel sur un PHP 5.3 sous Debian (comprendre pas testé sous Wamp ni Windows)


Message édité par xaeon le 04-05-2012 à 20:31:49
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed