Pagination et variable de session

Mammouth du PHP | 620 Messages

13 sept. 2019, 15:10

Salut tout le monde,
Voilà j'ai un problème sur ma requete avec mon formulaire sur la partie <select>
Ce select à pout but de donnée les villes proches selon la ville renseignée via des valeurs kilométrique.
Ca marche nikel sur ma page 1 ( par par defaut) dés que je vais en page 2 ou autre ca plante le OR de ma requete ne marche pas.

Coté requete:
// Requetes Pincipale
	$sql = 'SELECT SQL_CALC_FOUND_ROWS id, nom_etablissement, photo_etablissement, presentation, categorie, parking, wifi, restauration, terrasse, id_departement, ville, code_postal, COUNT(avis.id_bar) AS nb_vote, CEIL(AVG(note)) AS moyenne_note FROM bars LEFT  JOIN avis ON bars.id = avis.id_bar WHERE ville = :ville';   

	// Récupération des données selon la ville de renseignée
	$pos_ville = $bdd->prepare("SELECT lattitude, longitude  FROM villes_de_france WHERE Nom_commune = '$ville'");
	$pos_ville->execute();
	$row = $pos_ville->fetch(PDO::FETCH_ASSOC);						
	$latitude=$row['lattitude'];
	$longitude=$row['longitude'];
	
	// Si on applique une distance de filtre
	if (!empty($_POST['distance'])) {
		$rayon = $_POST['distance'];
		$_SESSION['rayon'] = $rayon;
	}

	if (!empty($_SESSION['rayon'])) { // Ducoup si une SESSION de rayon est reneignée
	// Formule pour trouver les villes proche de la ville principale
	$formule="(6366*acos(cos(radians($latitude))*cos(radians(`lattitude`))*cos(radians(`longitude`) -radians($longitude))+sin(radians($latitude))*sin(radians(`lattitude`))))";	
	$proxi_ville="SELECT DISTINCT Nom_commune,$formule AS dist FROM villes_de_france WHERE $formule<='$rayon' ORDER by dist ASC";
	$proxi_ville = $bdd->prepare($proxi_ville);
	$proxi_ville->execute();

	// On ajoute les villes selon la zone kilomètrique
	$sql .= " OR ville IN ( SELECT DISTINCT Nom_commune FROM villes_de_france WHERE $formule<='$rayon' ) " ;
	}
	
	// Critères Checkboxs
	if (isset($_POST['terrasse'])) {
        $sql .= ' AND terrasse = 1';
    } if (isset($_POST['parking'])) {
        $sql .= ' AND parking = 1';
    } if (isset($_POST['wifi'])) {
        $sql .= ' AND wifi = 1';
    } if (isset($_POST['restauration'])) {
        $sql .= ' AND restauration = 1';
    } if (isset($_POST['tv'])) {
        $sql .= ' AND tv = 1';
    } if (isset($_POST['animaux_accept'])) {
        $sql .= ' AND animaux_accept = 1';
    } if (isset($_POST['acces_handicap'])) {
        $sql .= ' AND acces_handicap = 1';
    }

	$sql .= " GROUP BY nom_etablissement " ;
	$sql .= ' LIMIT :limite OFFSET :debut'; // Limitation à l'affichage des données
    $sql = $bdd->prepare($sql);
    $sql->bindParam(':ville', $ville, PDO::PARAM_STR);
    $sql->bindValue('debut', $debut, PDO::PARAM_INT);
    $sql->bindValue('limite', $limite, PDO::PARAM_INT);
    $sql->execute();
	var_dump($sql);
	var_dump($_GET);
	var_dump($_SESSION);

Coté formulaire
<form method="post" action="bar-<?php echo simplification($ville);?>.html">
									<select class="form-control" name="distance">
									<option value="0"><?php echo $ville;?> uniquement</option>
							        <option value="5" <?php if (isset($_POST['distance']) && ($rayon == 5)) { echo 'selected="selected"';}?>> 5 km</option>
							        <option value="10" <?php if (!empty($rayon) && ($rayon == 10)) { echo 'selected="selected"';}?>> 10 km</option>
							        <option value="20" <?php if (!empty($rayon) && ($rayon == 20)) { echo 'selected="selected"';}?>> 20 km</option>
								</select>
								

							
								<button class="button-filter" type="submit">Filtrer</button>
								</form>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 8250 Messages

15 sept. 2019, 11:56

Bonjour,

Normalement c'est exactement la même requête avec juste l'offset qui doit changer, donc fait un echo de tes 2 requêtes et vérifient qu'elles fonctionnent dans PHPmyadmin.
Quand tout le reste a échoué, lisez le mode d'emploi...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 8250 Messages

15 sept. 2019, 11:56

Hopopop, il manquerait pas des deux-points là :
    $sql->bindParam(':ville', $ville, PDO::PARAM_STR);
    $sql->bindValue('debut', $debut, PDO::PARAM_INT);
    $sql->bindValue('limite', $limite, PDO::PARAM_INT);
Quand tout le reste a échoué, lisez le mode d'emploi...