Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/06/2006, 16h58   #1
Nouveau Membre du Club
 
Inscription : mai 2006
Messages : 175
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 175
Points : 30
Points : 30
Par défaut [Sécurité] problème variable de session

Je bloque sur ca depuis un petit moment et j'espere vraiment que vous pourrez m'aider. Sur une 1ere page j'ai un formulaire POST qui effectue une recherche dans la base et sur une 2eme page j'affiche les resultats. Seulement sur la page ou j'affiche les resultats il y a une fonction pagination et quand je clique sur la page suivante je perds les variables et donc les resultats ne sont plus bons. J'ai essaye de les mettre en session seulement j'ai du me planter car ca ne marche pas et je voiss pas d'ou vient le probleme. Voici le code et le resultat de echo $query en page 1 et en page 2. Comme vous le voyez il n'y a plus le WHERE en page 2.

echo $query page 1
SELECT region FROM voitures WHERE region='alsace' ORDER BY date DESC
echo $query page 2
SELECT region FROM voitures ORDER BY date DESC

Code de la page de resultats
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 
<?
$query = "SELECT region FROM voiture";
 
$region=$_SESSION['region'];
 
if(isset($_POST['region']) && $_POST['region'] != "*" && $_SESSION['region']=$_POST['region']) {
$region = $fields['region'] = $_SESSION['region'];
}
 
if(!empty($fields)) {
     $i = 0;
     $query .= " WHERE ";
     foreach($fields AS $field => $value) {
          if($i > 0) {
               $query .= " AND ";
          }
          else {
               $query .= $field." = '".$value."'";
          }
          $i++;
     }
}
 
$query .= " ORDER BY date DESC ";
echo $query;
echo( "<br>region: <b>".$region."</b><br>\n" ) ;
 
$result = mysql_query($query) or die ('Erreur : '.mysql_error() );
 
$Nmax = 3;
$Ncur = 0;
 
$Ndeb=@$_GET["num"];
 
while (($row = mysql_fetch_array($result))
   && ($Ncur<$Nmax+$Ndeb)) {
   if($Ncur>=$Ndeb)
{
    echo '<table width="450" border="0" cellspacing="0">'."\n";
        echo '<tr>';
        echo '<td class="ad">('.$row['region'].')</td>';
        echo '</tr>'."\n";
    echo '</table>'."\n";
}
 
 
   $Ncur++;
} ?>
dolf13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2006, 17h33   #2
Membre habitué
 
Inscription : janvier 2006
Messages : 140
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 140
Points : 131
Points : 131
pareil que le monsieur dans le topic de pagination, il faut que tu trimballes tes resultats dans des formulaires ou directement dans l'url cible et que tu les transmettes à chaque changement de page
drommk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2006, 17h59   #3
Nouveau Membre du Club
 
Inscription : mai 2006
Messages : 175
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 175
Points : 30
Points : 30
Citation:
Envoyé par drommk
pareil que le monsieur dans le topic de pagination, il faut que tu trimballes tes resultats dans des formulaires ou directement dans l'url cible et que tu les transmettes à chaque changement de page
Si je veux utiliser les formulaires comment je transmet le formulaire quand l'utilisateur change de page? Je debute et je vois pas comment on transmet les variables s'il n'y a pas de bouton submit sur la page.
dolf13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2006, 18h26   #4
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Expert PHP
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2004
Messages : 2 126
Points : 2 602
Points : 2 602
Citation:
Envoyé par dolf13
Si je veux utiliser les formulaires comment je transmet le formulaire quand l'utilisateur change de page? Je debute et je vois pas comment on transmet les variables s'il n'y a pas de bouton submit sur la page.
si tu veux les garder sur d'autre pages, alors tu dois passer par des variables de sessions.

tu peux aller ici : faq.developpez.com/php/ ou tu trouveras ton bonheur.

ce que drommk voulait dire c'est les conserver en le remettant en balises
Code :
<input type="hidden" name="" value="">
dans d'autres formulaires, dans le cas ou tu as un formulaire puis un autre et ainsi de suite.
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2006, 18h47   #5
Nouveau Membre du Club
 
Inscription : mai 2006
Messages : 175
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 175
Points : 30
Points : 30
Non j'ai pas d'autre formulaire... je veux juste arriver à les conserver quand j'ai plusieurs pages de resultats... ca doit etre tout con et je sais qu'il faut utiliser SESSIONS mais je dois faire un truc de travers... merci
dolf13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2006, 20h23   #6
Membre Expert
 
Avatar de Anduriel
 
Homme
Étudiant
Inscription : février 2004
Messages : 2 168
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2004
Messages : 2 168
Points : 1 277
Points : 1 277
Salut,

Soit tu mets la clause where dans un lien que tu récupères:
Citation:
<a href="?region=alsace&page=2">
Soit tu le mets donc en session: après tout le traitement tu fais un
Code :
$_SESSION['region'] = 'alsace';
Et au début du script pour le récupérer s'il existe:
Code :
$region = (isset($_SESSION['region'])) ? $_SESSION['region'] : "";
Anduriel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2006, 20h46   #7
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Expert PHP
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2004
Messages : 2 126
Points : 2 602
Points : 2 602
Citation:
Envoyé par Anduriel
Code :
$region = (isset($_SESSION['region'])) ? $_SESSION['region'] : "";
question pour toi Anduriel, pourquoi recréer un variable, pourquoi ne pas utiliser $_SESSION['region'] directement dans le code ??
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2006, 08h55   #8
Membre habitué
 
Inscription : janvier 2006
Messages : 140
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 140
Points : 131
Points : 131
oui c'est pas nécessaire, enfin pas très lourd non plus donc...

sinon, si tu dois faire passer une seule variable (région), je te conseille de le faire passer en $_GET, ça vaut pas le coup de faire une variable de session que tu trimballeras même quand t'en auras plus besoin (à mon avis hein). il suffit que quand tu changes de pages ton lien termine par

"g.php?page=".$numpage."&region=".$region
drommk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2006, 09h28   #9
Nouveau Membre du Club
 
Inscription : mai 2006
Messages : 175
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 175
Points : 30
Points : 30
OK je pense que je vais adopter cette méthode (GET)... car avec la methode POST je ne vois pas comment faire pour que les anciennes variables ne soient plus pris en compte quand j'efectue une nouvelle recherche. Je sais que la fonction est unset mais je sais pas ou la mettre (sur la page resultats.php ou sur la page search.php qui est aussi inclus dans resultats.php et donc qui génère une erreur quand j'ajoute unset).
Bref j'ai peut etre meilleur temps d'utiliser la methode GET mais est ce que c bien meme si on a plusieurs variables? Que me conseillez vous?
Merci
Dolf
dolf13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2006, 09h32   #10
Nouveau Membre du Club
 
Inscription : mai 2006
Messages : 175
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 175
Points : 30
Points : 30
Citation:
Envoyé par drommk
oui c'est pas nécessaire, enfin pas très lourd non plus donc...

sinon, si tu dois faire passer une seule variable (région), je te conseille de le faire passer en $_GET, ça vaut pas le coup de faire une variable de session que tu trimballeras même quand t'en auras plus besoin (à mon avis hein). il suffit que quand tu changes de pages ton lien termine par

"g.php?page=".$numpage."&region=".$region

En fait j'ai au moins 6 variables. Donc quelle methode adopter?

De plus Anduriel dit
Code :
1
2
3
4
5
 
Soit tu le mets donc en session: après tout le traitement tu fais un
Code :
 
$_SESSION['region'] = 'alsace'
Je ne vois pas ou exactement il faut ajouter ce code et pourquoi il y a 'alsace' ca devrait etre une variable a la place non... pas une valeur???
dolf13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2006, 12h57   #11
Membre Expert
 
Avatar de Anduriel
 
Homme
Étudiant
Inscription : février 2004
Messages : 2 168
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2004
Messages : 2 168
Points : 1 277
Points : 1 277
Bein non c'est une variable là c'est un exemple.
Sinon pour le placer tu le mets après les requêtes SQL, peu importe.


Code :
1
2
$_SESSION['region'] = (isset($_SESSION['region'])) ? $_SESSION['region'] : $_POST['session'];
$_SESSION['variable'] = (isset($_SESSION['variable'])) ? $_SESSION['variable'] : $_POST['variable'];
Dans ce cas, si la session existe, on la conserve, sinon on récupère la valeur postée par formulaire.
Anduriel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2006, 11h57   #12
Nouveau Membre du Club
 
Inscription : mai 2006
Messages : 175
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 175
Points : 30
Points : 30
Citation:
Envoyé par Anduriel
Bein non c'est une variable là c'est un exemple.
Sinon pour le placer tu le mets après les requêtes SQL, peu importe.


Code :
1
2
$_SESSION['region'] = (isset($_SESSION['region'])) ? $_SESSION['region'] : $_POST['session'];
$_SESSION['variable'] = (isset($_SESSION['variable'])) ? $_SESSION['variable'] : $_POST['variable'];
Dans ce cas, si la session existe, on la conserve, sinon on récupère la valeur postée par formulaire.
OK j'ai ajouté ton code suelement j'ai toujours un probleme. Quand j'effectue une nouvelle recherche avec mon formulaire ca ne remplace pas les anciens critères par les nouveaux critères que j'ai selecionné. Serais tu me dire d'ou ca vient ?

Voici le code de ma page:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 
<?
$query = "SELECT region, pays FROM mabase";
 
$_SESSION['region'] = (isset($_SESSION['region'])) ? $_SESSION['region'] : $_POST['region'];
 
$_SESSION['pays'] = (isset($_SESSION['pays'])) ? $_SESSION['pays'] : $_POST['pays'];
 
if(isset($_SESSION['region']) && $_SESSION['region'] != "*") {
$fields['region']=$_SESSION['region'];
}
if(isset($_SESSION['pays']) && $_SESSION['pays'] != "*") {
$pays = $fields['pays']=$_SESSION['pays'];
}
 
if(!empty($fields)) {
     $i = 0;
     $query .= " WHERE ";
     foreach($fields AS $field => $value) {
          if($i > 0) {
               $query .= " AND ";
          }
           {
               $query .= $field." = '".$value."'";
          }
          $i++;
     }
}
 
$query .= " ORDER BY addate DESC ";
echo $query;
 
 
echo( "<br>region: <b>".$region."</b><br>\n" ) ;
echo( "pays: <b>".$pays."</b><br>\n" ) ;
 
$result = mysql_query($query) or die ('Erreur : '.mysql_error() );
dolf13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2006, 10h23   #13
Nouveau Membre du Club
 
Inscription : mai 2006
Messages : 175
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 175
Points : 30
Points : 30
Citation:
Si c'est le formulaire qui a priorité je verrai plutot ça comme code:

Code :
1
2
3
4
5
6
7
if (isset($_POST['region']))  { // si le form est posté
   $_SESSION['region'] = $_POST['region']; // on réadapte la nouvelle session
}
elseif (!isset($_SESSION['region'])) { // si aucun form n'est posté et que la session n'existe pas
   $_SESSION['region'] = ""; // Valeur nulle
}
.........
Avec le code que je t'ai donné normalement si tu vas sur une nouvelle page, ça ne rentre pas dans le if isset $_POST ni if !isset $_SESSION donc la sessions reste la même de page en page...
J'ai ajoute ton code en l'adaptant à mon site:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
$query = "SELECT region, pays FROM mabase";
 
 
$_SESSION['region'] = (isset($_SESSION['region'])) ? $_SESSION['region'] : $_POST['region'];
$_SESSION['pays'] = (isset($_SESSION['pays'])) ? $_SESSION['pays'] : $_POST['pays'];
 
 
 
if (isset($_POST['region']) && $_POST['region'] != "*")  { // si le form est posté
   $region = $fields['region'] = $_SESSION['region'] = $_POST['region']; // on réadapte la nouvelle session
}
elseif (!isset($_SESSION['region'])) { // si aucun form n'est posté et que la session n'existe pas
  $_SESSION['region'] = ""; // Valeur nulle
}
if (isset($_POST['pays']) && $_POST['pays'] != "*")  { // si le form est posté
   $pays = $fields['pays'] = $_SESSION['pays'] = $_POST['pays']; // on réadapte la nouvelle session
}
elseif (!isset($_SESSION['pays'])) { // si aucun form n'est posté et que la session n'existe pas
  $_SESSION['pays'] = ""; // Valeur nulle
}
Quand je SUBMIT le formulaire et qu'il y a une seule page les resultats qui s'affichent sont les bons. Voici le resultat de la query:
SELECT region, pays FROM mabase WHERE region = 'Alsace' AND pays = 'France'

Quand il y a plusieurs pages et que je vais sur la 2eme page les variables de session ne sont pas prises en compte. Voici le resultat de la query:
SELECT region, pays FROM mabase

Je sais qu'il y a encore un probleme avec les variables de session mais je ne sais pas comment faire en sorte qu'elles soient transmises quand il y a plusieurs pages de résultats. T'as une idee Anduriel???

Dolf
dolf13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2006, 11h12   #14
Membre Expert
 
Avatar de Anduriel
 
Homme
Étudiant
Inscription : février 2004
Messages : 2 168
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2004
Messages : 2 168
Points : 1 277
Points : 1 277
Mais tes attributions de variables ne veulent rien dire avec tous les =

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$query = "SELECT region, pays FROM mabase";
 
if (isset($_POST['region']) && $_POST['region'] != "*")  { // si le form est posté
   $region = $_POST['region']; 
   $_SESSION['region'] = $region; // on réadapte la nouvelle session
}
elseif (!isset($_SESSION['region'])) { // si aucun form n'est posté et que la session n'existe pas
  $region = 'valeur par défaut; // valeur par défaut
}
if (isset($_POST['pays']) && $_POST['pays'] != "*")  { // si le form est posté
   $pays = $_POST['pays']; 
   $_SESSION['pays'] = $pays; // on réadapte la nouvelle session
}
elseif (!isset($_SESSION['pays'])) { // si aucun form n'est posté et que la session n'existe pas
  $pays = "valeur par défaut"; // une valeur par défaut
}
Ta mis trop de code sans réfléchir... Sinon j'ai modifié des attributions de variables je vois que dans ton code tu utilises des variables normales et pas les sessions directement. Ce code fonction parfaitement normalemet si tu changes de page grace à un lien...
Anduriel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2006, 11h45   #15
Nouveau Membre du Club
 
Inscription : mai 2006
Messages : 175
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 175
Points : 30
Points : 30
Citation:
Envoyé par Anduriel
Mais tes attributions de variables ne veulent rien dire avec tous les =

Ta mis trop de code sans réfléchir... Sinon j'ai modifié des attributions de variables je vois que dans ton code tu utilises des variables normales et pas les sessions directement. Ce code fonction parfaitement normalemet si tu changes de page grace à un lien...
Il y a un truc qui m'echappe (surement pas qu'un ... Je sui bien obliige d'utiliser $fields= à un moment parce qu apres dans mon code j'ai

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
if(!empty($fields)) {
     $i = 0;
     $query .= " WHERE ";
     foreach($fields AS $field => $value) {
          if($i > 0) {
               $query .= " AND ";
          }
 {
               $query .= $field." = '".$value."'";
          }
          $i++;
     }
}
Si je le met pas ca ne prend pas en compte les varialbes. Il faut bien qu'a un moment je dise que $fields['region']=$_SESSION['region'] ou = $_POST['region']; non??? Ou faut-il que j'ajoute $fields['region'] dans mon code?

Merci

Dolf
dolf13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2006, 13h52   #16
Membre Expert
 
Avatar de Anduriel
 
Homme
Étudiant
Inscription : février 2004
Messages : 2 168
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2004
Messages : 2 168
Points : 1 277
Points : 1 277
Bah oui t'adapte tes variable c'est tout. Mais pas besoin d'en créer trois mile.
Anduriel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2006, 14h47   #17
Nouveau Membre du Club
 
Inscription : mai 2006
Messages : 175
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 175
Points : 30
Points : 30
Merci beaucoup pour ta patience Anduriel. Je n'arrive pas à faire marcher ton code... ca vient de moi et pas du code je le sais bien... je vais me débrouiller... encore merci...
Dolf
dolf13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h21.


 
 
 
 
Partenaires

Hébergement Web