utiliser les sessions à la place de hidden

Eléphant du PHP | 139 Messages

22 déc. 2008, 01:40

Bonsoir,

J'affiche une liste de x éléments dans un tableau.
Chaque élément peut-être sélectionné.
Actuellement, je passe la valeur de l'élément sélectionnée par
un post et hidden.
<td class= "colDonneesListe">
 <form method="post" action="<?php $_SERVER['PHP_SELF']; ?>">
	<input type="image"  name="select_element" src="Image/bouton_bleu.gif" alt="selectionner"/>Sélectionner
	<input type="hidden" name="num_element" value="<?php echo $num_element;?>"/>
</form>
</td>
J'aimerais à la place d'utiliser input type="hidden" utiliser les sessions.
du genre:
<td class= "colDonneesListe">
 <form method="post" action="<?php $_SERVER['PHP_SELF']; ?>">
	<input type="image"  name="select_element" src="Image/bouton_bleu.gif" alt="selectionner"/>Sélectionner
	<?php $_SESSION['num_element_select_sess']= $num_element;?>
</form>
</td>
Mais, dans le cas présent, je mets en session un array avec tous les éléments du tableau.
Voilà, si vous avez des tuyaux, je suis preneur.
Merci

Mammouth du PHP | 1339 Messages

25 déc. 2008, 00:43

Pas de soucis pour les sessions ... Mais dans ton code on comprend pas trop ce que tu veux faire :)
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Eléphant du PHP | 139 Messages

26 déc. 2008, 22:53

[quote]
Pas de soucis pour les sessions ... Mais dans ton code on comprend pas trop ce que tu veux faire
[/quote]

Bah, ce que je veux faire c'est remplacer les "hidden" par des sessions. Donc dans le premier exemple de code, j'utilise les "hidden" (méthode qui fonctionne parfaitement), dans le deuxième bout de code, je fait n'importe quoi avec les sessions (c'était pour "illustrer" ma demande).
Le premier bout de code, sert à la compréhension...le deuxième on s'en fiche.
Voilà, si vous avez des idées ou si vous pouvez m'expliquer comment faire pour mettre la variable sélectionnée $num_element (qui correspond à l'un des élément du tableau) en session, cela me serait utile.
Merci

Mammouth du PHP | 1339 Messages

27 déc. 2008, 01:55

Bah :
<?php $_SESSION['num_element']= $num_element;?>
C'est très bien :) Faut juste savoir comment tu définis $num_element;
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 déc. 2008, 02:06

Alors pour résumer, pour pouvoir utiliser les sessions, il faut dans un premier temps démarrer la session avec un session_start() (comme pour le header, il est à spécifier avant d'envoyer des données au navigateur, et naturellement, avant de faire appel à $_SESSION)

Ensuite, la variable $_SESSION n'est rien de plus qu'un tableau associatif accessible dans chacune des pages où tu démarres la session :)

En gros, dans ta page si tu fais
<?php 
session_start();
...
$_SESSION['toto']= $num_element;
?>
tu affectes la valeur que tu as dans $num_element dans ta variable de session $_SESSION['toto'].

Et pour l'utiliser, il te suffit simplement de faire appel à $_SESSION['toto'] :
<?php 
session_start();
...
echo $_SESSION['toto']; 
?>
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 139 Messages

02 janv. 2009, 23:28

Merci pour vos précisions.

Je sais utiliser les sessions et donc passer les valeurs en sessions.
Mais, je vais reformuler ma demande.

J'ai un tableau avec une liste de 100 users
A chaque user un lien cliquable permet d'afficher la fiche de renseignement de celui-ci.

Comment mettre uniquement en session l'id du user sélectionné?

ViPHP
ViPHP | 1996 Messages

03 janv. 2009, 15:22

Bonjour,

Tu n'a qu'à ressortir l'identifiant de ton tableau : Exemple pour un tableau simple
$tableau_utilsateur = array (0 => "Julien", 1 => "Chris"); //c'est un exemple

//Pour Julien
$_SESSION["ID_tableau"] = 0;
//Pour Chris
$_SESSION["ID_tableau"] = 1;
Tu peux tout mettre dans les variables de sessions même les caractéristiques de ton utilisateurs avant même qu'il le sache. Dès qu'il clique sur le lien en question, tu affiches les données stockées.
//Pour Julien
$_SESSION["ID_tableau"] = 0;
$_SESSION["Prenom"] = "Julien";
$_SESSION["Ville"] = "Lalune";
Comme chaque visiteurs aura sa session, chaque visiteur n'aura que ses propres données pas ceux des autres.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphant du PHP | 139 Messages

04 janv. 2009, 01:39

Voici le code épuré avec l'utilisation input hidden

Code : Tout sélectionner

<table summary="Liste des users"> <?php while($val = mysql_fetch_array ($resultatRequete)){ $id_user= $val['Id_user']; ?> <tr> <td> <form method="post" action="<?php $_SERVER['PHP_SELF'];?>"> <input type="image" name="selectFicheUser" src="fleche.gif" alt="selectionner"/> <input type="hidden" name="userSelect" value="<?php echo $id_user;?>"/> </form> </td> </tr> </table>

Maintenant, en utilisant les sessions, je supprime

Code : Tout sélectionner

<input type="hidden" name="userSelect" value="<?php echo $id_user;?>"/>
et je remplace par

Code : Tout sélectionner

$_SESSION["ID_user"] = $id_user;
Ben çà ne marche pas, car dans la variable session, je me retrouve avec la liste de tous les users et non celui sélectionné.
Ce que j'aimerais dans la session, c'est uniquement le user sélectionné.

J'ai l'impression, de tourner en rond.
Si c'est trop tordu à faire, je garde l'utilisation du input hidden.

ViPHP
ViPHP | 1996 Messages

05 janv. 2009, 13:16

Tu y ai presque mais il te manque encore quelque notions.
Pour t'aider :
<?php
session_start (); //tout en haut du script
...
while($val = mysql_fetch_array ($resultatRequete)){
$_SESSION["id_user"]= $val['Id_user']; //numéro de l'user unique
?>
Ton code :

Code : Tout sélectionner

<form method="post" name="essai" action="<?php $_SERVER['PHP_SELF'];?>"> <input type="image" name="selectFicheUser" src="fleche.gif" alt="selectionner"/> <input type="hidden" name="userSelect" value="<?php echo $_SESSION["id_user"];?>"/> </form>
Mais dans le traitement tu pourras (dans la même page vu que tu as mis $_SERVER["PHP_SELF"]):
<?php 
if (isset($_POST["essai"])) //si le formulaire a été posté
  {
  $image = $_POST["selectFicheUser"];
  $id_user = $_SESSION["id_user"]; //tu peux donc t'abstenir de ton champ Hidden
  }
?>
Ainsi cela te montre que tu peux balader ton $_SESSION["id_user"] partout dans la page et même entre les pages si tu as mis session_start() en haut du script. Cela va de même pour les autres varaibles de session.

A propos ton formulaire image est un peu spécial. Tu veux envoyer une image vers le serveur ?
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphant du PHP | 139 Messages

05 janv. 2009, 23:44

J'ai essayé
<?php
session_start (); //tout en haut du script
...
while($val = mysql_fetch_array ($resultatRequete)){
$_SESSION["id_user"]= $val['Id_user']; //numéro de l'user unique
?>
Mais $_SESSION["id_user"] contient toujours le dernier Id_user de la liste. Que je sélectionne ou non un user dans la liste.

A propos ton formulaire image est un peu spécial. Tu veux envoyer une image vers le serveur ?
J'ai peut-être pris une mauvaise habitude. En général pour un formulaire, différents boutons (images) peuvent exister et être "actionnés" indépendamment. Donc pour connaître le bouton actionnée, je défini un nom à chaque bouton. Cela permet d'utiliser un seul formulaire et x boutons (actions).

Code : Tout sélectionner

<form method="post" name="essai" action="<?php $_SERVER['PHP_SELF'];?>"> input type="image" name="selectFicheUser" src="fleche.gif" alt="selectionner"/> input type="image" name="selectMenuUser" src="fleche.gif" alt="selectionner"/> input type="image" name="select_etc_User" src="fleche.gif" alt="selectionner"/> </form>
Je récupère les données du post de la manière suivante:
if (!empty($_POST['selectFicheUser'])|| !empty($_POST['selectFicheUser_x'])) {
	//Récupération des valeurs validees
       $id_user_select = $_POST['userSelect'];

       //Et j'en profite pour mettre le user sélectionné en session
	$_SESSION['idSelect']= $id_user_select;
Il est possible que la démarche ne soit pas académique, mais pour l'instant cela fonctionne.
Néanmoins, je suis toujours ouvert et à l'écoute de conseils pour coder "proprement".
C'est à ce propos, sur des avis et conseils lus dans divers forum (qui préconisent d'éviter ce type de technique),que je souhaite éviter l'utilisation des input hidden.
D'ailleurs, je commence à douter de la légitimité de ma démarche. C'est à dire de vouloir remplacer tous les input hidden par une mise en session "directe" des variables concernées.

Voilou! merci pour votre éclairage.

ViPHP
ViPHP | 1996 Messages

06 janv. 2009, 12:39

Si tu as essayé cela
<?php
session_start (); //tout en haut du script
...
while($val = mysql_fetch_array ($resultatRequete)){
$_SESSION["id_user"]= $val['Id_user']; //numéro de l'user unique
?>


et que tu as le dernier user c'est que dans ta requête tu demandes tous les user et que mysql te donne tout les user. Le code te donne donc le dernier de la pile envoyé par mysql.

Alors quelque question simples se posent à moi :
Comment identifie tu ton visiteur ? Avec un formulaire ? Si oui lors de la vérification de ton utilisateur, pourquoi tu n'enregistres pas son ID de session : (je te fais ce code rapido, vérifie le)
<?php
session_start();

if (!isset$_SESSION["erreur"])) $_SESSION["erreur"] = "";

if (isset($_POST["login"]) && !empty($_POST["login"]) && !empty($_POST["motDePasse"]))
  {
  $login = strip_tags($_POST["login"]);
  $login = addslashes ($login);
  $motdepasse = strip_tags($_POST["motDePasse"]);
  $motdepasse = addslashes ($motdepasse);

  //prévoir connexion base de donnée...
  $requete = "SELECT id FROM table_utilisateur WHERE login = '$login' AND mot_de_passe = '$motdepasse' LIMIT 1";
  $resultat_sql = mysql_query ($requete);
  if (mysql_num_rows ($resultat_sql) != 0) // il y a bien le couple login + mot de passe
    {
    $resultat = mysql_fetch_row ($resultat_sql); // pas de while car un seul résultat retourné
    $_SESSION["User_ID"] = $resultat[0];
    $_SESSION["erreur"] = "";
    }
  else
    {
    $_SESSION["erreur"] = "Pas mot login / Mot de passe";
    header ("Location : ".$_SERVER["PHP_SELF"]);
    }
  }
else
  {
  ?>
  <form name="verification_utilisateur" action="<?php echo $_SERVER["PHP_SELF"], ?> method="post">
  <input type="text" name="login" value="Indiquer votre identifiant ici" onFocus="this.value='';">
  <input type="password" name="motDePasse" value="Indiquer votre mot de passe ici" onFocus="this.value=''; >
  <input type="submit" value="Envoyer" >
  </form>
  <?php 
  if (!empty($_SESSION["erreur"]))
    {
    ?>
    <p style="color :red; font-weight : bold; text-decoration : underline; font-size : 120%;">Pas bon Login ou mot de passe</p>
    <?php
    }
  }
  ?>
Adapte le à ta base de donnée sans oublier les connexions.
Dis moi après si c'est que tu recherches...
Dans cet exemple, je me sers des variables de SESSION pour "stocké" l'identifiant (mais je pourrais stocker autre chose comme la date de création, le nom, l'image perso,... cela dépend de ce que tu as dans ta base) et je me sers aussi des sessions pour passer une variable "erreur" et m'en servir pour afficher un paragraphe dans le formulaire en cas d'anomalie.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphant du PHP | 254 Messages

06 janv. 2009, 14:59

Excusez moi de faire un retour arriere sur ce post mais n'y a t'il pas confusion ?
J'ai un tableau avec une liste de 100 users
A chaque user un lien cliquable permet d'afficher la fiche de renseignement de celui-ci.

Comment mettre uniquement en session l'id du user sélectionné?
Il gere une page de user, a la maniere d'un admin, il obtient et affiche donc une liste de user, un par ligne, sur lesquels il veut faire des actions en rajoutant des boutons en bout de ligne. Pour moi le HIDDEN est tout indiqué, et passer par les sessions pourrait se révéler bien plus compliqué (bon ceci dit je suis curieux de savoir comment c'est possible dans ce cas précis ^^)

Eléphant du PHP | 139 Messages

06 janv. 2009, 16:32

[quote]
Il gere une page de user, a la maniere d'un admin, il obtient et affiche donc une liste de user, un par ligne, sur lesquels il veut faire des actions en rajoutant des boutons en bout de ligne. Pour moi le HIDDEN est tout indiqué, et passer par les sessions pourrait se révéler bien plus compliqué (bon ceci dit je suis curieux de savoir comment c'est possible dans ce cas précis ^^)
[/quote]

Ben c'est exactement ce que je demande. Merci de l'avoir reformulé.