utiliser les sessions à la place de hidden

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 : utiliser les sessions à la place de hidden

par rolusseum » 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é.

par furiouslol » 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 ^^)

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

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

par Aureusms » 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 ?

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

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

par rolusseum » 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é?

par Ryle » 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']; 
?>

par Elie » 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;

par rolusseum » 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

par Elie » 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 :)

utiliser les sessions à la place de hidden

par rolusseum » 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