Page 1 sur 1

passer des session de page en page

Posté : 21 sept. 2019, 14:49
par yoann38
Salut tout le monde.
Voilà j'ai une requete permettant de recuperer mes résultats qui marche nikel, pagination filtre distance aussi.
Seul problème mes chekboxes.
Si page par defaukt soit la page 1 donc pas de soucis, par contre arrivé en page 2 je perds les valeurs de SESSION....
 // terrasse
	if (!empty($_POST['terrasse'])) {
        $_SESSION['terrasse'] = $_POST['terrasse'];
        $Sterrasse = $_SESSION['terrasse'];
    }

     if (empty($_POST['terrasse'])) {
        unset($_SESSION['terrasse']);
    }
   

 // wifi
	if (!empty($_POST['wifi'])) {
        $_SESSION['wifi'] = $_POST['wifi'];
        $Swifi = $_SESSION['wifi'];
    }

     if (empty($_POST['wifi'])) {
        unset($_SESSION['wifi']);
    }

// Bref pareil pour les 6 chekboxes....
  
Coté requete je met que la clause avec AND et vous épargne le reste ;)
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';
    }

Coté formulaire:
<form method="post" action="bar-<?php echo simplification($ville);?>.html">
<ul>
<li><label><input type="checkbox" name="terrasse" class="checkbox" <?php if (!empty($Sterrasse)) { echo 'checked="checked"';}?>></label>Terrasse</li>
<li><label><input type="checkbox" name="wifi" class="checkbox" <?=(isset($_POST['wifi'])?' checked':'')?>/></label>Wifi</li>
</ul>
<button class="button-filter" type="submit">Filtrer</button>
</form>

Re: passer des session de page en page

Posté : 21 sept. 2019, 15:16
par or 1
c'est avec la session qu'il faut travailler, donc la requête doit être fabriquée à partir de la session. la session ne doit être remise à zéro que lorsqu'on soumet le formulaire, pas lors du passage à une autre page.

Re: passer des session de page en page

Posté : 21 sept. 2019, 15:20
par yoann38
Alors je pensé à créer une succesion de elseif selon les chexboxes rempli mais vu le code actuel cela me parait indigeste.
Voici mon code actuel, j'ai mis par exemple un if sur le critère distance
	// Traitement de la pagination
	$page = (!empty($_GET['page']) ? (int)$_GET['page'] : 1);
	$limite = 5; // Nombre d'élément à afficha dans la page
	$debut = ($page - 1) * $limite;
	
	// 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'];



	// Distance
	if (!empty($_POST['distance'])) {
        $_SESSION['rayon'] = $_POST['distance'];
        $rayon = $_SESSION['rayon'];
    }

     if (isset($_POST['distance'])) {
        $_SESSION['rayon'] = $_POST['distance'];
    }
    $rayon = $_SESSION['rayon'] ?? NULL;


	if (!empty($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' ) " ;
	}



	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($_POST);
	//var_dump($_SESSION);
	// Calcul de la pagination
	$resultFoundRows = $bdd->query('SELECT found_rows()');
	$nombredElementsTotal = $resultFoundRows->fetchColumn();
	$nombreDePages = ceil($nombredElementsTotal / $limite);
	
	}else{
	// Si on accéde à la page sans une ville de renseignée
	header('Location: 127.0.0.1/new');
	exit;
}