76 lines
2.1 KiB
PHP
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.']);
|
|
}
|