// 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
    ]);