Page 1 sur 2

Aide sur pagination

Posté : 28 juin 2014, 13:28
par MmeRose
Bonjour,

Mes "Page Suivante" sont vides.
Comment y remédier ? SVP. Est-ce que vous voyez ce qui cloche ?

Voici une partie de mon code (lol parce qu'il fait 1000 lignes):

Merci !
<?php
							 /************************ PAGINATION *****************************************************/
	    if (isset($_GET['afficher_x_resultats']) && !empty($_GET['afficher_x_resultats']))
	       {$nb_results_a_afficher =mysql_real_escape_string($_GET['afficher_x_resultats']);
            
		$cool = "SELECT COUNT(DISTINCT ventes_id) as nb_correspondances FROM marimmo_ventes v
                  WHERE v.type_de_bien='".$type_de_bien."' AND v.nb_pieces IN (".implode(',',$rooms).") AND v.surface_hab >= 
			     '".$surface_min."' AND v.surface_hab <='".$surface_max."' AND v.ville_id IN (".implode(',',$town).") AND 
			     v.prix_fai >='".$prix_min."' AND v.prix_fai <='".$prix_max."'     
			    ";
	   $cool_rep=mysql_query($cool) or die (mysql_error());
	   $info =mysql_fetch_assoc($cool_rep);		 
       $nb_correspondances= $info['nb_correspondances'];
	?>  <div id="nb_de_resultats"> <?php if(isset($nb_correspondances)) echo $nb_correspondances; ?> résultats correspondent à votre recherche  </div> <?php	
	
	 
		if( $nb_results_a_afficher=10)
		  { $per_page = 10;
			$nb_pages = ceil($nb_correspondances/$per_page);  
			
				if (isset($_GET['page']) && $_GET['page'] > 0 && $_GET['page'] <= $nb_pages)
				   { $current_page = $_GET['page'];
				   }
			else   { $current_page = 1; 
				   }
		 }	
	else if  ( $nb_results_a_afficher == 25)
			 {	$per_page = 25;
				$nb_pages = ceil($nb_correspondances/$per_page);
					if (isset($_GET['page']) && $_GET['page'] > 0 && $_GET['page'] <= $nb_pages)
					   { $current_page = $_GET['page'];   }
				else   { $current_page = 1;   }
			 }	
	else if  ( $nb_results_a_afficher == 50)
			 {	$per_page = 50;
				$nb_pages = ceil($nb_correspondances/$per_page);
					if (isset($_GET['page']) && $_GET['page'] > 0 && $_GET['page'] <= $nb_pages)
					   { $current_page = $_GET['page'];   }
				else   { $current_page = 1;   }
			 }	
	else if  ( $nb_results_a_afficher == 100)
			 {	$per_page = 100;
				$nb_pages = ceil($nb_correspondances/$per_page);
					if (isset($_GET['page']) && $_GET['page'] > 0 && $_GET['page'] <= $nb_pages)
					   { $current_page = $_GET['page'];   }
				else   { $current_page = 1;   }
			 }	
		else { $per_page = 10;
		       $nb_pages = ceil($nb_correspondances/$per_page);
					if (isset($_GET['page']) && $_GET['page'] > 0 && $_GET['page'] <= $nb_pages)
					   { $current_page = $_GET['page'];
					   }
				else   { $current_page = 1; 
					   } 		
			}	 
								
		
	} // fin if(isset($_GET nombre de resultats a afficher
	 $nb_results_limit = (($current_page - 1)*$per_page);
				
			
							 
	/**********************fin pagination si pas d'options cochées *****************************/					

  $requete = "SELECT blalblabla FROM Blablala";
 etc

 
		/************** 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)
						  {
							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($_GET['submit_go2page']) && isset($_GET['go2page']) && !empty($_GET['go2page']) && is_numeric($_GET['go2page'])	)
							  { $go2page=htmlentities($_GET['go2page']);
								if($go2page <= $nb_pages)
								   { echo "<script type='text/javascript'>
									  document.location.replace('href='acheter.php?type_de_bien=$type_de_bien&nb_pieces=$nb_pieces&surface_hab=$surface_hab&prix=$prix&ville=$ville&descriptif=$descriptif&nb_results=$nb_results_a_afficher&page=$go2page');
									  </script>";
								   }
							  }	
								
						   if ($precedent>=1)
							  { echo " <a class='numero_page' 
							    href='href='acheter.php?type_de_bien=$type_de_bien&nb_pieces=$nb_pieces&surface_hab=$surface_hab&prix=$prix&ville=$ville&descriptif=$descriptif&nb_results=$nb_results_a_afficher&page=$precedent'>
							   Précédente </a>";
							  }
						 else {echo "<a class='no_link'>  Précédente</a>";
							  }		
							  
						   if ($suivant <= $nb_pages)
							  { echo "<a class='numero_page'
							   href='href='acheter.php?type_de_bien=$type_de_bien&nb_pieces=$nb_pieces&surface_hab=$surface_hab&prix=$prix&ville=$ville&descriptif=$descriptif&nb_results=$nb_results_a_afficher&page=$suivant'> 
							  Suivante </a>";
							  }
						 else {echo "<a class='no_link'> Suivante</a>";
							  }	
						}	echo "  </div>";



Re: Aide sur pagination

Posté : 28 juin 2014, 18:32
par Elie
Je sais pas si ca marche mieux mais voila ton code en version propre ...
<?php
               
			   
			   
	$nb_results_a_afficher = !empty($_GET['afficher_x_resultats']) ? mysql_real_escape_string($_GET['afficher_x_resultats']) : 10;
	
	$cool = "SELECT COUNT(DISTINCT ventes_id) as nb_correspondances FROM marimmo_ventes v WHERE v.type_de_bien='".$type_de_bien."' AND v.nb_pieces IN (".implode(',',$rooms).") AND v.surface_hab >= '".$surface_min."' AND v.surface_hab <='".$surface_max."' AND v.ville_id IN (".implode(',',$town).") AND v.prix_fai >='".$prix_min."' AND v.prix_fai <='".$prix_max."'    ";
	$cool_rep = mysql_query($cool) or die (mysql_error());
	$info = mysql_fetch_assoc($cool_rep);          
	$nb_correspondances = !empty($info['nb_correspondances']) ? $info['nb_correspondances'] : 0;
	   
    echo '<div id="nb_de_resultats">'.$nb_correspondances.' résultats correspondent à votre recherche</div>'."\n";
       

		$per_page = $nb_results_a_afficher;
		$nb_pages = ceil($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;
                               
                       
                                                         
        /**********************fin pagination si pas d'options cochées *****************************/                                 

  $requete = "SELECT blalblabla FROM Blablala";
 
  /************** 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) {
		
		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($_GET['submit_go2page']) && isset($_GET['go2page']) && !empty($_GET['go2page']) && is_numeric($_GET['go2page'])) { 
		
		$go2page = htmlentities($_GET['go2page']);
		
		if($go2page <= $nb_pages) { 
			echo "<script type='text/javascript'>
document.location.replace('href='acheter.php?type_de_bien=$type_de_bien&nb_pieces=$nb_pieces&surface_hab=$surface_hab&prix=$prix&ville=$ville&descriptif=$descriptif&nb_results=$nb_results_a_afficher&page=$go2page');
	</script>";
		}
	}    
	
	echo ($precedent >= 1) ? "<a class='numero_page' href='href='acheter.php?type_de_bien=$type_de_bien&nb_pieces=$nb_pieces&surface_hab=$surface_hab&prix=$prix&ville=$ville&descriptif=$descriptif&nb_results=$nb_results_a_afficher&page=$precedent'>Précédente </a>" : "<a class='no_link'> Précédente</a>";        
	
	echo ($suivant <= $nb_pages) ? "<a class='numero_page' href='href='acheter.php?type_de_bien=$type_de_bien&nb_pieces=$nb_pieces&surface_hab=$surface_hab&prix=$prix&ville=$ville&descriptif=$descriptif&nb_results=$nb_results_a_afficher&page=$suivant'>Suivante </a>" : "<a class='no_link'>Suivante</a>";
	
	}
	
	echo "</div>";


 

Re: Aide sur pagination

Posté : 29 juin 2014, 11:49
par MmeRose
Ok je check tes modifications. Merci :)
Est-ce que mon code était mal présenté? j'ai cru en premier lieu que tu me disais que mon code était trop mal présenté pour qu'on veuille bien y répondre.

Re: Aide sur pagination

Posté : 29 juin 2014, 15:08
par MmeRose
Merci beaucoup Elie pour ta réécriture sous forme de ternaires. Ya pas photo sur le temps gagné : j'en prends bonne note. C'est super de me montrer comment optimiser mon code & mon temps :) Merci !

Alors en ce qui concerne la pagination, je reste sur le même problème.
Je pense que ça vient de mes select multiples (mais uniquement de là? pas sûr!). J'ai essayé de mettre les options sélectionnées en session pour ne pas passer d'array dans l'url pointant sur Page Suivante (car j'ai lu que c'était la meilleure des solutions), mais
je bug pour l'instant sur $_SESSION['town'] qui me renvoit array to string conversion et dont le contenu affiche Array(). Je ne suis pas encore au point au niveau des arrays.

J'écris pourtant :

 $town = array_map('mysql_real_escape_string',$town); 
 $_SESSION['town']=$town;
 echo $_SESSION['town']; // renvoit juste Array() avec l'erreur array to string conversion. Je ne sais pas comment avancer

/* pour test : */
foreach($town as $key => $value)
	    {echo  $key.' > '.$value.' ,' ;
	    } // renvoit bien le contenu du tableau
Voici le visage d'un de mes select multiples, dans lequel j'aimerais placer if isset($_SESSION['town']) {foreach pour récupérer la value égale à $ville_id}.
C'est compliqué quand on ne sait pas tout...
<?php

 $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());
	
	?>
    <label for="city"  class="tag">Ville *</label>
    <select multiple="multiple" name="ville[]" id="ville" size="5" class="select">
   
    <?php 
    $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> 
