''"; if ($q !== '') { $cands = city_query_candidates($q); $cands[] = mb_strtolower($q, 'UTF-8'); $cands = array_values(array_unique($cands)); $ors = []; foreach ($cands as $i => $cand) { $ors[] = "LOWER(ville) LIKE :q$i"; $params[":q$i"] = $cand . '%'; } if ($ors) { $sql .= " AND (" . implode(' OR ', $ors) . ")"; } } $sql .= " ORDER BY val ASC LIMIT 15"; } else { $sql = "SELECT DISTINCT val FROM ( SELECT specialite AS val FROM praticien WHERE specialite IS NOT NULL AND specialite <> '' UNION ALL SELECT CONCAT(prenom, ' ', nom) AS val FROM praticien WHERE prenom IS NOT NULL AND prenom <> '' AND nom IS NOT NULL AND nom <> '' UNION ALL SELECT prenom AS val FROM praticien WHERE prenom IS NOT NULL AND prenom <> '' UNION ALL SELECT nom AS val FROM praticien WHERE nom IS NOT NULL AND nom <> '' ) t WHERE 1"; if ($q !== '') { $sql .= " AND LOWER(val) LIKE :q"; $params[':q'] = mb_strtolower($q, 'UTF-8') . '%'; } $sql .= " ORDER BY (LOWER(val) LIKE :qprefix) DESC, val ASC LIMIT 15"; $params[':qprefix'] = ($q !== '') ? (mb_strtolower($q, 'UTF-8') . '%') : ''; } $stmt = $pdo->prepare($sql); $stmt->execute($params); echo json_encode($stmt->fetchAll(PDO::FETCH_COLUMN)); exit; } /* ========================= Helpers ========================= */ function h($v): string {return htmlspecialchars((string) $v, ENT_QUOTES, 'UTF-8');} $reqUri = h($_SERVER['REQUEST_URI'] ?? '/'); ?>