") // 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.']); }