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 :

Formulaire PHP problème


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 18
    Points : 7
    Points
    7
    Par défaut Formulaire PHP problème
    Bonjour à tous,

    Je suis en train de réalisé une nouvelle version pour un site et j'ai besoin d'une petite aide,

    En effet, j'ai un formulaire de recherche qui me permet de parcourir ma table et me sortir les résultats que je souhaite en fonction de ce que je sélectionne via les champs,

    Il marche très bien jusqu'à ce que j'essaye d'inclure le formulaire sur la même page,

    J'ai comparé les 2 pages et j'ai vu qu'une seule chose était différente,

    Avant :
    2 pages :

    form_recherche.php,
    formulaire banal qui renvoyait sur recherch_av (qui faisait le traitement)

    recherche_av.php,
    page de traitement, stockage des POST dans des variables.

    Ces deux pages,
    session_start();

    Sur form_recherche.php,
    $_SESSION['recherche'] = array(); en plus de session_start();

    Le problème ? et bien si je met le formulaire et la page de traitement sur la même page, les sessions ne marchent pas, du moins le système de pagination ne prend plus en compte le nombre de résultat et mes différents critères (à partir de la 2ème page donc).

    Code :

    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
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    <?php 
    session_start();
    $_SESSION['recherche'] = array();
    include('includes/top.php'); 
    ?>                     
     
    <font size="5" color="#ff40a0"><b>Votre recherche :</font></b><font size="4"><br><form method="post" action="search-result.php"><br>
     
    <input name="type" value="Achat" type="radio"><font color="#000000" size="4"><b><u>Achat</u> </font></b>
     
    <br>
    <input name="bien" value="Appartement" type="radio">Appartement 
    <input name="bien" value="Maison" type="radio">Maison 
    <input name="bien" value="Terrain" type="radio">Terrain
    <input name="bien" value="Fond de commerce" type="radio">Fond de commerce<br>
    <input name="bien" value="Murs commerciaux" type="radio">Murs commerciaux 
     
    <br><br><input name="type" value="Location" type="radio"><font color="#000000" size="4"><b><u>Location </u></font></b>
     
    <select name="type2">
    <option name="x " value="">Tous les types de locations</option>
    <option name="type2" value="Saison">Location saisonnière</option>
    <option name="type2" value="Année">Location à l'année</option>
    </select>
    <select name="loc">
    <option name="loc" value="">Toute les tailles</option>
    <option name="loc" value="Studio">Studio</option>
    <option name="loc" value="T1">T1</option>
    <option name="loc" value="T2">T2</option>
    <option name="loc" value="T3">T3</option>
    <option name="loc" value="T4">T4</option>
    <option name="loc" value="T5">T5</option>
    <option name="loc" value="T6">T6</option>
    </select>
    <br>
     
    <input name="bien" value="Appartement" type="radio">Appartement 
    <input name="bien" value="Maison" type="radio">Maison 
    <input name="bien" value="Terrain" type="radio">Terrain
    <input name="bien" value="Fond de commerce" type="radio">Fond de commerce<br>
    <input name="bien" value="Murs commerciaux" type="radio">Murs commerciaux 
     
    <br>
    <table width=570 height=80 align=center>
       <tr>
           <td><center><b><font size="3"><u>Votre zone géographique :</u></font></b>
    <br><br>
    <?
    $reponse = mysql_query("SELECT DISTINCT ville FROM list_biens ORDER BY ville ASC" );
     
    echo'<select name="ville">';
    echo '<option name="ville" value="">Tous les secteurs</option>';
    while ($donnees = mysql_fetch_array($reponse) )
    {
    ?>
    <option name="ville" value="<?php echo $donnees['ville']; ?>"><?php echo $donnees['ville']; ?></option>
    <?php
    }
    echo'</select></center>'; 
    ?>
    </td>
    <td>
    <center><font size="3"><b><u>Afficher les résultats : </u></font></b><br><br>
    <select name="tri">
    <option name="tri" value="">Trier par :</option>
    <option name="tri" value="ASC">Prix croissants</option>
    <option name="tri" value="DESC">Prix décroissants</option>
    </select></td></center>
       </tr>
    </table>
     
    <table width=570 height=80 align=center>
       <tr>
           <td><font size="3"><b><center><u>Votre budget :</u> </b><br>
    <label>Min</label> : <input type="text" name="budget_min" onKeypress="return valid_mail(event);" /> <br><label>Max</label> : <input type="text" name="budget_max" onKeypress="return valid_mail(event);" />
    </center>
    </td>
     
    <td>
    <center><input type="image" src="http://www.agence-les-arcades.fr/images/search.png" style="width:120px; height:58px"  value="Recherche"></center>
    </td>
    </tr>
    </table><br>
     
    </font></form>
    </div></font><br><br>
     
    <i><font color="#606060" size="4">A votre disposition pour tout conseil, recherche d’un bien ou évaluation, l’Agence Les Arcades vous propose  une parfaite connaissance du marché vous permettant de bénéficier d’avis de valeur réalistes, mais aussi une expérience de plus de 12 ans vous permettant de bénéficier de conseils de qualité.
    <br><br>
    L’Agence Les Arcades, Saint-Malo représente toutes les valeurs d’une agence familiale, proche de ses clients !</font></i>
    <br><br>
     
    </div>
     
    <div id="page_principale"> 
     
    <img src="images/titre8.png"><br>
     
    <?
     
    if (empty($_SESSION['recherche'])) {
       // gestion du where
       $where = array();
     
       $filter = function($p) use (&$where) {
          if ((isset($_POST[$p]) && strlen($_POST[$p]))) {
             $where[] = "$p = '".mysql_real_escape_string($_POST[$p])."'";
             $_SESSION['recherche'][$p] = $_POST[$p];
          }
       };
     
       $filter('type');
       $filter('bien');
       $filter('habimm');
       $filter('type2');
       $filter('loc');
     
       $prix_min_convert = str_replace(' ', '', $_POST['budget_min']);
       $prix_min = (isset($prix_min_convert) && ctype_digit($prix_min_convert)) ? $prix_min_convert : 0;
     
       $prix_max_convert = str_replace(' ', '', $_POST['budget_max']);
       $prix_max = (isset($prix_max_convert) && ctype_digit($prix_max_convert)) ? $prix_max_convert : 999999999;
     
       $_SESSION['recherche']['budget_min'] = $prix_min;
       $_SESSION['recherche']['budget_max'] = $prix_max;
     
      /// on crée une variable $requete pour faciliter l'écriture de la requête SQL.
       $ville = htmlspecialchars($_POST['ville']); 
     
       $where[]   = "(prix BETWEEN $prix_min AND $prix_max) AND ville LIKE '%$ville%'";
       $sql_where = ' WHERE '.implode(' AND ', $where);
       $_SESSION['recherche']['sql_where'] = $sql_where;
     
       ?>
     
    <?
    // gestion du tri
    if ($_POST['tri'] == true) {
    $order_by     = (isset($_POST['tri']) && ($_POST['tri'] === 'DESC')) ? 'DESC' : 'ASC';
    $sql_order_by = "ORDER BY prix $order_by";
    $_SESSION['recherche']['tri'] = $order_by;
    $_SESSION['recherche']['sql_order_by'] = $sql_order_by;
    } 
     
    else { 
    $sql_order_by = "ORDER BY id DESC";
    $_SESSION['recherche']['sql_order_by'] = $sql_order_by;
    } 
     
    }
    else {
       // on récupère les morceaux de sql assemblés précédemment
       $sql_where    = $_SESSION['recherche']['sql_where'];
       $sql_order_by = $_SESSION['recherche']['sql_order_by'];
    }
     
    $target_page = "search-result.php";
    $result = mysql_query ("SELECT * FROM list_biens $sql_where $sql_order_by $sql_limit") or die(mysql_errno().' :: '.mysql_error());
     
    if ($anno==' ') {
    echo'<table width="100%" border="0" bgcolor="#FFFFFF"><tr>
    <td align="center"><i>Aucun résultat pour cette recherche.</i></td></tr></table>';
    exit();
    }	
    // on compte le nombre total d'enregistrements renvoyés par la requête filtrée
    $sql = 'SELECT COUNT(*) AS nbOfRec FROM list_biens '.$sql_where;
    $qry = mysql_query($sql) or die(mysql_errno().' :: '.mysql_error());
    $nb_records = mysql_result($qry, 0, 0);
    echo'&nbsp;<b><font color="#FF0000" size="5">&nbsp;'.$nb_records.' bien(s) correspondent à vos critères.</font><br><font size="5"><a href="form_recherche.php" style="color:#ff40a0;text-decoration:none;">Faire une nouvelle recherche.</font></a></b><hr>';
     
    // on vérifie si la page demandée est dans les limites fixées par la pagination
    $nb_items_per_page = 5;
    $nb_pages          = ceil($nb_records / $nb_items_per_page);
     
    $asked_page = (isset($_GET['page']) && ctype_digit($_GET['page']) && ($_GET['page']))
                     ? (int) $_GET['page']
                     : 1;
     
    if ($nb_records === 0) {
       $asked_page = 1;
    }
    else
    if ($asked_page > $nb_pages) {
       // si la page demandée est supérieure au nombre total de pages alors
       // page demandée = dernière page
       $asked_page = $nb_pages;
    }
     
    // on détermine la clause LIMIT du sql à partir des données de pagination
    if ($asked_page < 0) {
        $asked_page = 1;
    }
     
    $offset = ($asked_page - 1) * $nb_items_per_page;
    if ($offset < 0) {
        $offset = 0;
    }
     
    $length    = $nb_items_per_page;
    $sql_limit = "LIMIT $offset, $length";
     
    // on extrait les données à afficher
    $sql  = "SELECT * FROM list_biens $sql_where $sql_order_by $sql_limit";
    $data = mysql_query($sql) or die(mysql_error());
     
    // PAGINATION //
    // je suppose que ton index affiche 10 pages
    $index_range = 4;
     
    // détermination des bornes à afficher
    if ($nb_pages <= $index_range) {
       $index_start = 1;
       $index_end = $nb_pages;
    }
    else
    if ($asked_page === 1) {
       $index_start = 1;
       $index_end = $index_range;
    }
    else {
       $index_start = $asked_page;
       $index_end   = (($index_start + $index_range) > $nb_pages) ? $nb_pages : ($index_start + $index_range);
    }
     
    // affichage des liens spéciaux : Premier Précedent Suivant Dernier
    $show_first = ($index_start > 1);
    $show_prev  = ($asked_page > 1);
    $show_next  = ($asked_page < $nb_pages);
    $show_last  = ($index_end < $nb_pages);
     
    // génération des la pagination
    $paginate = array();
    $paginate[] = '<div class="paginate">';
     
     
    // lien Précédent
    if ($show_prev) {
       $paginate[] = '<font size="5"><b><a href="'.$target_page.'?page='.($asked_page - 1).'" style="color:#ff40a0;text-decoration:none;">Page précédente <<</font></b></a>&nbsp;';
    }
     
    // affichage des numéros des pages
    for ($i = $index_start; $i <= $index_end; ++$i) {
       $paginate[] = ($i === $asked_page)
                        ? '<span class="current"><font color="#ff40a0" size="5"><b>'.$i.'</b></font></span>&nbsp;'
                        : '<font size="5"><b><a href="'.$target_page.'?page='.$i.'" style="color:#000000;text-decoration:none;">'.$i.'</font></b></a>&nbsp;';
    }
     
    // lien Suivant
    if ($show_next) {
       $paginate[] = '&nbsp;<font size="5" color="#ff40a0"><b><a href="'.$target_page.'?page='.($asked_page + 1).'" style="color:#ff40a0;text-decoration:none;">Page suivante >></font></b></a>';
    }
     
    $paginate[] = '</div>';
     
    ?>
     
     
    <?
          while($plus = mysql_fetch_assoc($data))
          {
          $ligne = $data["idA"];
    //Affichage l'aannonce
    ?>
     
    <center><div style="background-image:url('images/fond_bien.png');background-repeat:no-repeat; width:570px; height:230px;">          
     
    <table width=550>
           <td width=250>
     
    <?
            if ($plus['photo'] == true) {
    ?>
     
    <div style="position:relative; width : 225px; height:185px">
        <div style="position:absolute;z-index:1"> 
    <? echo '<br><center><img src="images/biens/'.$plus['photo'].'" width="225" height="185" /><center>';
    ?>
        </div>
     
    <?
            if ($plus['vendu'] == true) {
    ?>
        <div style="position:absolute;top:45px;left:65px; width:225px; height:185px; z-index:2;font-size:200%;">
     
    <?
    echo '<img src="images/vendu.gif" width="120" height="120">';
    ?>
       </div>
    </div>
     
    <?php } else { ?>
    <?php } ?>
     
              <?php } else { ?>
    <br><center><img src="images/biens/photo.png" width="225" height="185" /></center>
           <?php } ?>
     
    </td>
           <td>
    <?
            if ($plus['exclu'] == true) {
    echo '<center><img src="images/exclu.gif"/></center><br>';
    ?>
              <?php } else { ?>
           <?php } ?>
     
    <?
    echo '<center><b><font size="5"> '.stripslashes(htmlspecialchars($plus['ville'])).'</font>';
    ?>
     
    <?
            if ($plus['loc'] == true) {
    echo '<font size="5">- '.stripslashes(htmlspecialchars($plus['loc'])).'</font>';
    ?>
              <?php } else { ?>
           <?php } ?>
     
    <br>
    <font size="5" color="#ff3300">
     
    <?
            if ($plus['prix'] == true) {
     
    ?>
     
    <?
            if ($plus['type2'] == true) {
     
    echo '<b>Environ</b>';
    ?>
              <?php } else { ?>
           <?php } ?>
     
    <?
    $prix_convert = stripslashes(htmlspecialchars($plus['prix']));
    $result_prix_convert = number_format("$prix_convert", 0, ',', ' ');
    ?>
    <b>
    <? echo $result_prix_convert; ?>
     € AI </b>
     
              <?php } else { ?>
    <b>Nous consulter</b>
           <?php } ?>
    </font>
     
    <br>
    <?
            if ($plus['remarque'] == true) {
     
    echo '<br><b><font size="4" color="#FF3300">'.stripslashes(htmlspecialchars($plus['remarque'])).'</font></b>';
    ?>
              <?php } else { ?>
           <?php } ?>
     
    <?
    echo '<br><font size="6" color="#ff40a0"><b><a href="biens.php?id='.$plus['id'].'&amp;action=consulter" style="color:#ff40a0;text-decoration:none;">> Détails</b></a></font>';
    ?>
     
    <?
    echo '</center>';
    ?>
    </td>
       </tr>
    </table><br>
    </div></center><br>
    <?
          }
    ?>
     
    <?
    echo implode(null, $paginate);
    ?><br>
    </div>
    Pour testé :
    Allez sur cette page, sélectionné dans zone géographique, Saint-Malo (lettre pour lettre), vous allez avoir 121 biens de sorti, page 2, 142 ! (là est le problème !)
    http://www.agence-les-arcades.fr/abc/search-result.php

    Ne faites pas attention au graphisme ni rien, justement je veux corrigé correctement ce code, trop lourd, trop de balise <? fermé pour rien etc ...

    Le code en lui même est correct (la fonctionnalité je parle),
    Pour mon soucis,
    je pense à <form method="post"> qui n'est plus adapté peut-être désormais ?

    merci

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    En disant que j'inclu le formulaire (que je mettrais dans un include par la suite) sur les pages que je souhaite.

  3. #3
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Salut,

    Tu oublies comment fonctionnes PHP et tu utilises mal certaines fonctions.
    empty ne veut pas dire "mon tableau est vide", il veut dire "ma variable n'existe pas".
    Autre chose, à chaque fois que tu rafraîchis ta page, tu lui dis
    "Remets ma variable de session à zéro" puis "si elle n'existe pas, affecte le where". Or tu devrais plutôt lui dire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    //ça c'est juste la première fois qu'on arrive sur la page
    if(empty($_SESSION['recherches'])){
    $_SESSION['recherches']=array();
    }
    //puis plus bas, 
    if(sizeof($_SESSION['recherches'])==0){
    //affecte ton where
    }
    Ceci devrait résoudre cela
    Il marche très bien jusqu'à ce que j'essaye d'inclure le formulaire sur la même page,
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Salut, merci de cette réponse matinale !

    Alors j'ai fais comme tu m'a dis : (mais ça ne marche pas.)

    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
     
    <?php 
    session_start();
    if(empty($_SESSION['recherche'])){
    $_SESSION['recherche']=array();
    }
    include('includes/top.php'); 
    ?>                     
     
    <font size="5" color="#ff40a0"><b>Votre recherche :</font></b><font size="4"><br><form method="post" action="search-result.php"><br>
     
    <input name="type" value="Achat" type="radio"><font color="#000000" size="4"><b><u>Achat</u> </font></b>
     
    <br>
    <input name="bien" value="Appartement" type="radio">Appartement 
    <input name="bien" value="Maison" type="radio">Maison 
    <input name="bien" value="Terrain" type="radio">Terrain
    <input name="bien" value="Fond de commerce" type="radio">Fond de commerce<br>
    <input name="bien" value="Murs commerciaux" type="radio">Murs commerciaux 
     
    <br><br><input name="type" value="Location" type="radio"><font color="#000000" size="4"><b><u>Location </u></font></b>
     
    <select name="type2">
    <option name="x " value="">Tous les types de locations</option>
    <option name="type2" value="Saison">Location saisonnière</option>
    <option name="type2" value="Année">Location à l'année</option>
    </select>
    <select name="loc">
    <option name="loc" value="">Toute les tailles</option>
    <option name="loc" value="Studio">Studio</option>
    <option name="loc" value="T1">T1</option>
    <option name="loc" value="T2">T2</option>
    <option name="loc" value="T3">T3</option>
    <option name="loc" value="T4">T4</option>
    <option name="loc" value="T5">T5</option>
    <option name="loc" value="T6">T6</option>
    </select>
    <br>
     
    <input name="bien" value="Appartement" type="radio">Appartement 
    <input name="bien" value="Maison" type="radio">Maison 
    <input name="bien" value="Terrain" type="radio">Terrain
    <input name="bien" value="Fond de commerce" type="radio">Fond de commerce<br>
    <input name="bien" value="Murs commerciaux" type="radio">Murs commerciaux 
     
    <br>
    <table width=570 height=80 align=center>
       <tr>
           <td><center><b><font size="3"><u>Votre zone géographique :</u></font></b>
    <br><br>
    <?
    $reponse = mysql_query("SELECT DISTINCT ville FROM list_biens ORDER BY ville ASC" );
     
    echo'<select name="ville">';
    echo '<option name="ville" value="">Tous les secteurs</option>';
    while ($donnees = mysql_fetch_array($reponse) )
    {
    ?>
    <option name="ville" value="<?php echo $donnees['ville']; ?>"><?php echo $donnees['ville']; ?></option>
    <?php
    }
    echo'</select></center>'; 
    ?>
    </td>
    <td>
    <center><font size="3"><b><u>Afficher les résultats : </u></font></b><br><br>
    <select name="tri">
    <option name="tri" value="">Trier par :</option>
    <option name="tri" value="ASC">Prix croissants</option>
    <option name="tri" value="DESC">Prix décroissants</option>
    </select></td></center>
       </tr>
    </table>
     
    <table width=570 height=80 align=center>
       <tr>
           <td><font size="3"><b><center><u>Votre budget :</u> </b><br>
    <label>Min</label> : <input type="text" name="budget_min" onKeypress="return valid_mail(event);" /> <br><label>Max</label> : <input type="text" name="budget_max" onKeypress="return valid_mail(event);" />
    </center>
    </td>
     
    <td>
    <center><input type="image" src="http://www.agence-les-arcades.fr/images/search.png" style="width:120px; height:58px"  value="Recherche"></center>
    </td>
    </tr>
    </table><br>
     
    </font></form>
    </div></font><br><br>
     
    <i><font color="#606060" size="4">A votre disposition pour tout conseil, recherche d’un bien ou évaluation, l’Agence Les Arcades vous propose  une parfaite connaissance du marché vous permettant de bénéficier d’avis de valeur réalistes, mais aussi une expérience de plus de 12 ans vous permettant de bénéficier de conseils de qualité.
    <br><br>
    L’Agence Les Arcades, Saint-Malo représente toutes les valeurs d’une agence familiale, proche de ses clients !</font></i>
    <br><br>
     
    </div>
     
    <div id="page_principale"> 
     
    <img src="images/titre8.png"><br>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?
     
    if(sizeof($_SESSION['recherche'])==0){
       // gestion du where
       $where = array();
     
    etc..........
    Même la première page affiche des résultats faussés.

    EDIT : si j'enlève au début
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(empty($_SESSION['recherche'])){
    $_SESSION['recherche']=array();
    et que je met uniquement, $_SESSION['recherche']=array(); avec le session start (la première page affiche les bon résultat mais pas la 2ème ni la 3ème.)

    en indépendant cela fonctionne (sur deux pages mais j'aimerais tout inclure sur la même page, comme expliqué plus haut)

    En testant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if(empty($_SESSION['recherche'])){
    $_SESSION['recherche'] = array();
    echo "ma variable n'existe pas";
    }
    else {
    echo "ma variable existe";
    }
    sur lien

  5. #5
    Membre confirmé
    Avatar de alheuredudejeuner
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2005
    Messages : 376
    Points : 632
    Points
    632
    Billets dans le blog
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(isset($_SESSION['recherche'])){
        // do something if the variable is set
        echo $_SESSION['recherche'].'</br>';
    cordialement

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    @alheuredudejeuner
    Merci mais en quoi cela peux résoudre mon soucis dans mon code initial ?

    Merci bien.

  7. #7
    Membre confirmé
    Avatar de alheuredudejeuner
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2005
    Messages : 376
    Points : 632
    Points
    632
    Billets dans le blog
    4
    Par défaut retrouver les variables de session
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['Prix_min'] = $prix_min;
    je suis débutant, une poignée d"heure, mais je pense que si la session à des valeurs, cela permettrait de les réaffecter aux input, et de retrouver les valeurs initiales, quand tu reviens de la form destination à la form source, je pense (peut-être à tord) que tu récupère le cache du navigateur, c'est pourquoi les valeur saisies sont retrouvées.
    Quand tu restes sur la même form, les valeurs ne sont pas rappelées dans la page si tu le fait pas explicitement.
    un truc comme cela, mais j'ignore si c'est la bonne syntaxe et si c'est sérialisable, en ce moment je fait plus du tricotage php, que du codage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(isset($_SESSION['Prix_min'])){$prix_min= $_SESSION['prix_min'];}

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Merci de ton aide mais ça ne change rien, toujours un soucis avec ma pagination à partir de la deuxième page, la session n'est plus prise en compte.

    HELP SVP, je vois pas... merci

  9. #9
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    je pense que tu ne comprends pas trop ce que tu fais.
    Déjà pour commencer, reprends entièrement ton code html truffé d'erreurs (cela va déjà éviter les problèmes lors des soumissions)

    Rappel :
    chaque balise ouverte doit être refermée avant la balise parente
    ce que tu fais :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <font size="5" color="#ff40a0"><b>Votre recherche :</font></b>
    or cela devrait être :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <font size="5" color="#ff40a0"><b>Votre recherche :</b></font>
    et c'est <br /> et pas <br>.
    Réindente le tout proprement, remplace les <? par <?php, termine correctement les <input /> et pas <input> et après je file un coup de main sur la pagination.

    Et accessoirement bouquine un peu le php parce que c'est pas simple de gérer une pagination sans un minimum de connaissances

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Salut, merci tout d'abords de venir me donné un coup de main,
    J'ai réorganisé un peu le code, j'ai fermé les balises correctement.

    Bon après, je personnaliserait niveau CSS, une fois que ça sera au point.
    Les bonnes veilles balises HTML ce n'est plus du jour d'aujourd'hui.

    J'aimerais que tu regarde également si ma jointure sur le where est correct en plus du problème de session.

    Le code :

    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
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    <?php 
    session_start();
    $_SESSION['recherche'] = array();
    ?>
     
    <!-- Top -->    
    <?php 
    include 'includes/top.php';
    ?>
    <!-- Fin du Top -->  
     
    <!-- Formulaire de recherche -->   
    <?php 
    include 'blocs/research-form.php';
    ?> 
    <!-- Fin du formulaire de recherche -->  
     
    <!-- Container -->
    <div id="container">
    <!-- Content -->
    <div id="content" role="main">
     
    <article>
     
    <?php
    if(empty($_SESSION['recherche'])){
    // gestion du where
    $where = array();
     
    $filter = function($p) use (&$where) {
    if ((isset($_POST[$p]) && strlen($_POST[$p]))) {
    $where[] = "$p = '".mysql_real_escape_string($_POST[$p])."'";
    $_SESSION['recherche'][$p] = $_POST[$p];
    }
    };
     
    $filter('bien');
     
    /// on stock la valeur de la ville dans une variable à part pour la gestion du where.
    $ville = htmlspecialchars($_POST['ville']); 
     
    /// on stock la valeur des prix (slider) dans des variables.
    $prix_min_convert = str_replace(' ', '', $_POST['amount_select']);
    $prix_min = (isset($prix_min_convert) && ctype_digit($prix_min_convert)) ? $prix_min_convert : 0;
     
    $prix_max_convert = str_replace(' ', '', $_POST['amount_select_max']);
    $prix_max = (isset($prix_max_convert) && ctype_digit($prix_max_convert)) ? $prix_max_convert : 999999999;
     
    /// on utilise les variables pour créer des sessions.
    $_SESSION['recherche']['amount_select'] = $prix_min;
    $_SESSION['recherche']['amount_select_max'] = $prix_max;
     
    /// Gestion du where et jointure.
    $where[]   = "(prix BETWEEN $prix_min AND $prix_max) AND `list_villes`.`ville` LIKE '%$ville%' AND `list_villes`.`id` LIKE `list_biens`.`idville`";
    $sql_where = ' WHERE '.implode(' AND ', $where);
    $_SESSION['recherche']['sql_where'] = $sql_where;
     
    // gestion du tri
    if ($_POST['tri'] == true) {
    $order_by     = (isset($_POST['tri']) && ($_POST['tri'] === 'DESC')) ? 'DESC' : 'ASC';
    $sql_order_by = "ORDER BY prix $order_by";
    $_SESSION['recherche']['tri'] = $order_by;
    $_SESSION['recherche']['sql_order_by'] = $sql_order_by;
    } 
     
    else { 
    $sql_order_by = "ORDER BY `list_biens`.`id` DESC";
    $_SESSION['recherche']['sql_order_by'] = $sql_order_by;
    } 
     
    }
    else {
    // on récupère les morceaux de sql assemblés précédemment
    $sql_where    = $_SESSION['recherche']['sql_where'];
    $sql_order_by = $_SESSION['recherche']['sql_order_by'];
    $_SESSION['recherche'] = array();
    }
     
    $target_page = "search-result.php";
    echo "SELECT * FROM `list_biens`,`list_villes` $sql_where $sql_order_by";
    $result = mysql_query ("SELECT * FROM `list_biens`,`list_villes` $sql_where $sql_order_by $sql_limit") or die(mysql_errno().' :: '.mysql_error());
     
    if ($anno==' ') {
    echo'<i>Aucun résultat pour cette recherche.</i>';
    exit();
    }	
    // on compte le nombre total d'enregistrements renvoyés par la requête filtrée
    $sql = 'SELECT COUNT(*) AS nbOfRec FROM `list_biens`, `list_villes` '.$sql_where;
    $qry = mysql_query($sql) or die(mysql_errno().' :: '.mysql_error());
    $nb_records = mysql_result($qry, 0, 0);
    echo'&nbsp;<b><br /><br />'.$nb_records.' bien(s) correspondent à vos critères.</b><br /><br />';
     
    // on vérifie si la page demandée est dans les limites fixées par la pagination
    $nb_items_per_page = 5;
    $nb_pages          = ceil($nb_records / $nb_items_per_page);
     
    $asked_page = (isset($_GET['page']) && ctype_digit($_GET['page']) && ($_GET['page']))
    ? (int) $_GET['page']
    : 1;
     
    if ($nb_records === 0) {
    $asked_page = 1;
    }
     
    else
    if ($asked_page > $nb_pages) {
    // si la page demandée est supérieure au nombre total de pages alors
    // page demandée = dernière page
    $asked_page = $nb_pages;
    }
     
    // on détermine la clause LIMIT du sql à partir des données de pagination
    if ($asked_page < 0) {
    $asked_page = 1;
    }
     
    $offset = ($asked_page - 1) * $nb_items_per_page;
    if ($offset < 0) {
    $offset = 0;
    }
     
    $length    = $nb_items_per_page;
    $sql_limit = "LIMIT $offset, $length";
     
    // on extrait les données à afficher
    $sql  = "SELECT * FROM `list_biens`, `list_villes` $sql_where $sql_order_by $sql_limit";
    $data = mysql_query($sql) or die(mysql_error());
     
    // PAGINATION //
    // je suppose que ton index affiche 10 pages
    $index_range = 4;
     
    // détermination des bornes à afficher
    if ($nb_pages <= $index_range) {
    $index_start = 1;
    $index_end = $nb_pages;
    }
     
    else
    if ($asked_page === 1) {
    $index_start = 1;
    $index_end = $index_range;
    }
     
    else {
    $index_start = $asked_page;
    $index_end   = (($index_start + $index_range) > $nb_pages) ? $nb_pages : ($index_start + $index_range);
    }
     
    // affichage des liens spéciaux : Premier Précedent Suivant Dernier
    $show_first = ($index_start > 1);
    $show_prev  = ($asked_page > 1);
    $show_next  = ($asked_page < $nb_pages);
    $show_last  = ($index_end < $nb_pages);
     
    // génération des la pagination
    $paginate = array();
    $paginate[] = '<div class="paginate">';
     
    // lien Précédent
    if ($show_prev) {
    $paginate[] = '<b><a href="'.$target_page.'?page='.($asked_page - 1).'">Page précédente</a></b>';
    }
     
    // affichage des numéros des pages
    for ($i = $index_start; $i <= $index_end; ++$i) {
    $paginate[] = ($i === $asked_page)
    ? '<span class="current"><b>'.$i.'</b>'
    : '<b><a href="'.$target_page.'?page='.$i.'">'.$i.'</b>';
    }
     
    // lien Suivant
    if ($show_next) {
    $paginate[] = '&nbsp;<b><a href="'.$target_page.'?page='.($asked_page + 1).'">Page suivante >></a></b>';
    }
     
    $paginate[] = '</div>';
     
    ?>
     
    <?php
    while($plus = mysql_fetch_assoc($data))
    {
    $ligne = $data["idA"];
     
    $prix_convert = stripslashes(htmlspecialchars($plus['prix']));
    $result_prix_convert = number_format("$prix_convert", 0, ',', ' ');
     
    //Affichage des annonces.
    echo '<b>'.stripslashes(htmlspecialchars($plus['ville'])).'</b>';
    echo "<br />$result_prix_convert<br />"; 
     
    }
    //Fin de l'affichage des annonces.
     
    echo "<br />"; 
    echo implode(null, $paginate);
    //Fin de la pagination.
    ?>
     
    </article>
     
    <!-- Fin du Content -->	
    </div>
     
    <!-- Sidebar -->    
    <?php
    include 'includes/sidebar.php';
    ?>
    <!-- Fin de la Sidebar-->  
     
    <!-- fin de Container -->
    </div>
     
    <!-- Footer -->
    <div id="footer-container">
    <footer>
    </footer>
    </div>
     
    </body>
    </html>
    Tu peux testé sur cette page.
    http://www.agence-les-arcades.fr/ARC...rch-result.php

    J'ai fais affiché la requête pour que tu regarde en même temps ma jointure.

    Merci beaucoup, vraiment.

  11. #11
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Purée, c'est pas juste une aide, faut tout refaire.
    Ôte-moi un doute : est-ce que tu comprends ce que tu codes ?

    Tu t'attaques à la gestion d'un filtre avec une pagination, c'est déjà pas facile d'accès en temps normal alors quand en plus, tu es grand débutant, c'est carrément l'Everest.

    En le faisant pas à pas et toi à tâtons, ce fil va atteindre tranquillement les 100 messages. Vois autour de toi si tu peux pas le faire faire, tu y gagneras du temps et de la sérénité.

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Re . Tout refaire ? Je comprends pas pourquoi ? La gestion des différentes Clause (Where, Limit) fonctionne . Le traitement marche normalement . Le soucis se passe au niveau des sessions, c'est cette partie a refaire je pense ... Merci ...

Discussions similaires

  1. Problème Formulaire PHP
    Par mikius dans le forum Langage
    Réponses: 2
    Dernier message: 08/06/2007, 10h00
  2. [MySQL] Probléme de apostrophe a mettre en formulaire php/mysql
    Par mecmec dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 02/06/2007, 20h42
  3. problème sous-formulaire php
    Par arnogef dans le forum Langage
    Réponses: 3
    Dernier message: 06/04/2007, 21h57
  4. Problème formulaire PHP sous Apache Windows
    Par nicorico dans le forum Apache
    Réponses: 4
    Dernier message: 29/03/2007, 14h35
  5. [MySQL] Problème transfert donnees entre 2 formulaires php.
    Par pgil dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 17/01/2006, 15h00

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