Leitgedanken/lieder/livesearch_lieder.php
2022-11-21 09:47:28 +01:00

149 lines
5.2 KiB
PHP

<?php
header("Content-Type: text/html;charset=utf-8");
require_once("../config.inc.php");
$db = dbconnect();
if (isset($_GET['getWord']) && isset($_GET['letters'])) {
$sql_gesamt == '';
# Einige Textzeichen wurden aus den Suchspalten entfernt, daher müssen sie auch aus suchanfragen entfernt werden
$bereinigung = array(
",",
".",
"!",
"?",
";",
"|",
"'",
"<",
">"
);
$letters = str_replace($bereinigung, "", $_GET['letters']);
$letters = addslashes($letters)." ";
$result_usr = $db->query("SELECT lied_search, lied_bestand, lied_favorit, lied_status
FROM profil
WHERE user = '$user_admin'");
$row_usr = $result_usr->fetch_array();
if ($row_usr['lied_search'] == 'regexp') {
$trenner = 'REGEXP ';
$start = '[[:<:]]';
$ende = '[[:>:]]';
} else {
$trenner = 'LIKE ';
$start = '%';
$ende = '%';
}
$inhalt = preg_replace('/\s{2,}/sm', ' ', $letters, PREG_SET_ORDER); //Mehr als zwei leerzeichen entfernen
$sql1 = "SELECT art, nr, zusatz, titel, text, kategorie, unterkategorie
FROM lieder_synopse
WHERE ";
preg_match_all("/(\-{0,1}\+{0,1}\*{0,1}%{0,1}\"([^\"]+)\"\*{0,1}%{0,1}\+{0,1}\-{0,1}|\-{0,1}\+{0,1}\*{0,1}%{0,1}(\w+)\*{0,1}%{0,1}\+{0,1}\-{0,1})/u", $inhalt, $Worte);
#echo "<pre>";
#print_r($Worte[0]);
#echo "</pre>";
if ($inhalt != "") {
# $sql .= " (";
for ($i = 0; $i < count($Worte[0]); $i++) {
$suchwort = str_replace(array(
"+",
"-",
"\"",
"\\"
), array(
"",
"",
"",
""
), $Worte[0][$i]);
if ($i == 0) {
$oper = "";
} else {
$oper = "AND";
}
# Uppercase
$suchwort = mb_strtoupper($suchwort);
# if (strpos($Worte[0][$i], "+") === 0) {
# $sql .= "(UPPER(text_suche) $trenner '$start" . $suchwort . "$ende'";
# } elseif (strpos($Worte[0][$i], "-") === 0) {
# $sql .= "$oper UPPER(inhalt1) NOT $trenner '$start" . $suchwort . "$ende' ";
# } elseif ($Worte[0][$i] == "") {
# NULL;
# } else {
## die Felder _suche sind als utf8_bin definiert: Die collation unterscheidet Umlaute
## Sonst würde bei ü auch u gescuht werden: Müller würde auch Muller finden. Bei ut8_bin wird unterschieden
$sql .= "$oper (UPPER(text_suche) $trenner '$start" . $suchwort . "$ende'
OR upper(titel_suche) $trenner '$start" . $suchwort . "$ende'
OR nr = '" . $suchwort . "') ";
# }
}
}
# Liedbestand: ALL / CB / GB ergänzen. Bei ALL braucht es keine Ergänzung der where-Bedingung
if($row_usr['lied_bestand'] != 'ALL'){
$sql3 = "AND art='$row_usr[lied_bestand]' ";
}
# In Favoriten suchen
if($row_usr['lied_favorit'] == '1'){
$sql4 = "AND concat(art,nr,CASE WHEN zusatz IS NULL THEN '' ELSE zusatz END) IN (SELECT concat(art,nr,CASE WHEN zusatz IS NULL THEN '' ELSE zusatz END) FROM lieder_favorit WHERE vaid=$user_vaid)";
}
# In Status suche
# K A P U: Status K: Keine Einschränkung, braucht hier nicht berücksichtigt werden.
if($row_usr['lied_status'] == 'A'){
# Aufführbare Lieder
$sql5 = "AND concat(art,nr,CASE WHEN zusatz IS NULL THEN '' ELSE zusatz END) IN (SELECT concat(art,nr,CASE WHEN zusatz IS NULL THEN '' ELSE zusatz END) FROM lieder_status WHERE vaid=$user_vaid AND status='A')";
}elseif($row_usr['lied_status'] == 'P'){
#Probe/Übphase
$sql5 = "AND concat(art,nr,CASE WHEN zusatz IS NULL THEN '' ELSE zusatz END) IN (SELECT concat(art,nr,CASE WHEN zusatz IS NULL THEN '' ELSE zusatz END) FROM lieder_status WHERE vaid=$user_vaid AND status='U')";
}elseif($row_usr['lied_status'] == 'U'){
# Alle außer status A und U
$sql5 = "AND concat(art,nr,CASE WHEN zusatz IS NULL THEN '' ELSE zusatz END) NOT IN (SELECT concat(art,nr,CASE WHEN zusatz IS NULL THEN '' ELSE zusatz END) FROM lieder_status WHERE vaid=$user_vaid)";
}
$sql_gesamt = $sql1 . $sql . $sql3 . $sql4 . $sql5 ." ORDER BY nr, art, titel";
#echo $sql_gesamt."<br>";
#$handle = fopen ("sql.txt", w);
#fwrite ($handle, $sql_gesamt);
#fclose ($handle);
/*
SELECT art, nr, zusatz, titel, text, kategorie, unterkategorie
FROM `lieder_synopse`
WHERE ( UPPER(text_suche) REGEXP '[[:<:]]ACH[[:>:]]' OR upper(titel_suche) REGEXP '[[:<:]]ACH[[:>:]]' OR nr = 'ARMEN' )
AND ( UPPER(text_suche) REGEXP '[[:<:]]ARMEN[[:>:]]' OR upper(titel_suche) REGEXP '[[:<:]]ARMEN[[:>:]]' OR nr = 'ARMEN' )
ORDER BY art, nr, titel
*/
#$letters = preg_replace("/[^a-z0-9 ]/si","",$letters);
$res = $db->query($sql_gesamt) or die(mysql_error());
#echo "1###select ID,textstelle Name from ajax_countries where textstelleName like '".$letters."%'|";
# Vor Zusatz muss ein Leerzeichen kommen, damit man den mit explode bei der liedanzeige trennen kann
while ($inf = $res->fetch_array()) {
#$name= "$inf[art] $inf[nr] $inf[zusatz] - $inf[titel] <br>($inf[kategorie] -> $inf[unterkategorie])";
$name = "$inf[art] $inf[nr] $inf[zusatz] - $inf[titel]";
echo $name . "|";
}
}
?>