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 :

Problème sur pagination


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    autodidacte
    Inscrit en
    Juin 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : autodidacte

    Informations forums :
    Inscription : Juin 2014
    Messages : 45
    Par défaut Problème sur pagination
    Bonjour,

    Page suivante ne me retourne rien. Sauriez-vous m'aider svp?


    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
     
     
    <form action="" method="GET" name='form_acheter' id='form_acheter'>   
     
       <div id="rooms">   
    	<?php 
    $rooms = isset($_GET['pieces']) ? $_GET['pieces'] : array() ;
    $selected='selected="selected"';
     	?>
        <label for="pieces"  class="tag">Pièces *</label>
        <select multiple="multiple"  name="pieces[]"  class="select" >
        <option value="1"<?php if(in_array('1',$rooms)) echo $selected; ?>>Studio</option>
        <option value="2"<?php if(in_array('2',$rooms)) echo $selected; ?>>2 pièces</option>
        <option value="3"<?php if(in_array('3',$rooms)) echo $selected; ?>>3 pièces</option>
        <option value="4"<?php if(in_array('4',$rooms)) echo $selected; ?>>4 pièces</option>
        <option value="5"<?php if(in_array('5',$rooms)) echo $selected; ?>>5 pièces</option>
        <option value="6"<?php if(in_array('6',$rooms)) echo $selected; ?>>6 pièces</option>
        <option value="7"<?php if(in_array('7',$rooms)) echo $selected; ?>>7 pièces et +</option>
        </select> 
        <br /><br />
     
     
     
        </div>
     
     <label for="city"  class="tag">Ville *</label>
        <select multiple="multiple" name="ville[]" id="ville" size="5" class="select">
     
        <?php 
     
    	include('mysql_connect.php');
        $set =mysql_query("SET NAMES 'utf8'");
        $ville_query= "SELECT DISTINCT v.ville_id, vi.ville_nom FROM marimmo_ventes v 
    	               JOIN marimmo_villes vi ON vi.ville_id = v.ville_id
    		      ORDER BY vi.ville_nom ASC" ;
    	$ville_req = mysql_query($ville_query) or die(mysql_error());
     
            $town = isset($_GET['ville']) ? $_GET['ville'] : array() ;
    	$selected = 'selected="selected"';
     
    	while ($city = mysql_fetch_assoc($ville_req))
    	       { $ville_id = $city['ville_id'];
    		  $ville_nom = $city['ville_nom'];
      ?> <option value="<?php echo $ville_id; ?>"<?php if(in_array($ville_id,$town)) echo $selected; ?>><?php echo $ville_nom; ?></option>
     
        <?php  }?>
        </select>
     
        <span class="error"><?php if(isset($e_ville)) echo $e_ville; ?> </span>
        <br /><br />
     
     
     
        <br /><br />
     <input type="submit" name="submit_rechercher" id="submit_rechercher" value="Rechercher" /> 
     </form>
    <?php
     if(!empty($_GET['submit_rechercher'])) {
     
    if (empty($_GET['ville'])  || empty($_GET['pieces']))
       {  $e_rooms = 'Le champ "Pièces" est requis' ;
         $e_ville = 'Le champ "Ville" est requis' ;
       }
       else {     $rooms=array_map('mysql_real_escape_string',$rooms);
    			  $roomsi=implode(',',$rooms);
     
    			  $town=array_map('mysql_real_escape_string',$town);						 
    			  $towni= implode(',',$town);
     
     
     
                  // puis requêtes SQL :
                    1. qui compte  le nombre de résultats correspondant à ma recherche,   pour pagination
                     2. qui affiche la liste des résultats correspondant.
     
                 // puis 
     
                  $suivant = $current_page+1;
                  $precedent = $current_page-1; 
     
                   if ($nb_pages > 1  ) 
                     { 
                          if ($suivant <= $nb_pages)
                             { ?> <a class='numero_page' 
     href="Untitled-1.php?<?php foreach($_GET['ville'] as $k =>$ville) { echo "ville[]=$ville&"; } ?><?php foreach($_GET['pieces'] as $r =>$pieces) {echo "pieces[]=$pieces&";} ?>page=<?php echo $suivant; ?>">Suivante </a>
          <?php  } 
             else {?> <a class='no_link'>Suivante</a>
        <?php  }      
     
                  }
    }
    L'url sur Page 2 (page Suivante qui est vide de résultats paginés) contient :
    Untitled-1.php?ville[]=%208&ville[]=%2017&ville[]=%2019&ville[]=%2022&ville[]=%2026&ville[]=%2032&pieces[]=1&pieces[]=2&pieces[]=3&pieces[]=4&pieces[]=5&pieces[]=6&pieces[]=7&page=2

    Merci d'avance pour vos belles lumières

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    C'est plus du PHP, c'est du tir au pigeon

    1 - Stocke tes paramètres de recherche dans une session PHP plutôt que de les transporter de page en page dans l'url.
    2 - L'idée d'une pagination c'est de n'afficher qu'une partie des informations, et donc ici, dans la requête de n'extraire que les données entre deux bornes. Simplement avec Mysql on utiliser la clause LIMIT.
    http://antoine-herault.developpez.co...atique-en-php/
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Femme Profil pro
    autodidacte
    Inscrit en
    Juin 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : autodidacte

    Informations forums :
    Inscription : Juin 2014
    Messages : 45
    Par défaut
    c'est du tir au pigeon mdr

    *****
    Oh non pas encore !!! J'ai déjà essayé de stocker ça en session, sans succès.
    Merci pour ta réponse, c'est bon c'est l'heure de sauter par la fenêtre !
    Ok t'es en train de me dire que comme seuls et uniques params à passer en url, c'est ordre de tri, $limit, et $per_page, c'est tout. C'est ça? C'est vrai que c'est ce que j'ai vu mais... vu que session sur select multiple ne marchait pas, j'ai rajouté tous les autres.

    Et quand je regarde des sites semblables aux miens, dans l'url, ya tous les éléments du form avec les values sélectionnées.. Bon ok, je vais refaire avec $_SESSION mais.... on m'a dit de en pas faire comme ça !!! aaaaaaaaaahhhhhhhhhh !!!! C'est une conspiration pour me rendre dingo non? on y est presque!

    merci pour ta réponse

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Une URL n'est pas faite pour contenir tout plein de données comme ça mais ton problème est plutôt sur le point 2 : actuellement tu n'as pas traité ta pagination.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    Femme Profil pro
    autodidacte
    Inscrit en
    Juin 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : autodidacte

    Informations forums :
    Inscription : Juin 2014
    Messages : 45
    Par défaut
    si si, j'ai tout pour la pagination, c'est juste que j'ai raccourci mon code en disant : // requetes COUNT etc

    Look :

    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
     
    <?php
     if(!empty($_GET['submit_rechercher'])) {
     
    if (empty($_GET['ville'])  || empty($_GET['pieces']))
       {  $e_rooms = 'Le champ "Pièces" est requis' ;
         $e_ville = 'Le champ "Ville" est requis' ;
       }
       else {      $_SESSION['rooms']=$rooms;
                  $roomi=array_map('mysql_real_escape_string',$rooms);
    			  $roomsi=implode(',',$roomi);
     
    			  $_SESSION['town']=$town;		 
    			  $towns =array_map('mysql_real_escape_string',$town);						 
    			  $towni= implode(',',$towns);
     
                    $cool = "SELECT COUNT(ventes_id) as nb_correspondances FROM marimmo_ventes v  WHERE  v.nb_pieces IN (".$roomsi.") AND v.ville_id IN (".$towni.")  ";
                               $cool_rep = mysql_query($cool) or die (mysql_error());
                               $info = mysql_fetch_assoc($cool_rep);          
     
                echo '    <div id="nb_de_resultats">'.$info['nb_correspondances'].' résultats correspondent à votre recherche</div>'."\n";
     
     
                $per_page = 3;
                $nb_pages = ceil($info['nb_correspondances']/$per_page);  
                $current_page = isset($_GET['page']) && ($_GET['page'] > 0) && ($_GET['page'] <= $nb_pages) ? $_GET['page'] : 1;
                $nb_results_limit = ($current_page-1)*$per_page;
     
                $et = mysql_query("SET NAMES UTF8");
                $requete = "SELECT  v.ventes_id, v.titre_a_afficher, v.type_de_bien, v.nb_pieces, v.surface_hab, v.prix_fai, v.descriptif, v.date_de_publication, 
    			            vi.ville_nom, vi.cp, vi.ville_id FROM marimmo_ventes v JOIN marimmo_villes vi ON vi.ville_id = v.ville_id WHERE  v.nb_pieces IN ($roomsi) 
    						AND v.ville_id IN (".$towni.") LIMIT $nb_results_limit,3";
                            $req_answer = mysql_query($requete) or die(mysql_error() );
                $rows= mysql_num_rows($req_answer);
                if ($rows == 0)
    			   { 
                                    $no_correspondance = "Aucun bien ne correspond à ces critères. Veuillez élargir votre recherche.";
                   } else {
                                    while($data = mysql_fetch_assoc($req_answer)) {   
                                            $type_de_bien = $data['type_de_bien'];
                                            $ref=           $data['ventes_id'];
                                            $titre =        $data['titre_a_afficher'];
                                            $nb_pieces =    $data['nb_pieces'];
                                            $surface_hab =  $data['surface_hab'];
                                            $descriptif =   $data['descriptif'];
                                            $ville_nom =    $data['ville_nom'];
                                            $ville_id =     $data['ville_id'];
                                            $cp =           $data['cp'];
                                            $prix =         $data['prix_fai'];  
                                            $prix= number_format($prix, 0, ',', ' ');
                                            $en_date_publication = $data['date_de_publication'];    
                                            $explode_publication= explode("-", $en_date_publication);
                                            $date_de_publication_fr = $explode_publication[2]."-".$explode_publication[1]."-".$explode_publication[0];
     
                                             $min_query= "SELECT min_path FROM marimmo_ventes_pics WHERE vente_prod_id='".$ref."' AND min_path RLIKE 'main' ";
                                             $min_req =mysql_query($min_query) or die(mysql_error());
                                             $min = mysql_fetch_assoc($min_req);
                                             $min_path = $min['min_path'];
                                             $main_min = "admin/".$min_path;                                                                                                       
     
                                            echo  "<div class='annonces'>
                                             <table id='table_mini_description'>
                                              <tr>
                                               <td>
                                                <img class='miniatures_liste' src='".$main_min."'  alt=''/>
                                                <span class='ref_pub'> (Réf.".$ref.") - Annonce publiée le : " .$date_de_publication_fr." </span><br /><br />
                                                <span class='titre_a_afficher'> ".$cp." ".strtoupper($ville_nom)."  </span> <br /><br />
                                                <span class='nb_pieces'> ".$nb_pieces." pièces - ".$surface_hab." m² </span> <br />
                                                <span class='prix'>  ".$prix." eur <br /> </span>      
                                                <span class='details_descript'>" .$descriptif." </span> <br /><br />
                                                
                                               </td>
                                              </tr>
                                             </table>
                                             </div>\n";
     
                                    }          
     
     
    		/************** suite pagination *************************/
     echo "<div id='aller_page'><p id='page_en_cours'> Page ".$current_page." sur ".$nb_pages."</p>";
     
            $suivant = $current_page+1;
            $precedent = $current_page-1; 
     
     
            if($nb_pages > 1  ) 
    		{	   
    		  //  $r = urldecode($_GET['rooms2']); $r=str_replace('"', "'",$r);
    		//	$v= urldecode($_GET['ville2']); $v=str_replace('"', "'",$v);
     
                    echo "<form name='go2page_form' id='go2page_form' method='get' action=''>
                    <label for='gotopage' class='gotopage'> Aller à la page : </label>
                    <input type='text' name='go2page' id='go2page' />
                    <input type='submit' name='submit_go2page' class='submit_ok' value='OK' />
                    </form>";
     
            if(isset($_GET['submit_go2page']) && isset($_GET['go2page']) && !empty($_GET['go2page']) && is_numeric($_GET['go2page'])) { 
     
                    $go2page = htmlentities($_GET['go2page']);
     
                    if($go2page <= $nb_pages) 
    				{	?>	+ tir au pigeon !!
    Ok je réessaye avec ces p...igeon de sessions

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Comme je t'ai dit, ce n'est pas les sessions qui vont faire marcher ta pagination.

    Tu pourrais nous mettre le code entier bien indenté parce que la c'est difficile de suivre.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. Problème sur la recherche fulltext en v4 !
    Par poppa dans le forum Requêtes
    Réponses: 3
    Dernier message: 14/05/2004, 00h06
  2. Problème sur fiche MDIchild
    Par nivet dans le forum Composants VCL
    Réponses: 6
    Dernier message: 23/01/2004, 09h07
  3. Problème sur GetPrivateProfileString ???
    Par Bordelique dans le forum Langage
    Réponses: 7
    Dernier message: 25/06/2003, 23h15
  4. Problème sur une requête INSERT
    Par Marion dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/06/2003, 09h45
  5. problème sur une requête!!!!!
    Par Mcgrady_01 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/06/2003, 02h17

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