regenrates pages

This commit is contained in:
2026-08-09 07:01:23 +02:00
parent b553f7e9e9
commit 8e68820ba1
13 changed files with 3183 additions and 3058 deletions
+68 -29
View File
@@ -1,36 +1,75 @@
<?php
// Connessione al database
include('Connections/bkngstm.php');
$conn = new mysqli($servername, $username, $password, $dbname);
// 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();
if ($conn->connect_error) {
die("Connessione al database fallita: " . $conn->connect_error);
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;
}
// Estrai il termine di ricerca dall'input dell'utente
$searchTerm = $_POST['searchTerm'];
// Esegui la query per cercare nella tabella auth_users
$sql = "SELECT id, email, first_name, last_name FROM auth_users WHERE last_name LIKE '%$searchTerm%'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
$resultsArray = array();
while ($row = $result->fetch_assoc()) {
$resultsArray[] = array(
'id' => $row['id'],
'email' => $row['email'],
'first_name' => $row['first_name'],
'last_name' => $row['last_name']
);
/**
* 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();
}
// Imposta l'header "Content-Type" su "application/json"
header('Content-Type: application/json');
// Restituisci i risultati in formato JSON
echo json_encode(array('results' => $resultsArray));
} else {
// Nessun risultato trovato
echo json_encode(array('results' => array()));
header('Content-Type: application/json; charset=utf-8');
echo json_encode($payload, JSON_UNESCAPED_UNICODE);
exit;
}
$conn->close();
// 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.']);
}