Aide sur pagination

Eléphanteau du PHP | 32 Messages

02 juil. 2014, 10:43

Hello,

- Je n'ai mis du formulaire que mes select multiples, histoire de faire court, mais je reposte une nouvelle version.
- Pour $go2page, c'est sûr, idem sur $precedente. Je testais dans un premier temps sur $suivante
- mysql_query("SET NAMES UTF8"); => Qu'est-ce qui ne va pas ? C'est là pour supprimer les ? et afficher les accents.

Ca cloche lorsque, dans les links go2page, pagesuivante, etc, je mets mes arrays serialized. Je sais qu'il faut faire passer le contenu de ces arrays dans l'url, mais, dès que dans l'url je marque rooms=$rooms(en version serialized), je me retrouve avec un Warning: array_map(): Argument #2 should be an array (sur lignes $rooms3 = array_map('mysql_real_escape_string',$rooms3);
Si je ne renseigne as $rooms ou $ville dans les links, "pas d'erreur", j'ai au moins la page1 qui s'affiche.

J'ai minifié mon code pour se concentrer sur ces arrays : J'espère que ça sera plus clair ainsi.

<form action="<?php $_PHP_SELF ?>#espace_perso" name='form_acheter' id='form_acheter'>   
 
<?php 
 $rooms = isset($_REQUEST['rooms']) ? $_REQUEST['rooms'] : array() ;
echo '    <div id="rooms">'."\n";
echo '     <label for="rooms" class="tag">Pièces *</label>'."\n";
echo '     <select multiple="multiple"  name="rooms[]" class="select" id="rooms">'."\n";
foreach(range(1, 7) as $v) {
        $selected = in_array($v, $rooms) ? ' selected="selected"' : NULL;
        $text = ($v > 1) ? $v.' pièces' : 'Studio';
        echo '      <option value="'.$v.'"'.$selected.'>'.$text.'</option>'."\n";
}
echo '     </select>'."\n";
echo '    </div>'."\n";
 
    
   
echo '    <label for="ville" class="tag">Ville *</label>'."\n";
echo '    <select multiple="multiple" name="ville[]" id="ville" size="5" class="select">'."\n";

        $setab = mysql_query("SET NAMES 'utf8'"); // Je sais pas trop a quoi ca sert
    $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 = !empty($_REQUEST['ville']) ? $_REQUEST['ville'] : array() ;
    while ($city = mysql_fetch_assoc($ville_req)) {
                $selected = in_array($city['ville_id'], $town) ? ' selected="selected"' : NULL;
echo '     <option value="'.$city['ville_id'].'"'.$selected.'>'.$city['ville_nom'].'</option>'."\n";
        }
echo '    </select>'."\n";
echo !empty($e_ville) ? '    <span class="error">'.$e_ville.'</span>'."\n"  : NULL; 
?>
 <input type="submit" name="submit_rechercher" id="submit_rechercher" value="Rechercher" /> 


/*******/

