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

PHP & Base de données Discussion :

incompatibilité entre requête SQL et pagination [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 62
    Points : 18
    Points
    18
    Par défaut incompatibilité entre requête SQL et pagination
    Bonjour à tous et à toutes

    J'ai fais face il y a peu à un problème méthodologique dans la réalisation d'un script destiné à affiner l'affichage des annonces, sur un site de petites annonces
    Il s'agissait de les trier par catégorie, ville etc...J'ai reçu le script suivant comme solution:
    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
     
    include('fonction_pagination.php');
    $page = (isset($_GET['page']) ? htmlspecialchars(intval($_GET['page'])): 1);
    if($page <= 0) {
      $page = 1;
    }
    $debut = ($page - 1) *30;
    $retour = 'SELECT COUNT(*) AS total FROM ventes WHERE ';
    $requete_sql = 'SELECT * FROM ventes WHERE ';
    $values = array();
    $champs = array('catégorie','ville','demande_offre','part_pro');
    if(isset($_POST)){
      foreach ($_POST as $key => $value) {
        if(!empty($value)){
          foreach ($champs as $nom) {
            if($key == $nom){
     
              $requete_sql .= $key.'=\''.$value.'\' AND ';
              $retour .= $key.'=\''.$value.'\' AND ';
            }
          }
        }
      }
      $retour .= '1=1';
      $req3 = $bdd -> query($retour);
      $nombreElementsTotal = $req3 -> fetchcolumn();
    $nombreDePages = ceil($nombreElementsTotal/30);
      $requete_sql .= '1 = 1 LIMIT '.$debut.',30';
       echo $requete_sql ;
      $req = $bdd -> query($requete_sql);
    }
    La présence de la fonction de pagination et d'une requête pour obtenir le nombre total d'annonces n'est pas fortuite. J'y reviens...
    Le formulaire de tri contient 4 champs et un bouton validé. Tous les champs sont des SELECT. Ceux-ci sont stocké dans un tableau et utilisé dans le WHERE d'une requête SQL.
    Mais voilà, si ce procédé fonctionne bien sur la page d'accueil ie qu'après le clique sur le bouton validé les annonces s'affichent en fonction des valeurs des champs rempli.
    Dès qu'on passe à la page suivante, les annonces s'affichent comme si aucun champs n'avait été coché dans le formulaire de tri.
    Voici ma fonction de pagination:
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    <?php function pagination($current_page, $nb_pages, $link='?page=%d', $around=3, $firstlast=1)
    {
      $pagination = '';
      $link = preg_replace('`%([^d])`', '%%$1', $link);
      if ( !preg_match('`(?<!%)%d`', $link) ) $link .= '%d';
      if ( $nb_pages > 1 ) {
     
            // Lien précédent
        if ( $current_page > 1 )
          $pagination .= '<a class="prevnext" href="'.sprintf($link, $current_page-1).'" title="Page précédente">&laquo; Précédent</a>';
        else
          $pagination .= '<span class="prevnext disabled">&laquo; Précédent</span>';
     
            // Lien(s) début
        for ( $i=1 ; $i<=$firstlast ; $i++ ) {
          $pagination .= ' ';
          $pagination .= ($current_page==$i) ? '<span class="current">'.$i.'</span>' : '<a href="'.sprintf($link, $i).'">'.$i.'</a>';
        }
     
            // ... après pages début ?
        if ( ($current_page-$around) > $firstlast+1 )
          $pagination .= ' &hellip;';
     
            // On boucle autour de la page courante
        $start = ($current_page-$around)>$firstlast ? $current_page-$around : $firstlast+1;
        $end = ($current_page+$around)<=($nb_pages-$firstlast) ? $current_page+$around : $nb_pages-$firstlast;
        for ( $i=$start ; $i<=$end ; $i++ ) {
          $pagination .= ' ';
          if ( $i==$current_page )
            $pagination .= '<span class="current">'.$i.'</span>';
          else
            $pagination .= '<a href="'.sprintf($link, $i).'">'.$i.'</a>';
        }
     
            // ... avant page nb_pages ?
        if ( ($current_page+$around) < $nb_pages-$firstlast )
          $pagination .= ' &hellip;';
     
            // Lien(s) fin
        $start = $nb_pages-$firstlast+1;
        if( $start <= $firstlast ) $start = $firstlast+1;
        for ( $i=$start ; $i<=$nb_pages ; $i++ ) {
          $pagination .= ' ';
          $pagination .= ($current_page==$i) ? '<span class="current">'.$i.'</span>' : '<a href="'.sprintf($link, $i).'">'.$i.'</a>';
        }
     
            // Lien suivant
        if ( $current_page < $nb_pages )
          $pagination .= ' <a class="prevnext" href="'.sprintf($link, ($current_page+1)).'" title="Page suivante">Suivant &raquo;</a>';
        else
          $pagination .= ' <span class="prevnext disabled">Suivant &raquo;</span>';
      }
      if($current_page != 1){
        if( $_GET['page'] > $nb_pages){
        ?>
                     <script type="text/javascript">
                       <!--
                        location="index.php?page=1";
                       //-->
                     </script>
                  <?php
      }
    }
      return $pagination;
    }
    ?>
    Désolé, de n'avoir pu faire plus court.
    Merci d'avance à ceux qui voudront m'apporter leur lumière.

  2. #2
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    Bonsoir,
    il faudrait passer le formulaire de tri en GET, là les filtres seront sauvegardés dans l'URL , le paramètre de la pagination viendra se "coller" au(x) filtre(s) si besoin
    1er cas, aucun filtre choisi, on a une url du genre xxxx?page=numero_page
    2ème cas , une url du genre xxx?filtre1=valeur&filtre2=valeur&page=numero_page.
    PS: le htmlspecialchars dans htmlspecialchars(intval($_GET['page'])) est inutile et pensez à préparer vos requêtes.
    Le bienfait n'est jamais perdu

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 62
    Points : 18
    Points
    18
    Par défaut
    Bonsoir Willy_k
    Merci pour l'idée je vais regarder ça un peu plus tard et revenir au cas ou.
    Le script ne fonctionne pas avec une requête préparé. Je me suis dit que c'est pas grave étant donné qu'avec les balises SELECT, l'utilisateur n'entre aucune valeur...il n'y a donc pas risque d'injection SQL.

  4. #4
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Euh. Non. Si ton select s'appelle toto. Qu'est-ce qui m'empêche de mettre la valeur que je veux dans l'url ?

    www.monsite.fr/mapage.php?toto=ce_que_je_veux
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 62
    Points : 18
    Points
    18
    Par défaut
    Ah oui c'est vrai ! ! !
    Avec la méthode $_GET je suis vulnérable...
    Dans ce cas je vais re-essayé de faire fonctionner la requête préparé 😢

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 62
    Points : 18
    Points
    18
    Par défaut
    Ou alors, je fais un htmlspecialchar sur mes variables $_GETavant de les utiliser.

  7. #7
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    Encore pas besoin du htmlspecialchars (qui ne s'utilise pas dans un contexte SQL), le intval suffit. En ce qui concerne la vulnérabilité le code tel que présenté est vulnérable (malgré le POST) dans la construction dynamique du WHERE.. L'idée serait comme je l'ai dit de conserver les filtres à chaque page donc il serait intéressant de passer tout ça en GET.
    Le bienfait n'est jamais perdu

  8. #8
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Citation Envoyé par Stev_k Voir le message
    Ah oui c'est vrai ! ! !
    Avec la méthode $_GET je suis vulnérable...
    Dans ce cas je vais re-essayé de faire fonctionner la requête préparé 😢
    Même avec post.
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 62
    Points : 18
    Points
    18
    Par défaut
    Merci Willy_k pour l'idée du $_GET
    Ça marche super.
    Il reste maintenant le problème de sécurité du site:
    -Une requête préparé ne me met-elle pas à l'abri d'une injection SQL?
    -protéger mes $_GET avec intval ne me protège t-il pas ?
    -s'il était possible d'utiliser un $_POST à la place du $_GET , comment serait-il possible de faire une injection SQL.(si tous les champs sont des SELECT)

    J'aurais peut-être besoin d'un cours de sécurité ?
    Merci

  10. #10
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Si je crée une page html qui reprend ton formulaire je peux mettre les valeurs que je veux. Non ?
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 62
    Points : 18
    Points
    18
    Par défaut
    Je ne suis pas sur de comprendre.
    Comment ça reprendre mon formulaire ?
    Et mettre le valeurs que vous voulez ou exactement ?

  12. #12
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1/ Ce qu'il faut comprendre, c'est qu'il faut toujours préparer les requêtes traitant des données externes.

    2/ une autre solution :
    • Mettre le formulaire en post
    • Enregistrer les critères dans des session

    2 avantages :
    • plus besoin de les passer en get lors de la pagination (URL plus "propre")
    • on peut changer de page, puis revenir, la sélection sera toujours active.

  13. #13
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Sur un autre forum que je fréquente, un utilisateur avait posté une discussion à propos d'un script écrit en html et js censé faire un "captcha" avec méthode post. Après le post, dans ses contrôles, il testait en plus que le referer correspondait à son domaine. Avec un petit programme écrit en Delphi et le contrôle WebBrowser j'ai contourné ses protections.

    http://forum.html.it/forum/showthrea...7#post25464537

    Message #36.
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  14. #14
    Invité
    Invité(e)
    Par défaut
    @badaze


  15. #15
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 62
    Points : 18
    Points
    18
    Par défaut
    Bonjour à vous jreaux62 et badaze 😂

    @badaze C'est moi ou votre forum est en italien...?
    En tout cas pourrez vous me dire quelle est la faille que vous avez exploité ?
    Qu'aurait-il du faire pour que vous ne puissiez pas contourner sa sécurité ?

    @jreaux62
    Le numéro 2) est la première idée que j'ai eu mais, je l'ai mal mise en oeuvre car je me retrouvais à faire un nombre conséquent de if...elseif afin de gérer tous les cas possibles de requêtes SQL, en fonctions des critères choisis.
    Mais là, j'utilise un array + la méthode du $_POST dans les $_SESSION, c'est beaucoup plus "propre" et surtout, ça fonctionne 😉.
    Si je comprends bien, je suis maintenant à l'abri d'une injection SQL?

  16. #16
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    Montrez nous le nouveau code
    Le bienfait n'est jamais perdu

  17. #17
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    @jreaux62.

    C'est l'utilisateur qui avait demandé explicitement à ce qu'on essaie de prendre son programme en défaut. Sinon ça ne me viendrait pas à l'esprit de faire une chose pareille.

    @Stev_k
    La faille vient de ce qu'on peut facilement manipuler les données entre le moment où le flux html arrive et le moment où il est affiché.
    Dans le cas du message sur le forum italien :
    • J'avais créé une page html qui reprenait le code source de la page que j'ai modifiée afin de transmettre les valeurs que je voulais pour voir si j'arrivais à lui faire prendre des vessies pour des lanternes (en fait le piratage n'est rien d'autre que ça). J'ai vu que ça ne fonctionnait pas et je me suis vite douté qu'il utilisait le REFERER pour contrôler le domaine.... ce qu'il a confirmé ensuite.
    • Donc je me suis dit que si j'arrivais à modifier les valeurs sans modifier les informations "système" et donc toujours avoir un REFERER sur son domaine au moment du submit le tour serait joué. Un navigateur affiche les données après les avoir reçues et "parsées". Il suffisait de pouvoir intervenir entre la fin de la réception des données et avant leur affichage. Il existe un composant nommé WebBrowser disponible en Delphi (et je suppose aussi pour d'autres langages puisqu'il me semble que c'est un activeX) qui est en fait un navigateur internet. Ce composant dispose de plein de méthodes et d'évènements qui permettent de contrôler le comportement d'une page html. Après quand on s'y connait en programmation ce n'est qu'une question de (peu de) temps avant d'y arriver.
    • Pour pouvoir s'en prémunir, il aurait dû (AMHA) utiliser les variables de sessions puisqu'elle sont stockées sur le serveur. C'est un peu comme dans les films d'espionnage où deux gars ont chacun une moitié de billet pour se reconnaître. Si toi seul a accès à ta moitié et qu'on te présente l'autre moitié qui correspond c'est bon sinon ça ne l'est pas.
    • Ton cas est un peu différent. Pour te prémunir il te suffit (AHMA) d'utiliser une requête préparée puisque ce que j'en sais elles empêchent les injections SQL.
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  18. #18
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 62
    Points : 18
    Points
    18
    Par défaut
    Conformément au conseil numéro 2 de jreaux62 et pour répondre à willy_k:

    1/ J'utilise la méthode post
    2/Dans une page de traitement (celle vers laquelle pointe le formulaire), je fais ceci:
    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
     
    <?php 
    session_start();
    if(isset($_POST['ville']) OR isset($_POST['catégorie']) OR isset($_POST['part_pro']) OR isset($_POST['demande_offre']) ){
     
    $_SESSION['ville'] = $_POST['ville'];
    $_SESSION['catégorie']= $_POST['catégorie'];
    $_SESSION['part_pro']= $_POST['part_pro'];
    $_SESSION['demande_offre']=$_POST['demande_offre'];
    header('location:index_tri.php');
    }else{
    	header('location:index.php');
    }
     
    ?>
    3/ Enfin, sur la page index_tri, je fais ceci:
    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
     
     
    include('fonction_pagination.php');
     
    $page = (isset($_GET['page']) ? intval($_GET['page']): 1);
    if($page <= 0) {
      $page = 1;
    }
    $debut = ($page - 1) *30;
    $retour = 'SELECT COUNT(*) AS total FROM ventes WHERE ';
    $requete_sql = 'SELECT * FROM ventes WHERE ';
    $values = array();
    $champs = array('catégorie','ville','demande_offre,'part_pro');
    if(isset($_SESSION)){
      foreach ($_SESSION as $key => $value) {
        if(!empty($value)){
          foreach ($champs as $nom) {
            if($key == $nom){
     
              $requete_sql .= $key.'=\''.$value.'\' AND ';
              $retour .= $key.'=\''.$value.'\' AND ';
            }
          }
        }
      }
      $retour .= '1=1';
      $req3 = $bdd -> query($retour);
      $nombreElementsTotal = $req3 -> fetchcolumn();
    $nombreDePages = ceil($nombreElementsTotal/30);
      $requete_sql .= '1 = 1 LIMIT '.$debut.',30';
       echo $requete_sql ;
      $req = $bdd -> query($requete_sql);
      $_SESSION['nombre_annonces'] = $nombreElementsTotal;
    }
    Quant à la fameuse requête préparé, j'ai essayé ceci (à remplacer dans le code précédent):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    .
    .
    .
    $requete_sql .= $key.'= :champs AND ';
    .
    .
    .
    echo $requete_sql ;
    $req = $bdd -> prepare($requete_sql);
      $req -> execute(array('champs'=>intval($value)));
    Dans le cas de la requête préparé, le echo $requete_sql m'affiche (Le cas ci-dessous j'ai sélectionné les deux champs part_pro et demande_offre) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM annonces WHERE part_pro = :champs AND demande_offre = :champs AND 1 = 1 LIMIT 0,30
    le :champs n'est pas interprété. c'est ce qui m'as poussé à abandonner la requête préparé pour la requête simple.

    PS:@willy_k qu'est-ce que vous avez contre htmlspecialchars... il est gentil pourtant

  19. #19
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    on peut utiliser une seule variable de SESSION, sous forme d'array :
    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
    <?php
    // SESSION recherche
    if( empty($_SESSION['recherche']) ){ $_SESSION['recherche'] = array();
    // Mise en SESSION si POST
    if(isset($_POST['ville']){ 
    	$_SESSION['recherche']['ville'] = $_POST['ville'];
    }
    if(isset($_POST['catégorie']){ 
    	$_SESSION['recherche']['catégorie'] = $_POST['catégorie'];
    }
    if(isset($_POST['part_pro']){ 
    	$_SESSION['recherche']['part_pro'] = $_POST['part_pro'];
    }
    if(isset($_POST['demande_offre']){ 
    	$_SESSION['recherche']['demande_offre'] = $_POST['demande_offre'];
    }
    De fait, on peut tout effacer d'un coup :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unset($_SESSION['recherche']);
    N.B. 'catégorie' : il faut EVITER les noms de variables / champs avec des accents !
    Dernière modification par Invité ; 21/06/2017 à 17h53.

  20. #20
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 62
    Points : 18
    Points
    18
    Par défaut
    Merci jreaux62
    La présence du 'é' est du a une négligence de ma part. Je remarque ça à chaque fois et à chaque fois je me dis ''bof''...Mais bon je vais changer ça.

    Une idée sur ce qui cloche avec la requête préparé ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Choix entre requête SQL ou mapping entre tables
    Par webfranc dans le forum Connectivité
    Réponses: 4
    Dernier message: 25/01/2011, 14h52
  2. Requête SQL et tableau à double entrée
    Par Invité dans le forum Langage SQL
    Réponses: 4
    Dernier message: 06/06/2007, 20h51
  3. Différence de résultats entre requêtes SQL et Criteria
    Par titoudemtl dans le forum Hibernate
    Réponses: 3
    Dernier message: 07/08/2006, 09h30
  4. [SQL] Problème avec script de pagination et requête sql sur deux tables
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/06/2006, 14h06
  5. Résultats différent entre une requête SQL, et la même en VBA
    Par thetaps dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 23/09/2005, 12h05

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