IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Sécurité] problème variable de session


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 175
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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++;
    } ?>

  2. #2
    Membre éprouvé
    Inscrit en
    Janvier 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 140
    Par défaut
    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

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 175
    Par défaut
    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.

  4. #4
    Membre Expert

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 127
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="hidden" name="" value="">
    dans d'autres formulaires, dans le cas ou tu as un formulaire puis un autre et ainsi de suite.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 175
    Par défaut
    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

  6. #6
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Salut,

    Soit tu mets la clause where dans un lien que tu récupères:
    <a href="?region=alsace&page=2">
    Soit tu le mets donc en session: après tout le traitement tu fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['region'] = 'alsace';
    Et au début du script pour le récupérer s'il existe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $region = (isset($_SESSION['region'])) ? $_SESSION['region'] : "";

  7. #7
    Membre Expert

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 127
    Par défaut
    Citation Envoyé par Anduriel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $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 ??

  8. #8
    Membre éprouvé
    Inscrit en
    Janvier 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 140
    Par défaut
    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

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 175
    Par défaut
    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

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 175
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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???

  11. #11
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 175
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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() );

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 175
    Par défaut
    Si c'est le formulaire qui a priorité je verrai plutot ça comme code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  14. #14
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Mais tes attributions de variables ne veulent rien dire avec tous les =

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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...

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 175
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  16. #16
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Bah oui t'adapte tes variable c'est tout. Mais pas besoin d'en créer trois mile.

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 175
    Par défaut
    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

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/10/2004, 23h43
  2. Effacer les variables de session
    Par glsn dans le forum ASP
    Réponses: 2
    Dernier message: 12/12/2003, 14h42
  3. Variable de session
    Par Sadneth dans le forum ASP
    Réponses: 6
    Dernier message: 14/11/2003, 12h12
  4. variable de session
    Par divableue dans le forum ASP
    Réponses: 2
    Dernier message: 23/10/2003, 17h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo