par
yoann38 » 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>
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.
[b]Coté requete:[/b]
[PHP]
// 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);
[/PHP]
Coté formulaire
[PHP]
<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>
[/PHP]