<?php
 if(!empty($_REQUEST['submit_rechercher'])) {

if(empty($_REQUEST['ville'])  || empty($_REQUEST['rooms'])) {
                        $e_rooms = 'Le champ "Pièces" est requis' ;
            $e_ville = 'Le champ "Ville" est requis' ;
        } else {

                        if(!empty($_REQUEST['rooms2']) && !empty($_REQUEST['ville2'])) {
                         
                                 $rooms2 = urldecode($_REQUEST['rooms2']);
                                 $rooms3 = unserialize($rooms2);  
                                 $rooms3 = array_map('mysql_real_escape_string',$rooms3);
                                 $rooms3 = implode(',',$rooms3);  

                                 $ville2 = urldecode($_REQUEST['ville2']);
                                 $ville3 = unserialize($ville2);
                                 $ville3 = array_map('mysql_real_escape_string',$ville3);                               
                                 $ville3 = implode(',',$ville3);
                                                          
                $cool = "SELECT COUNT(ventes_id) as nb_correspondances FROM marimmo_ventes v  WHERE  v.nb_pieces IN (".$rooms3.") AND v.ville_id IN (".$ville3.")  ";
                           $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 = !empty($_REQUEST['afficher_x_resultats']) ? mysql_real_escape_string($_REQUEST['afficher_x_resultats']) : 10;
            $nb_pages = ceil($info['nb_correspondances']/$per_page);  
            $current_page = isset($_REQUEST['page']) && ($_REQUEST['page'] > 0) && ($_REQUEST['page'] <= $nb_pages) ? $_REQUEST['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 ($rooms3) AND v.ville_id IN (".$ville3.")";
            $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 />
                                            ".$fav." ".$detail."
                                           </td>
                                          </tr>
                                         </table>
                                         </div>\n";
                                                                                               
                                }          
                                                                                                                                 
         
 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;
                $rooms2 = $_REQUEST['rooms2'];
                $ville2 = $_REQUEST['ville2'];   // Quoique je mette, ça passe pas - j'ai fait des dizaines de tests en renommant mes vars rooms2 et ville2 sur chaque action appliquée. Soupir...
               
          if($nb_pages > 1) {          
                         
                echo "<form name='go2page_form' id='go2page_form' method='post' 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($_REQUEST['submit_go2page']) && isset($_REQUEST['go2page']) && !empty($_REQUEST['go2page']) && is_numeric($_REQUEST['go2page']))
				   { $go2page = htmlentities($_REQUEST['go2page']);
                    
					  if($go2page <= $nb_pages) {                                        
echo '<script type="text/javascript">
document.location.replace("acheter.php?rooms2='.$rooms2.'&ville2='.$ville2.''&page='.$go2page.'");
</script>'."\n";
                                        }
                  }    
       
                        echo ($precedent >= 1) ? '<a class="numero_page" href="acheter.php?rooms2='.$rooms2.'&ville2='.$ville2.'&page='.$precedent.'">Précédente</a>'."\n" : "<a class='no_link'> Précédente</a>";      

                        echo ($suivant <= $nb_pages) ? '<a class="numero_page" href="acheter.php?rooms2='.$rooms2.'&ville2='.$ville2.'&page='.$suivant.'">Suivante</a>' : '<a class="no_link">Suivante</a>';
        
        echo "</div>";

                }
                        }
                        }
                }
         }

Je remercie vraiment beaucoup

Eléphanteau du PHP | 32 Messages

02 juil. 2014, 14:30

Si à un moment, n'importe quand, tu veux qu'on essaye avec team viewer, on peut essayer -sans garantie que ça ne coupe pas dès ouverture de Wamp..
Tant que ça ne te casse pas les bonbons :) - vu que t'as bien d'autres chats à fouetter aussi...

J'espère que je ne vais pas devoir moi aussi écrire ce code : image.php?tex=Je%20Suis%20Bete :mrgreen: :shock:


J'ai passé des heures à essayer :
 if( isset($_REQUEST['rooms2'])  && isset($_REQUEST['ville2'])) 
		      	 
				 $rooms2=urldecode($_REQUEST['rooms2']);
				 $rooms3=unserialize($rooms2);  
				 print_r($rooms3);
				 $rooms4=array_map('mysql_real_escape_string',$rooms3); //print_r($rooms4);				   
			 	 $rooms5 = implode(',',$rooms4);  
		
				 
				 $ville2=urldecode($_REQUEST['ville2']); // 
				 $ville3=unserialize($ville2); 
			        $ville4=array_map('mysql_real_escape_string',$ville3);				 
		               $ville5= implode(',',$ville4);       //print_r($ville5);

et plus bas, au niveau de :
  if($nb_pages > 1  ) 
		{	    
		  //  $r = urldecode($_REQUEST['rooms2']); $r=str_replace('"', "'",$r); $r = urlencode($r);
		//	$v= urldecode($_REQUEST['ville2']); $v=str_replace('"', "'",$v); $r = urlencode($r);

200 tentatives infructueuses.. Soupir... ya no sé.. Pourquoi la doc php ne regorge-t-elle pas d'exemples pour chaque cas?
Hummmmmm. Bon après-midi. A+