149 lines
5.2 KiB
PHP
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 . "|";
|
|
}
|
|
}
|
|
?>
|