Thesaurus/ajax/searchTreeData.php
2026-02-23 16:11:35 +01:00

76 lines
2.0 KiB
PHP

<?php
/**
* searchTreeData.php - Sucht in der Treeview-Tabelle
*
* Parameter:
* - q: Suchbegriff (führendes * = Linkstrunkierung, abschließendes * = Rechtstrunkierung)
* Ohne * → automatische Rechtstrunkierung (bisheriges Verhalten)
*
* Rückgabe: JSON-Array mit gefundenen Einträgen
*/
header('Content-Type: application/json; charset=utf-8');
include "db_connection.php";
$conn = mysqli_connect(HOST, USER, PASSWORD, DATABASE);
if (mysqli_connect_errno()) {
echo json_encode([]);
exit();
}
mysqli_set_charset($conn, "utf8");
$searchTerm = isset($_GET['q']) ? trim($_GET['q']) : '';
if (strlen($searchTerm) < 2) {
echo json_encode([]);
exit();
}
// Trunkierung auswerten
$leftTrunc = (substr($searchTerm, 0, 1) === '*');
$rightTrunc = (substr($searchTerm, -1) === '*');
// Sternchen entfernen, dann escapen
$clean = trim($searchTerm, '*');
if (strlen($clean) < 2) {
echo json_encode([]);
exit();
}
$escaped = mysqli_real_escape_string($conn, $clean);
// LIKE-Sonderzeichen in den Daten escapen
$escaped = str_replace(['%', '_'], ['\\%', '\\_'], $escaped);
// Pattern bauen:
// *Begriff → %Begriff% (links- und rechtstrunkiert)
// Begriff* → Begriff% (nur rechtstrunkiert)
// *Begriff* → %Begriff% (beidseitig)
// Begriff → Begriff% (Standard: Rechtstrunkierung)
$pattern = ($leftTrunc ? '%' : '') .
$escaped .
($rightTrunc ? '%' : '%'); // rechts immer trunkieren = bisheriges Verhalten
$sql = "SELECT id, name, text, parent_id
FROM Treeview
WHERE LOWER(text) LIKE LOWER('$pattern') OR LOWER(name) LIKE LOWER('$pattern')
ORDER BY text
LIMIT 50";
$res = mysqli_query($conn, $sql);
if (!$res) {
echo json_encode([]);
exit();
}
$result = [];
while ($row = mysqli_fetch_assoc($res)) {
$result[] = [
'id' => strval($row['id']),
'text' => $row['text'] ? $row['text'] : $row['name'],
'parent_id' => $row['parent_id']
];
}
mysqli_close($conn);
echo json_encode($result, JSON_UNESCAPED_UNICODE);
?>