Files
yogibook_aury_new/public/searchemail.php
T
2026-08-09 07:01:23 +02:00

76 lines
2.1 KiB
PHP

<?php
// Bufferizziamo da subito: qualsiasi output emesso dagli include
// (headscript.php stampa dell'HTML, es. "<!-- query languages -->")
// verrà scartato, così la risposta resta JSON puro.
ob_start();
require_once('include/headscript.php');
/**
* Ricerca utenti per nome e/o cognome.
* Riceve firstName e lastName (POST) come campi separati e cerca in OR:
* trova risultati anche digitando solo uno dei due. Risponde in JSON.
*/
$pdo = DBHandlerSelect::getInstance()->getConnection();
$firstName = trim($_POST['firstName'] ?? '');
$lastName = trim($_POST['lastName'] ?? '');
// Compatibilità col vecchio parametro unico "searchTerm"
if ($firstName === '' && $lastName === '' && isset($_POST['searchTerm'])) {
$parts = preg_split('/\s+/', trim($_POST['searchTerm']));
$firstName = $parts[0] ?? '';
$lastName = $parts[1] ?? $firstName;
}
/**
* Emette JSON pulito: scarta tutto l'output bufferizzato prima,
* imposta l'header e termina.
*/
function jsonOut(array $payload): void
{
if (ob_get_length() !== false) {
ob_end_clean();
}
header('Content-Type: application/json; charset=utf-8');
echo json_encode($payload, JSON_UNESCAPED_UNICODE);
exit;
}
// Serve almeno 2 caratteri in uno dei due campi
if (mb_strlen($firstName) < 2 && mb_strlen($lastName) < 2) {
jsonOut(['results' => []]);
}
try {
$conditions = [];
$params = [];
if (mb_strlen($firstName) >= 2) {
$conditions[] = "first_name LIKE :fn";
$params[':fn'] = '%' . $firstName . '%';
}
if (mb_strlen($lastName) >= 2) {
$conditions[] = "last_name LIKE :ln";
$params[':ln'] = '%' . $lastName . '%';
}
$where = implode(' OR ', $conditions);
$sql = "SELECT id, first_name, last_name, email
FROM auth_users
WHERE $where
ORDER BY last_name, first_name
LIMIT 15";
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
$rows = $stmt->fetchAll();
jsonOut(['results' => $rows]);
} catch (Throwable $ex) {
error_log('searchemail error: ' . $ex->getMessage());
jsonOut(['error' => 'Errore durante la ricerca.']);
}