Merci pour vos idées et temps :)

Re: Aide sur pagination

Posté : 29 juin 2014, 23:00
par Elie
Si tu veux voir le contenu d'un array tu fais ca :
print_r($_SESSION['town']);
Pour le reste voici encore une fois la version simplifié :)
    <label for="city"  class="tag">Ville *</label>
    <select multiple="multiple" name="ville[]" id="ville" size="5" class="select"> 
<?php
	$town = !empty($_GET['ville']) ? $_GET['ville'] : array() ;
	$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());
    while($city = mysql_fetch_assoc($ville_req)) {
		$selected = in_array($city['ville_id'], $_GET['ville']) ? ' selected="selected"' : NULL;
		echo '<option value="'.$city['ville_id'].'"'.$selected.'>'.$city['ville_nom'].'</option>'."\n";
	} 
?>
    </select>

Re: Aide sur pagination

Posté : 30 juin 2014, 12:32
par MmeRose
Re - merci. Je n'ai pas pensé à reformuler mais plutôt à essayer de trouver comment traiter ces options selected en session, ce qui n'est pas évident quand on ne l'a jamais vu auparavent.
Pour la suite de mon site, tkt je m'attache à utiliser les ternaires, c'est sûr, j'ai bien compris l'intérêt .

Lorsque je fais ceci : je reste avec ma page suivante désespérément vide.
Mes options selected ne le sont pas sur "Page suivante", et je ne sais pas comment procéder, ni si ma façon de placer / traiter in SESSION est correcte, même si pas de warning php ni sql.

<?php

if ( !empty($_GET['rooms'])) OR !empty($_GET['ville']))
   { $rooms = array_map('mysql_real_escape_string',$rooms);
     $town = array_map('mysql_real_escape_string',$town);		
     $_SESSION['rooms']=$rooms;
     $_SESSION['town']=$town;	

  // autres vérifications [...] 

    $roomi = implode(',',$_SESSION['rooms']);
    $towni = implode(',',$_SESSION['town']);

   $req= "SELECT x FROM x WHERE ...  AND v.nb_pieces IN ($roomi ) AND v.ville_id IN ($towni)

Merci !

Re: Aide sur pagination

Posté : 30 juin 2014, 14:05
par Elie
Personne ne code pareil ...
Enfin personne ne code aussi bien que moi...

Voici comme je fais d'habitude :
<?php

   $req = "SELECT x FROM x WHERE ...  ".
   $req .= !empty($_GET['rooms']) ? " AND (v.nb_pieces = '".implode("' OR v.nb_pieces = '", array_map('mysql_real_escape_string', $_GET['rooms']))."')" : NULL;
   $req .= !empty($_GET['ville']) ? " AND (v.ville_id = '".implode("' OR v.ville_id = '", array_map('mysql_real_escape_string', $_GET['ville']))."')" : NULL;

?>

Re: Aide sur pagination

Posté : 30 juin 2014, 14:33
par MmeRose
wink ;)
Tu as l'air en effet de super bien coder ! Je ferai de mon mieux pour en prendre de la graine :)

