regenrates pages
This commit is contained in:
+68
-29
@@ -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.']);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user