76 lines
2.0 KiB
PHP
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);
|
|
?>
|