// précisons au navigateur que ce script retourne du JSON
header('Content-Type: application/json; charset=utf-8');
// chargeons le script de connexion mutualisé avec les autres traitements PHP
// https://www.puce-et-media.com/parcours-dapprentissage-web-part-vi-php-structurer-et-traiter-cote-serveur/
require_once 'php/__connect__.php';
// récupérons les paramètres transmis par le formulaire
$event_lat = $_POST['event_lat'] ?? '';
$event_lon = $_POST['event_lon'] ?? '';
$event_rayon = $_POST['event_rayon'] ?? '';
// l'identifiant de la commune est conservé pour les évolutions futures
// mais n'est pas encore utilisé dans cette version de la requête
$event_cp_id = $_POST['event_cp_id'] ?? '';
// nous avons déjà étudié les principaux mécanismes de cette requête
// rappelons simplement que la jointure entre tab_personnas et tab_cp
// permet de retrouver les coordonnées GPS associées à chaque utilisateur
// la jointure avec tab_options complète les résultats avec la civilité
// enfin ORDER BY classe les utilisateurs par distance croissante
$sql = '
SELECT
CIVILITE.ch_opts_label AS USER_CIVILITE,
USERS.ch_personna_name AS USER_NAME,
USERS.ch_personna_surname AS USER_SURNAME,
USERS.ch_personna_mail AS USER_MAIL,
ROUND(
(
6371 * ACOS(
COS(RADIANS(USER_CP.ch_cp_lat))
* COS(RADIANS(:event_lat))
* COS(RADIANS(:event_lon) - RADIANS(USER_CP.ch_cp_lon))
+ SIN(RADIANS(USER_CP.ch_cp_lat))
* SIN(RADIANS(:event_lat))
)
),
1
) AS DISTANCE_KMS,
USER_CP.ch_cp_label AS USER_CITY_LABEL,
USER_CP.ch_cp_code AS USER_CITY_CP
FROM `tab_personnas` AS USERS
JOIN tab_options AS CIVILITE ON USERS.ch_personna_civilite = CIVILITE.ch_opts_id
JOIN tab_cp USER_CP ON USER_CP.ch_cp_id = USERS.ch_personna_cp_id
HAVING DISTANCE_KMS < :event_rayon
ORDER BY DISTANCE_KMS ASC;';
// préparons puis exécutons la requête SQL
$stmt = $pdo->prepare($sql);
$stmt->execute([
':event_lat' => $event_lat,
':event_lon' => $event_lon,
':event_rayon' => $event_rayon
]);
// récupérons l'ensemble des utilisateurs trouvés
$users_list = $stmt->fetchAll();
// retournons les résultats au navigateur
// ainsi que quelques informations utiles au débogage
echo json_encode([
'success' => true,
'params' => $_POST,
'count' => count($users_list),
'datas' => $users_list
]);