par
yoann38 » 21 sept. 2019, 15:20
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;
}
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
[PHP]
// 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;
}
[/PHP]