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

Requêtes MySQL Discussion :

problème $_POST et $_SESSION et requête MYSQL


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de GarGamel55
    Profil pro
    Inscrit en
    Août 2005
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 154
    Par défaut problème $_POST et $_SESSION et requête MYSQL
    Bonsoir,

    Sur mon site j'ai un moteur de recherche, je récupère le mot clé via un formulaire puis j'éxécute ma requête qui me retourne les fiches concernées.

    Pas de problème sauf que ...

    ... Pour des raisons de mise en page j'ai installé un script qui permet l'affichage page par page...

    [voix M6] Et là c'est le drame ...[\voix M6]

    Lorsque je vais sur la page 2 j'obtiens aucun résultat puisqu"il a "perdu" mon mot clé. On m'a donc conseillé d'utilisé $_SESSION mais j'arrive pas à m'en sortir malgré tout les tutos de la toile

    Si qq'un pouvez m'aider

    Extrait de mon code sans $_SESSION :

    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
     
    <?
    require("secure/connect.php");
    require ("suite2.php"); // script pour l'affichage page par page
     
     
    $recup = trim(addslashes(htmlentities($_POST['nom'], ENT_QUOTES)));
     
    .......
     
    $sql= "SELECT count(id) FROM fiche WHERE MATCH (titre, panier) AGAINST ('$recup*' IN BOOLEAN MODE)" ;
     
    $titre = mysql_query($sql) .....
    $nb_total = mysql_fetch_array($titre);
     
    // on teste si ce nombre de vaut pas 0
    if (($nb_total = $nb_total[0]) == 0) {
        echo 'Aucune réponse trouvée';
    }
    else {
        echo '';
     
     
    	 // sinon, on regarde si la variable $debut (le x de notre LIMIT) n'a pas déjà été déclarée, et dans ce cas, on l'initialise à 0
        if (!isset($_GET['debut'])) $_GET['debut'] = 0;
     
        $nb_affichage_par_page = 5;
     
        // Préparation de la requête avec le LIMIT
        $sql = "SELECT * FROM fiche WHERE MATCH (titre, panier) AGAINST ('$recup*' IN BOOLEAN MODE) LIMIT ".$_GET['debut'].','.$nb_affichage_par_page; //mettre ici le filtre
     
        // on exécute la requête
        $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
     
        // on va scanner tous les tuples un par un 
        while ($data = mysql_fetch_array($req)) {
            // on affiches les résultats dans la <table>
            echo '<li class="texte"><a href="fiche.php?id='.$data['id'].'" class="menu">'.stripslashes($data['titre']).'</a>'.'<br>'; // ICI
        }
     
     
        // on affiche enfin notre barre
        echo '<p class="retour" align="center">'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 3).'</p>';
     
    ?>
    Je n'arrive pas à garder ma variable, du coup pour la 2ème page il éxécute la requête avec $recup vide ...

  2. #2
    Membre Expert
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Par défaut
    C'est pas pour être contrariant mais c'est un peu bidon ce script d'affichage de pagination qui ne gère même pas l'ajout de variable dans l'url....

    On m'a donc conseillé d'utilisé $_SESSION mais j'arrive pas à m'en sortir malgré tout les tutos de la toile
    Bof bof les conseils.

    Enfin dans ton script je vois rien qui corresponde à une initiation de session.

    Perso je serais plutot d'avis de revoir ta fonction barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 3).

    Si tu désires rééllement persister dans l'utilisation des sessions inspire toi de cela :
    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
     
    <?
    session_start();
     
    if( $_GET['page'] == 0)
    {
       if( isset( $_SESSION['nom'] ) ) unset($_SESSION["nom"]);
       $recup = $_POST['nom'];
       $_SESSION['nom'] = $recup;
    }
    else
    {
       $recup = $_SESSION['nom'];
    }
    $recup = trim(addslashes(htmlentities($recup, ENT_QUOTES))); 
    ?>
    bye

  3. #3
    Membre confirmé Avatar de GarGamel55
    Profil pro
    Inscrit en
    Août 2005
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 154
    Par défaut
    voilà des conseils clair et direct !

    je vais essayer de revoir le code de la pagination

    Le script : (désolé il est long)
    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
     
    <?php
    function barre_navigation ($nb_total, 
            $nb_affichage_par_page, 
            $debut,
            $nb_liens_dans_la_barre) {
     
        $barre = '';
     
        // on recherche l'URL courante munie de ses paramètre auxquels on ajoute le paramètre 'debut' qui jouera le role du premier élément de notre LIMIT
        if ($_SERVER['QUERY_STRING'] == "") {
            $query = $_SERVER['PHP_SELF'].'?debut=';
        }
        else {
            $tableau = explode ("debut=", $_SERVER['QUERY_STRING']);
            $nb_element = count ($tableau);
            if ($nb_element == 1) {
                $query = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&debut=';
            }
            else {
                if ($tableau[0] == "") {
                    $query = $_SERVER['PHP_SELF'].'?debut=';
                }
                else {
                    $query = $_SERVER['PHP_SELF'].'?'.$tableau[0].'debut=';
                }
            }
        }
     
        // on calcul le numéro de la page active
        $page_active = floor(($debut/$nb_affichage_par_page)+1);
        // on calcul le nombre de pages total que va prendre notre affichage
        $nb_pages_total = ceil($nb_total/$nb_affichage_par_page);
     
        // on calcul le premier numero de la barre qui va s'afficher, ainsi que le dernier ($cpt_deb et $cpt_fin)
        // exemple : 2 3 4 5 6 7 8 9 10 11 << $cpt_deb = 2 et $cpt_fin = 11
        if ($nb_liens_dans_la_barre%2==0) {
            $cpt_deb1 = $page_active - ($nb_liens_dans_la_barre/2)+1;
            $cpt_fin1 = $page_active + ($nb_liens_dans_la_barre/2);
        }
        else {
            $cpt_deb1 = $page_active - floor(($nb_liens_dans_la_barre/2));
            $cpt_fin1 = $page_active + floor(($nb_liens_dans_la_barre/2));
        }
     
        if ($cpt_deb1 <= 1) {
            $cpt_deb = 1;
            $cpt_fin = $nb_liens_dans_la_barre;
        }
        elseif ($cpt_deb1>1 && $cpt_fin1<$nb_pages_total) {
            $cpt_deb = $cpt_deb1;
            $cpt_fin = $cpt_fin1;
        }
        else {
            $cpt_deb = ($nb_pages_total-$nb_liens_dans_la_barre)+1;
            $cpt_fin = $nb_pages_total;
        }
     
        if ($nb_pages_total <= $nb_liens_dans_la_barre) {
            $cpt_deb=1;
            $cpt_fin=$nb_pages_total;
        }
     
        // si le premier numéro qui s'affiche est différent de 1, on affiche << qui sera un lien vers la premiere page
        if ($cpt_deb != 1) {
            $cible = $query.(0);
            $lien = '<A HREF="'.$cible.'" class="retour">&lt;&lt;</A>&nbsp;&nbsp;';
        }
        else {
            $lien='';
        }
        $barre .= $lien;
     
        // on affiche tous les liens de notre barre, tout en vérifiant de ne pas mettre de lien pour la page active
        for ($cpt = $cpt_deb; $cpt <= $cpt_fin; $cpt++) {
            if ($cpt == $page_active) {
                if ($cpt == $nb_pages_total) {
                    $barre .= $cpt;
                }
                else {
                    $barre .= $cpt.'&nbsp;-&nbsp;';
                }
            }
            else {
                if ($cpt == $cpt_fin) {
                    $barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page);
                    $barre .= "'class='retour'>".$cpt."</A>";
                }
                else {
     
                    $barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page);
                    $barre .= "'class='retour'>".$cpt."</A>&nbsp;-&nbsp;";
                }
            }
        }
     
        $fin = ($nb_total - ($nb_total % $nb_affichage_par_page));
        if (($nb_total % $nb_affichage_par_page) == 0) {
            $fin = $fin - $nb_affichage_par_page;
        }
     
            // si $cpt_fin ne vaut pas la dernière page de la barre de navigation, on affiche un >> qui sera un lien vers la dernière page de navigation
        if ($cpt_fin != $nb_pages_total) {
            $cible = $query.$fin;
            $lien = '&nbsp;&nbsp;<A HREF="'.$cible.'"class="retour">&gt;&gt;</A>';
        }
        else {
            $lien='';
        }
        $barre .= $lien;
     
        return $barre;    
    }
    ?>
    mais je ne vois pas comment y intégrer la variable

  4. #4
    Membre Expert
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Par défaut
    Mouarf le script le prenait dejaen compte...
    Suffisait de le faire passer en GET et non en POST.

    cf ligne 13

    bye

  5. #5
    Membre confirmé Avatar de GarGamel55
    Profil pro
    Inscrit en
    Août 2005
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 154
    Par défaut
    j'ai pas de post à la ligne 13

  6. #6
    Membre Expert
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Par défaut
    non la ligne 13 de la fonction barre_navigation

    ce bout de code en fait :

    // on recherche l'URL courante munie de ses paramètre auxquels on ajoute le paramètre 'debut' qui jouera le role du premier élément de notre LIMIT
    if ($_SERVER['QUERY_STRING'] == "") {
    $query = $_SERVER['PHP_SELF'].'?debut=';
    }
    else {
    $tableau = explode ("debut=", $_SERVER['QUERY_STRING']);
    $nb_element = count ($tableau);
    if ($nb_element == 1) {
    $query = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&debut=';
    }
    else {
    if ($tableau[0] == "") {
    $query = $_SERVER['PHP_SELF'].'?debut=';
    }
    else {
    $query = $_SERVER['PHP_SELF'].'?'.$tableau[0].'debut=';
    }
    }
    }

  7. #7
    Membre confirmé Avatar de GarGamel55
    Profil pro
    Inscrit en
    Août 2005
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 154
    Par défaut


    je ne sais pas comment le modifier
    pour y intégrer ma variable $recup que j'ai récupéré sur l'autre page


    désolé

  8. #8
    Membre Expert
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Par défaut
    en faits, au lieu d'envoyer le formulaire de recherche en post envoie le en get. C'est tout.

  9. #9
    Membre confirmé Avatar de GarGamel55
    Profil pro
    Inscrit en
    Août 2005
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 154
    Par défaut
    je me prenait la tête depuis des jours ... et toi paf non chalament tu me sorts "bah passe le en GET" je cherchait midi à 14H

    j'ai encore bcp de chose à apprendre

    c'est résolu mille merci 8)

  10. #10
    Membre Expert
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Par défaut
    de rien.

    :sorry: si je suis resté un peu froid...C'est le temps de ces derniers qui me tape sur le système...j'en suis tombé malade

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Problème "explode" à partir d'une requête MySQL
    Par steph8596 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 05/06/2012, 14h16
  2. Probléme avec une requéte mysql(Oracle 9)
    Par lmkrte dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/03/2007, 22h41
  3. Problème avec une requête MySQL
    Par Downy35 dans le forum Requêtes
    Réponses: 4
    Dernier message: 30/08/2006, 11h09
  4. Réponses: 1
    Dernier message: 07/08/2006, 10h22
  5. Réponses: 1
    Dernier message: 29/11/2005, 22h05

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