Super formulation, mais NULL ne peut pas être, sans quoi j'ai sql syntax error.
!empty($_GET['rooms']) ? array_map('mysql_real_escape_string', $_GET['rooms'])) : $e_rooms; // $e_rooms ="veuillez indiquer le nb de pièces !";
Bon mais ça c'est un détail.


On m'a expliqué qu'il fallait mettre ma série d'options selected dans un array autre $_POST['ville']; pour pouvoir après submit du form, garder mes options selected. T'as l'air de me dire que non, donc euh.. ok, je veux bien adhérer, mais je ne comprends plus rien.

Supposons que je garde ma formulation (qui fonctionne pour afficher les résultats, enfin juste sur page 1 )
<?php

if ( !empty($_GET['rooms'])) OR !empty($_GET['ville']))
   { $rooms = array_map('mysql_real_escape_string',$rooms);
     $town = array_map('mysql_real_escape_string',$town);               
     $_SESSION['rooms']=$rooms;
     $_SESSION['town']=$town;   

  // autres vérifications [...] 

    $roomi = implode(',',$_SESSION['rooms']);
    $towni = implode(',',$_SESSION['town']);

   $req= "SELECT x FROM x WHERE ...  AND v.nb_pieces IN ($roomi ) AND v.ville_id IN ($towni)
Qu'en est-il de $_SESSION['$town'] = $town; ?
Je n'arrive pas à obtenir la suite des résultats sur page 2. J'ai lu qu'il fallait mettre en session les options selected d'un select multiple, ce que je m'évertue à essayer de réaliser, sans obtenir le résultat tant attendu.

Any cool idea ?

Re: Aide sur pagination

Posté : 30 juin 2014, 14:42
par Elie
Voila comme je gere la pagination.

Je met un form avec toutes les options visibles ou pas.
Quand je clique sur 2 ca met a jour un input hidden avec le numero de la page 2 et je valider le formulaire en AJAX ...

Donc je serais toi vu que c'est un array tu peux le serializer dans un input hidden et le recuperer apres ...
<form>
 <input type="hidden" name="villes" value="<?php echo serialize($_GET['ville']); ?>" />
 <input type="hidden" name="page" value="<?php echo $_GET['page']; ?>" />
</form>
Apres je recupere les variables avec $_REQUEST pour que ca arrive en $_GET ou en $_POST.

Tu peux voir un exemple ici : http://www.subsynchro.com/tous-les-film ... /asc/nb/2/

Le javascript est un peu complexe mais compréhensible :

[javascript] // On met à jour les listes d'informations
function updateList() {

$.ajax({
type: 'POST',
url: 'include/ajax/'+$('#action').val()+'.php',
data:$('#afficher').serialize(),
processData: true,
async: false,
error:function(msg){
alert( 'Error !: include/ajax/'+$('#action').val()+'.php?'+$('#afficher').serialize() );
},
beforeSend:function() {
$('#result').html('<div id="chargement">Merci de patienter. Chargement des informations en cours.</div>');
},
success:function(data){

$('#result').html(data);
navigation();
$("a.colorbox").colorbox({ maxWidth:'90%', maxHeight:'90%', scalePhotos: true });
$('.tipped_ajax').each(function() { Tipped.create(this, { ajax: { data: $(this).data('querystring') }, skin: 'white', hook: 'topright' }); });
$('.tooltip').tooltipster({ theme: '.tooltipster-light' });

// On cache les notes vides
$('#affichage_vignette').is(':checked') ? $('.col5:contains("-")').hide() : $('.col5:contains("-")').show();

}
});

}

// Les boutons permettant la navigation
function navigation() {


$('.navigation-precedent a, .navigation-suivant a, .navigation li a').on('click', function() {

var num = $(this).attr('rel');

$.scrollTo($('#principale'), 1000, function() {

var nb = $('#nb').val();
var length = $('.navigation li').length;
var last = 0;
$('.navigation li').each(function(i, li) {
if(i == length-2) last = $(this).children().html();
});

if(num == 'precedent') {
// Si ce n'est pas la première page
if(nb > 1) {
var target = parseInt(nb)-1;
$('#nb').val(target);
updateList();
}
} else if(num == 'suivant') {
// Si ce n'est pas la première page
if(nb < last) {
var target = parseInt(nb)+1;
$('#nb').val(target);
updateList();
}
} else {
$('#nb').val(num.substr(5));
updateList();
}

});

return false;

});

}[/javascript]

Re: Aide sur pagination

Posté : 30 juin 2014, 16:14
par MmeRose
Waaaoow ! Trop fort le mec !!! Ok, en fait tu veux m'en/nous en mettre plein les yeux ?! C'est réussi !
Merci pour l'exemple, bien concret. C'est top!
Mais franchement, ton script me donne un peu le vertige... Je suis loin d'avoir le niveau, d'autant plus que j'ai peu d'affinités pour l'instant avec ajax.

Bon, en essayant de comprendre, et de mettre en adéquation ton exemple avec mon code, je me demande (moi qui n'avais jamais vu $_REQUEST à part vitfait chez les autres) :
1. si je dois obligatoirement me servir de $_REQUEST ou pas? // jamais utilisé
2. si serialize() juste sur chacun de mes select multiples est suffisant? Tu confirmes ? // ou si je dois aussi serialize mon full form // jamais utilisé non plus!
3. Pour la pagination, à moins de sérialiser le full form, ça me parait bien obscure vs compliqué..

Merci ++ pour ton exemple, mais je pars défaitiste sur ce coup là et je pressens le burn-out. Nous n'avons pas le même niveau, malheureusement !
Je vais essayer de demander aux alentours à propos de $_SESSION['select_multiple'];

Re: Aide sur pagination

Posté : 30 juin 2014, 16:19
par Elie
$_REQUEST permet de recuperer une variable dans l'url ($_GET) ou depuis un formulaire ($_POST). Dans mon exemple je me sers des deux donc ca me sert.
Serializer permet d'avoir un tableau sous forme de chaine, tu peux donc faire index.php?vile=a:{1fdefefefe} et que ca te sorte ton tableau dans l'url par exemple.

Sinon tu peux te servir des $_SESSION mais je m'en mefierai.

Fais un systeme avec des urls contenant les valeurs ...

page='.$i.'&ville='.$_GET['ville']

C'est moche mais si ca te suffit :)

Si tu veux que je regarde ton code avec TeamViewer, viens me voir quand la france ne joue au foot !

Re: Aide sur pagination

Posté : 30 juin 2014, 17:06
par MmeRose
tu peux donc faire index.php?vile=a:{1fdefefefe}
Okay !!! Salut dit la bonne-entendeuse !
C'est moche mais si ca te suffit
Quant à l'esthétique du code, lol..!!!... L'esthétique codique se peaufinera avec l'expérience, et en relisant tes posts ;)

Bon, mon horloge biologique dit: Warning u have a saturation issue !
Je reprends tout ça après avoir rechargé mon seuil de tolérance.

Pour TeamV, ça aurait été super, mais le mien coupe (même si dernière version à jour etc) dès que wamp est ouvert, (wamp avant TeamV ou Wamp pendant TeamV) avec un message type" Merci de jouer franc-jeu !" le useless !!!

Allez, l'heure de déscotcher est arrivée. A+ et merci

Re: Aide sur pagination

Posté : 30 juin 2014, 23:17
par Elie
Hello,

Juste pour te dire que tu m'as fait découvrir IN dans une requete MySQL et c'est beaucoup plus simple que mon implode() ...
Donc on va partir là dessus.

L'idéal serait de repartir un peu de zéro et de poster ta page avec tes SELECT Multiple et ta page qui traite la recherche.

Re: Aide sur pagination

Posté : 01 juil. 2014, 20:41
par MmeRose
Hola ! Qué tal? Yo, assez bien reposée, cool ! C'était urgent de breaker.

Ravie de t'avoir appris quelquechose ! Tu peux pomper sur moi quand tu veux :mrgreen:

J'ai passé quelques heures hier soir sur le sujet en question, et 2-3h là maintenant, et je me réjouissais de clamer SUCCESS ! haut et fort, mais apparemment ce n'est pas l'heure !

Effectivement poster mon code semble une bonne idée ! car ça patauge de mon côté, rrrrrrrr....
J'ai enlevé le superflu, c'est à dire les champs simples et leurs vérifications. Bon pour l'instant ça reste du code à l'ancienne :)
Comme tu peux le voir, tout est sur la même page, et le traitement en dessous du form, c'est fait exprès. :)
<?php 
    <div id="rooms">   
	<?php 
$rooms = isset($_REQUEST['rooms']) ? $_REQUEST['rooms'] : array() ;
$selected='selected="selected"';
 	?>
    <label for="pieces"  class="tag">Pièces *</label>
    <select multiple="multiple"  name="rooms[]"  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 />
 <input type="hidden" name="rooms2" id="rooms2" value="<?php if(isset($_REQUEST['rooms'])) echo urlencode(serialize($_REQUEST['rooms'])); ?>" /> 
 
 <input type="hidden" name="rooms3" id="rooms3" />  
    </div>
    
    
    <?php  /*************** Ville *************************/

	 			
	
	
	?>
    <label for="city"  class="tag">Ville *</label>
    <select multiple="multiple" name="ville[]" id="ville" size="5" class="select">
   
    <?php 
  
	include('mysql_connect_immo.php');
	$setab =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($_REQUEST['ville']) ? $_REQUEST['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 />
    
    <input type="hidden" name="ville2" id="ville2" value="<?php if(isset($_REQUEST['ville'])) echo urlencode(serialize($_REQUEST['ville'])); ?>" />

/***************************************************************************/
 <?php
 if(isset($_REQUEST['submit_rechercher']))
  {        if ($_REQUEST['type_de_bien']=='Appartement')
		      { if  ( empty($_REQUEST['ville'])  OR empty($_REQUEST['rooms']))
		            { $e_rooms='Le champ "Pièces" est requis' ; 
					  $e_ville='Le champ "Ville" est requis' ; 
				    }
			 else {  include('mysql_connect_immo.php');
					 
					 $type_de_bien=mysql_real_escape_string($_REQUEST['type_de_bien']);

			 if( isset($_REQUEST['rooms2'])  && isset($_REQUEST['ville2'])) 
		      	 
				 $rooms2=urldecode($_REQUEST['rooms2']);
				 $rooms3=unserialize($rooms2);  
				// $rooms2=str_replace("'", '"', $rooms2);
				//  $rooms2=mysql_real_escape_string($rooms2);
				 print_r($rooms3);
				  $rooms3=array_map('mysql_real_escape_string',$rooms3); //print_r($rooms4);
				   
			 	 $rooms3 = implode(',',$rooms3);  
		
		        // //
				 
				 $ville2=urldecode($_REQUEST['ville2']); // 
				 $ville3=unserialize($ville2); 
				// $ville2=str_replace("'", '"', $ville2);
			//	  //print_r($ville2);
				 // $ville2=mysql_real_escape_string($ville2); 
			    $ville3=array_map('mysql_real_escape_string',$ville3);				 
		        $ville3= implode(',',$ville3);       //print_r($ville5);




  if (!isset($_REQUEST['options']) )
	 {
	     		  
    $nb_results_a_afficher = !empty($_REQUEST['afficher_x_resultats']) ? mysql_real_escape_string($_REQUEST['afficher_x_resultats']) : 10;
					 			
			$cool = "SELECT COUNT(ventes_id) as nb_correspondances FROM marimmo_ventes v
					  WHERE v.type_de_bien='".$type_de_bien."' AND v.nb_pieces IN (".$rooms3.") AND v.surface_hab >= 
					 '".$surface_min."' AND v.surface_hab <='".$surface_max."' AND v.ville_id IN (".$ville3.") AND 
					 v.prix_fai >='".$prix_min."' AND v.prix_fai <='".$prix_max."'     
					";
		   $cool_rep=mysql_query($cool) or die (mysql_error());
		   $info =mysql_fetch_assoc($cool_rep);		 
		   $nb_correspondances= $info['nb_correspondances'];
		   ?> 
	        <div id="nb_de_resultats"> <?php if(isset($nb_correspondances)) echo $nb_correspondances; ?> résultats correspondent à votre recherche  </div> <?php	
	
	 
	      	$per_page = $nb_results_a_afficher;
            $nb_pages = ceil($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.type_de_bien='".$type_de_bien."' AND v.nb_pieces IN ($rooms3) AND v.surface_hab >= 
										   '".$surface_min."' AND v.surface_hab <='".$surface_max."' AND v.ville_id IN ($ville3) AND 
										   v.prix_fai >='".$prix_min."' AND v.prix_fai <='".$prix_max."'   
										   ORDER BY {$critere} {$tri} 
										   LIMIT $nb_results_limit, $per_page
										     ";
										    
						  $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>";
												
											  }  // fermeture du while		
							  									  
	 
		/************** 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; 
       $rooms3= urlencode(serialize($nb_pieces));
		$ville3=urlencode(serialize($ville_id));
		
          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) 
				{	?>		                            
                       <script type='text/javascript'>
document.location.replace('acheter.php?type_de_bien=$type_de_bien&surface_min=$surface_min&surface_max=$surface_max&prix_min=$prix_min&prix_max=$prix_max&nb_results=$nb_results_a_afficher&page=$go2page');
                       </script>
        <?php   }
        }    
        
        if ($precedent >= 1) 
           {?> <a class='numero_page' href='acheter.php?type_de_bien=$type_de_bien&surface_min=$surface_min&surface_max=$surface_max&prix_min=$prix_min&prix_max=$prix_max&nb_results=$nb_results_a_afficher&page=$precedent'>Précédente </a>
    <?php  }
      else {?> <a class='no_link'> Précédente</a>         
      <?php } 
	  
	  
        if ($suivant <= $nb_pages)
		   {?> <a class='numero_page' href='acheter.php?type_de_bien=$type_de_bien&surface_min=$surface_min&surface_max=$surface_max&prix_min=$prix_min&prix_max=$prix_max&rooms2=$rooms3&ville3=$ville2&nb_results=$nb_results_a_afficher&page=$suivant'>Suivante </a>
	<?php  } 
      else {?> <a class='no_link'>Suivante</a>
    <?php  }
        
        echo "</div>";

		} 
						
		  
							} /// fin de else (if $rows != 0) 	
									
					
	} // fin de if( !isset($_REQUEST['options']) 
   if (isset($_REQUEST['options']) AND count($_REQUEST['options']) > 0 )   // Même code que ci-dessus, mais avec options en plus.

Thank u

Re: Aide sur pagination

Posté : 01 juil. 2014, 23:21
par Elie
J'ai essayé de regarder mais honnetement il manque des trucs ...

Les for des labels ne renvoyaient pas vers l'iD du select.
Tu parles de submit_rechercher mais je le vois nul part.
Pas besoin de rappeller 2 fois l'include de connexion
Les variables $surface_max et $surface_min je les vois pas mais ca doit être tes inputs que tu as viré.
Je mettrai les input avec le array serializé dans go2page_form.
Bref faut revoir un peu toute la logique ...

Bref, j'ai simplifié le code mais c'est toujours compliqué de comprendre ou ca cloque sans pouvoir tester le code en local.
<?php

	include('mysql_connect_immo.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; // Tu défini cette variable apres c'est n'imp

 if(!empty($_REQUEST['submit_rechercher'])) {
	 if($_REQUEST['type_de_bien']=='Appartement') { 
	 	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.type_de_bien='".$type_de_bien."' AND v.nb_pieces IN (".$rooms3.") AND v.surface_hab >= '".$surface_min."' AND v.surface_hab <='".$surface_max."' AND v.ville_id IN (".$ville3.") AND v.prix_fai >='".$prix_min."' AND v.prix_fai <='".$prix_max."'";
			   $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.type_de_bien='".mysql_real_escape_string($_REQUEST['type_de_bien'])."' AND v.nb_pieces IN ($rooms3) AND v.surface_hab >= '".$surface_min."' AND v.surface_hab <='".$surface_max."' AND v.ville_id IN (".$ville3.") AND v.prix_fai >='".$prix_min."' AND v.prix_fai <='".$prix_max."' ORDER BY ".$critere." ".$tri." LIMIT ".$nb_results_limit.", ".$per_page;
			$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;
		$rooms3 = urlencode(serialize($nb_pieces));
		$ville3 = urlencode(serialize($ville_id));
               
          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?type_de_bien='.$type_de_bien.'&surface_min='.$surface_min.'&surface_max='.$surface_max.'&prix_min='.$prix_min.'&prix_max='.$prix_max.'&nb_results='.$nb_results_a_afficher.'&page='.$go2page.'");
</script>'."\n";
					}
        	}    
       
			echo ($precedent >= 1) ? '<a class="numero_page" href="acheter.php?type_de_bien='.$type_de_bien.'&surface_min='.$surface_min.'&surface_max='.$surface_max.'&prix_min='.$prix_min.'&prix_max='.$prix_max.'&nb_results='.$nb_results_a_afficher.'&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?type_de_bien='.$type_de_bien.'&surface_min='.$surface_min.'&surface_max='.$surface_max.'&prix_min='.$prix_min.'&prix_max='.$prix_max.'&rooms2='.$rooms3.'&ville3='.$ville2.'&nb_results='.$nb_results_a_afficher.'&page='.$suivant.'">Suivante</a>' : '<a class="no_link">Suivante</a>';
        
        echo "</div>";

                }
			}
			}
		}
	 }
 }