sessions avec plusieurs variables?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : sessions avec plusieurs variables?

par the_grinch » 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 !

par mike1155 » 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.

par YVES » 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:

par VaN » 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.

par sadeq » 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;
?>

par DarkBlue » 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 !

par the_grinch » 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... ?>

par YVES » 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:

par the_grinch » 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é !

par rami » 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");
}

?>

par Invité » 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();
?> 

par Cyrano » 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...

par YVES » 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: :?:

par DarkBlue » 06 nov. 2005, 23:17

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

sessions avec plusieurs variables?

par YVES » 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: