sessions avec plusieurs variables?

Eléphant du PHP | 250 Messages

06 nov. 2005, 23:15

Bonjour,
ma question va peut-etre paraitre bete mais je n'arrive toujours pas à mes fins.....
J'utilise comme beaucoup une session qui affiche le nom du membre sur sa page. mais comment faire pour passer d'autres variables concernant le type?

<?php
session_start() ;
if (isset($_POST['pseudo']))$login=htmlentities($_POST['pseudo']); // on verifie que la variable existe
{
$login = $_POST['pseudo']; //on recupere les données du formulaire
$_SESSION['pseudo'] = $login;
}
?>

J'aimerais aussi que la session "embarque" par exemple le sexe et l'age du membre (préalablement entrés sur 1 formulaire d'inscription et stockés en base de données.)  :oops: 

Eléphant du PHP | 440 Messages

06 nov. 2005, 23:17

Bonjour,
$_SESSION[cequetuveux] = $cequetuveux; 
La session stocke toute les variable que tu lui demande !

Eléphant du PHP | 250 Messages

07 nov. 2005, 00:34

ok, j'entends bien qu'une session peut emmagasiner x variables, mais concretement comment je la déclare?
en reprenant l'exemple de mon script ci-dessus....


$_SESSION['pseudo'] = $login; $sexe;$age;,etc;etc;etc;

:roll: :?:

Mammouth du PHP | 19672 Messages

07 nov. 2005, 00:41

Non, tu crées une nouvelle variable de session pour chaque valeur que tu veux conserver:
$_SESSION['pseudo'] = $pseudo;
$_SESSION['age'] = $age;
//...etc...
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

08 nov. 2005, 16:33

Ben, ca ne fonctionne pas: les autres variables ne passent pas :oops:
<?php
 session_start() ;
if (isset($_POST['pseudo']))$login=htmlentities($_POST['pseudo']); // on verifie que la variable existe
{
$login = $_POST['pseudo']; //on recupere les données du formulaire
$_SESSION['pseudo'] = $login;
$_SESSION['typeava'] = $avatar;
$_SESSION['age'] = $age;
 }
header("Location: page_membre.php");
}
mysql_close();
?> 

Mammouth du PHP | 983 Messages

08 nov. 2005, 16:45

Tes autres variables proviennent aussi d'un formulaire de saisie?
Si oui, essaies:
<?php
session_start() ;
if (isset($_POST['pseudo']))$login=htmlentities($_POST['pseudo']); // on verifie que la variable existe
{
$login = $_POST['pseudo']; //on recupere les données du formulaire
$_SESSION['pseudo'] = $login;
$_SESSION['typeava'] = $_POST['avatar']; //en supposant que le nnom du champ du formualire soit avatar
$_SESSION['age'] = $_POST['age']; //idem que avatar
}
header("Location: page_membre.php");
}

?>

Eléphant du PHP | 419 Messages

08 nov. 2005, 21:59

oui car c'est normale que ça marche aps, tu n'as pas defini :

$avatar et $age
Si elle provienne de formaulaire tu peux faire comme rami te la dit ou alors comme avec $login :

<?php
session_start() ;
if (isset($_POST['pseudo']))$login=htmlentities($_POST['pseudo']); 
{
$login = $_POST['pseudo']; //on recupere les données du formulaire
$avatar = $_POST['avatar']; // si l'attribut du champ ou il doit remplire avatar est bien avatar !
$age = $_POST['age']; // pareil que en gaut !
$_SESSION['pseudo'] = $login;
$_SESSION['typeava'] = $avatar; 
$_SESSION['age'] = $age; 
}
header("Location: page_membre.php");
}

?>
La j'ajoute des trucs en plus mais c'est a essayer !
<?php
session_start() ;

if (empty($_POST['pseudo']) OR empty($_POST['avatar']) OR empty($_POST['age']))
{ 
 echo 'Les champs pseudo, avatar et age ne peuvent pas etre vides !!';
}
else
{
$login = $_POST['pseudo']; //on recupere les données du formulaire
$avatar = $_POST['avatar']; // si l'attribut du champ ou il doit remplire avatar est bien avatar !
$age = $_POST['age']; // pareil que en gaut !
$_SESSION['pseudo'] = $login;
$_SESSION['typeava'] = $avatar; 
$_SESSION['age'] = $age; 
}

?>
if empty verifie qu'il a bien remplis les champs demandé !
Aucun site en création...

Eléphant du PHP | 250 Messages

08 nov. 2005, 23:38

En fait, le problème vient du fait, comment dire, que les variables que je veux passer en session SONT DEJA dans la base de données concernant le membre et ne proviennent pas du formulaire initial d'authentification au site
(ce dernier ne validant que le pseudo et l'email du type)
Donc, comment balancer une autre session en faisant appel à des variables DEJA stockées en base de données? :roll:
Merci :oops:

Eléphant du PHP | 419 Messages

09 nov. 2005, 16:33

a ouai en faite tu veux faire comme un espace membre !

Si oui :
tu dois rajouter ça :
<? 
// connexion a la base de donné !

	if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass'])) {
	  extract($_POST);
	  // on recupère le password de la table qui correspond au login du visiteur
	  $sql = "SELECT tes_champs_a_recuperer FROM membre WHERE login='".$login."'";
	  $req = mysql_query($sql) or die('Erreur SQL !');

	  $data = mysql_fetch_assoc($req);

	  if($data['pass'] != $pass) {
	    echo '<p>Mauvais login / password. Merci de recommencer</p>';
	    exit;
	  }
	  else {
	    $_SESSION['login'] = $login;
 etc... ?>
Aucun site en création...

Eléphant du PHP | 440 Messages

09 nov. 2005, 16:37

Il faut garder la meme session mais lire les données dans ta bdd et les injecter dans la session !

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

09 nov. 2005, 17:05

Tiens je te corrige ton code, en ajoutant la partie interrogation de la base pour récupérer les autres infos et les stocker dans la session :
<?php 
session_start() ;
$message = "";
//Vérifier si le pseudo et mot de passe sont envoyés non vides
if (
isset($_POST['pseudo']) && isset($_POST["pass"])
&& !empty($_POST["pseudo"]) && !empty($_POST["pass"])
)
{ 
//on recupere les données du formulaire 
$login = $_POST['pseudo']; 
$pass = $_POST['pass']; 

// on recupère les info du membre à partir de la base ce qui permet aussi 
//de voir si le pseudo et pass sont corrects 
$sql = "SELECT * FROM membre WHERE pseudo='$login' AND pass='$pass' ";
//Exécuter la requête 
$req = mysql_db_query("mabase", $sql, mysql_connect("localhost","root","")); 
//Tester si la requête est réussie et qu'un membre est trouvé
if ($req && mysql_num_rows($req) >0) {
   //Lire le résultat retourné par la requête
   $data = mysql_fetch_assoc($req);
   if ($data) {
            //Lire et stocker les infos  dans la session
           $_SESSION['pseudo'] = $login; 
           $_SESSION['typeava'] = $data["avatar"]; 
           $_SESSION['age'] = $data["age"];
           //rediriger vers la page membre
           header("Location: page_membre.php"); 
    }
    else //pour if ($data ...
          $message = '<p>Une erreur est survenue, Merci de recommencer</p>';
}
else //pour if ($req ...
      $message = '<p>Mauvais login / password. Merci de recommencer</p>'; 
}
else //pour if (isset($_POST["pseudo ...
     $message = '<p>Merci de saisir un login et un mot de passe</p>';

//Afficher le formulaire HTML
include ("formulaire.HTM");
//Afficher le message réponse du traitement
echo $message;
?>
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

VaN
Mammouth du PHP | 1107 Messages

09 nov. 2005, 17:19

Mais au final, tu n'as pa besoin de passer toutes ces infos en session. il te suffit juste de récuperer en session quelque chose qui te permette d'identifer l'utilisateur (le pseudo si les pseudo sont uniques, sinon l'id_user par exemple). ensuite, tu va chercher les données concernant tel membre en fonction de la valeur enregistrée en session.
$sql = "SELECT avatar, ville FROM users WHERE pseudo='".$_SESSION['pseudo']."'";
$query = mysql_query($sql);
$result = mysql_fetch_array($query);

// dans $result['avatar'], tu auras l'avatar de cet utilisateur
// et dans $result['ville'], sa ville
// c'est plus simple comme ça je trouve.

Eléphant du PHP | 250 Messages

09 nov. 2005, 21:57

Si avec tous ces conseils éclairés, je ne m'en sors pas !
Je vous tient au courant
merci à tous :wink:

Eléphant du PHP | 68 Messages

10 nov. 2005, 18:21

Mais au final, tu n'as pa besoin de passer toutes ces infos en session. il te suffit juste de récuperer en session quelque chose qui te permette d'identifer l'utilisateur (le pseudo si les pseudo sont uniques, sinon l'id_user par exemple). ensuite, tu va chercher les données concernant tel membre en fonction de la valeur enregistrée en session.
$sql = "SELECT avatar, ville FROM users WHERE pseudo='".$_SESSION['pseudo']."'";
$query = mysql_query($sql);
$result = mysql_fetch_array($query);

// dans $result['avatar'], tu auras l'avatar de cet utilisateur
// et dans $result['ville'], sa ville
// c'est plus simple comme ça je trouve.
Bonsoir, les deux méthodes sont fonctionnelles mais en reparlant de l'optimisation, laquelle est préférable, faire x appels à la bd chaque fois que nécessaire ou le stockage en variable de session?

Personnellement, et ce n'est qu'un avis de débutant, je préfèrerai l'appel multiple à la bd... Autant ne stocker en session que ce qui est nécessaire.

Eléphant du PHP | 419 Messages

10 nov. 2005, 22:09

moi je prefere faire appel a des sessions mais apres si on modifie quelque chose dans la abse de donné c'est vrai que ça ne metera pas a jour !
Aucun site en création...