Initial commit
This commit is contained in:
377
lue_suche.php
Normal file
377
lue_suche.php
Normal file
@ -0,0 +1,377 @@
|
||||
<?php
|
||||
/*
|
||||
# Fuer debugging
|
||||
error_reporting(E_ALL);
|
||||
ini_set('display_errors', 1);
|
||||
#echo __LINE__."<br>";
|
||||
*/
|
||||
|
||||
setlocale (LC_ALL, 'de_DE@euro', 'de_DE', 'de', 'ge');
|
||||
|
||||
include_once 'classes/lg-on_Smarty.class.php';
|
||||
$smarty = new lgon_Smarty();
|
||||
require_once("config.inc.php");
|
||||
require_once("func_rollenrechte.php");
|
||||
$templatename = substr(basename($_SERVER['PHP_SELF']),0,-3)."html";
|
||||
require_once "language/german.inc.php";
|
||||
require("func_highlight.php");
|
||||
|
||||
|
||||
// Rechteüberprüfung
|
||||
$db = dbconnect();
|
||||
if ($user_admin == ""){ require("index.php"); exit;} //Wenn man nicht angemeldet ist, darf man nicht auf die Seite
|
||||
if(!rore($user_admin,'e_suche','RE')){require("lib/rechte.php");exit;}
|
||||
// Rechteüberprüfung ende
|
||||
|
||||
if(isset($_GET['action'])){
|
||||
$action = $_GET['action'];
|
||||
}else{
|
||||
$action = '';
|
||||
}
|
||||
|
||||
if($action == ''){
|
||||
$query1 = "SELECT lueaid, bezeichnung FROM lue_art WHERE bezeichnung != '' ORDER BY bezeichnung ASC";
|
||||
$result1 = $db->query($query1);
|
||||
|
||||
while ($row = $result1->fetch_array()) {
|
||||
$value[] = $row;
|
||||
}
|
||||
// Assign this array to smarty...
|
||||
$smarty->assign('table_data', $value);
|
||||
|
||||
}
|
||||
|
||||
if($action == 'suche'){
|
||||
|
||||
$thema = strtoupper($_POST['thema']);
|
||||
$einleitung = strtoupper($_POST['einleitung']);
|
||||
$inhalt = trim(strtoupper($_POST['inhalt']));
|
||||
$extrakt = strtoupper($_POST['extrakt']);
|
||||
$art = $_POST['art'];
|
||||
$lueart = $_POST['lueart'];
|
||||
|
||||
|
||||
//Select zusammenbauen
|
||||
if($art == 'exact' AND $thema != ''){ // wenn leer, darf kein regexp kommen, sonst würde er nichts finden
|
||||
$trenner1 = 'REGEXP ';
|
||||
$start1 = '[[:<:]]';
|
||||
$ende1 = '[[:>:]]';
|
||||
}else{
|
||||
$trenner1 = 'LIKE ';
|
||||
$start1 = '%';
|
||||
$ende1 = '%';
|
||||
}
|
||||
|
||||
|
||||
if($art == 'exact' AND $einleitung != ''){
|
||||
$trenner3 = 'REGEXP ';
|
||||
$start3 = '[[:<:]]';
|
||||
$ende3 = '[[:>:]]';
|
||||
}else{
|
||||
$trenner3 = 'LIKE ';
|
||||
$start3 = '%';
|
||||
$ende3 = '%';
|
||||
}
|
||||
|
||||
if($art == 'exact' AND $inhalt != ''){
|
||||
$trenner4 = 'REGEXP ';
|
||||
$start4 = '[[:<:]]';
|
||||
$ende4 = '[[:>:]]';
|
||||
}else{
|
||||
$trenner4 = 'LIKE ';
|
||||
$start4 = '%';
|
||||
$ende4 = '%';
|
||||
}
|
||||
|
||||
if($art == 'exact' AND $extrakt != ''){
|
||||
$trenner5 = 'REGEXP ';
|
||||
$start5 = '[[:<:]]';
|
||||
$ende5 = '[[:>:]]';
|
||||
}else{
|
||||
$trenner5 = 'LIKE ';
|
||||
$start5 = '%';
|
||||
$ende5 = '%';
|
||||
}
|
||||
|
||||
|
||||
|
||||
$sql1 = "SELECT count(*) as anz_treffer
|
||||
FROM lue_quelle
|
||||
WHERE lueaid like '$lueart'
|
||||
AND ";
|
||||
|
||||
######################################################################################################
|
||||
## SQL ZUSAMMENBAUEN FÜR DAS THEMA
|
||||
######################################################################################################
|
||||
|
||||
$thema = preg_replace('/\s{2,}/sm',' ',$thema,PREG_SET_ORDER); //Mehr als zwei leerzeichen entfernen
|
||||
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", $thema, $Themen);
|
||||
# Erklärung: \-{0,1} --> 0 oder 1 Minuszeichen kann string enthalten
|
||||
# \+{0,1} --> 0 oder 1 Pluszeichen kann string enthalten
|
||||
# \*{0,1} --> 0 oder 1 Asterisk kann string enthalten
|
||||
# %{0,1} --> 0 oder 1 Prozentzeichen kann string enthalten, muss nicht durch \ escaped werden
|
||||
# Vorderer Teil bis | überprüft ob "" eingegeben wurden und splittet innerhalb der "" nicht. Hinterer Teil wenn Wörter ohne "" eingegeben wurde
|
||||
|
||||
$sql ="";
|
||||
if($thema != ""){
|
||||
|
||||
$sql .= " ("; //Kein AND vor der Klammer notwendig, da direkt nach where, bei anderen muss AND davor stehen
|
||||
|
||||
for($i=0; $i < count($Themen[0]); $i++)
|
||||
{
|
||||
|
||||
#In der Überschrift kommen Umlaute vor, daher keine Ersetzung der Umlaute
|
||||
#$thema = str_replace (array("\\", "ä", "ö", "ü", "ß", "Ä", "Ö", "Ü"), array("", "&AUML;", "&OUML;", "&UUML;", "&SZLIG;", "&AUML;", "&OUML;", "&UUML;"), $Themen[0][$i]);
|
||||
$them = str_replace (array("+", "-", "\"", "\\"), array("", "", "", ""), $Themen[0][$i]);
|
||||
|
||||
if($i == 0){
|
||||
$oper = "";
|
||||
}else{
|
||||
$oper = "AND";
|
||||
}
|
||||
|
||||
if(strpos($Themen[0][$i],"+") === 0){
|
||||
$sql .= "UPPER(thema) $trenner1 '$start1".$them."$ende1' ";
|
||||
} elseif(strpos($Themen[0][$i],"-") === 0){
|
||||
$sql .= "$oper UPPER(thema) NOT $trenner1 '$start1".$them."$ende1' ";
|
||||
} elseif($Themen[0][$i] == ""){
|
||||
NULL;
|
||||
}else{
|
||||
$sql .= "$oper UPPER(thema) $trenner1 '$start1".$them."$ende1' ";
|
||||
}
|
||||
}
|
||||
|
||||
$sql .= ")";
|
||||
|
||||
}else{
|
||||
|
||||
$sql .= " UPPER(thema) LIKE '%' "; //Wenn nichts eingegeben, dann soll alles angzeigt werden. Das braucht man hier weil zusammengesetzter string sonst WHERE AND TEXTSTELLE = .... heißen könnte
|
||||
|
||||
}
|
||||
|
||||
######################################################################################################
|
||||
## SQL ZUSAMMENBAUEN FÜR DAS THEMA ENDE
|
||||
######################################################################################################
|
||||
|
||||
|
||||
|
||||
######################################################################################################
|
||||
## SQL ZUSAMMENBAUEN FÜR DIE EINLEITUNG
|
||||
######################################################################################################
|
||||
|
||||
$einleitung = preg_replace('/\s{2,}/sm',' ',$einleitung,PREG_SET_ORDER); //Mehr als zwei leerzeichen entfernen
|
||||
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", $einleitung, $Einleitungen);
|
||||
|
||||
if($einleitung != ""){
|
||||
|
||||
$sql .= "AND (";
|
||||
for($i=0; $i < count($Einleitungen[0]); $i++)
|
||||
{
|
||||
|
||||
$einleitung = str_replace (array("\\", "ä", "ö", "ü", "ß", "Ä", "Ö", "Ü"), array("", "&AUML;", "&OUML;", "&UUML;", "&SZLIG;", "&AUML;", "&OUML;", "&UUML;"), $Einleitungen[0][$i]);
|
||||
$sucheinleitung = str_replace (array("+", "-", "\"", "\\"), array("", "", "", ""), $einleitung);
|
||||
|
||||
if($i == 0){
|
||||
$oper = "";
|
||||
}else{
|
||||
$oper = "AND";
|
||||
}
|
||||
|
||||
if(strpos($Einleitungen[0][$i],"+") === 0){
|
||||
$sql .= "UPPER(einleitung) $trenner3 '$start3".$sucheinleitung."$ende3' ";
|
||||
} elseif(strpos($Einleitungen[0][$i],"-") === 0){
|
||||
$sql .= "$oper UPPER(einleitung) NOT $trenner3 '$start3".$sucheinleitung."$ende3' ";
|
||||
} elseif($Einleitungen[0][$i] == ""){
|
||||
NULL;
|
||||
}else{
|
||||
$sql .= "$oper UPPER(einleitung) $trenner3 '$start3".$sucheinleitung."$ende3' ";
|
||||
}
|
||||
}
|
||||
|
||||
$sql .= ")";
|
||||
|
||||
}
|
||||
|
||||
######################################################################################################
|
||||
## SQL ZUSAMMENBAUEN FÜR DIE EINLEITUNG ENDE
|
||||
######################################################################################################
|
||||
|
||||
|
||||
######################################################################################################
|
||||
## SQL ZUSAMMENBAUEN FÜR DEN INHALT
|
||||
######################################################################################################
|
||||
|
||||
|
||||
$inhalt = preg_replace('/\s{2,}/sm',' ',$inhalt,PREG_SET_ORDER); //Mehr als zwei leerzeichen entfernen
|
||||
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, $Inhalte);
|
||||
|
||||
if($inhalt != ""){
|
||||
|
||||
$sql .= "AND (";
|
||||
for($i=0; $i < count($Inhalte[0]); $i++)
|
||||
{
|
||||
|
||||
$inhalt = str_replace (array("\\", "ä", "ö", "ü", "ß", "Ä", "Ö", "Ü"), array("", "&AUML;", "&OUML;", "&UUML;", "&SZLIG;", "&AUML;", "&OUML;", "&UUML;"), $Inhalte[0][$i]);
|
||||
$suchwort = str_replace (array("+", "-", "\"", "\\"), array("", "", "", ""), $inhalt);
|
||||
|
||||
if($i == 0){
|
||||
$oper = "";
|
||||
}else{
|
||||
$oper = "AND";
|
||||
}
|
||||
|
||||
if(strpos($Inhalte[0][$i],"+") === 0){
|
||||
$sql .= "UPPER(ausfuehrung) $trenner4 '$start4".$suchwort."$ende4' ";
|
||||
} elseif(strpos($Inhalte[0][$i],"-") === 0){
|
||||
$sql .= "$oper UPPER(ausfuehrung) NOT $trenner4 '$start4".$suchwort."$ende4' ";
|
||||
} elseif($Inhalte[0][$i] == ""){
|
||||
NULL;
|
||||
}else{
|
||||
$sql .= "$oper UPPER(ausfuehrung) $trenner4 '$start4".$suchwort."$ende4' ";
|
||||
}
|
||||
}
|
||||
|
||||
$sql .= ")";
|
||||
|
||||
}
|
||||
|
||||
######################################################################################################
|
||||
## SQL ZUSAMMENBAUEN FÜR DEN INHALT ENDE
|
||||
######################################################################################################
|
||||
|
||||
|
||||
######################################################################################################
|
||||
## SQL ZUSAMMENBAUEN FÜR DEN EXTRAKT
|
||||
######################################################################################################
|
||||
|
||||
|
||||
$extrakt = preg_replace('/\s{2,}/sm',' ',$extrakt,PREG_SET_ORDER); //Mehr als zwei leerzeichen entfernen
|
||||
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", $extrakt, $Extrakte);
|
||||
|
||||
if($extrakt != ""){
|
||||
|
||||
$sql .= "AND (";
|
||||
for($i=0; $i < count($Extrakte[0]); $i++)
|
||||
{
|
||||
|
||||
$extrakt = str_replace (array("\\", "ä", "ö", "ü", "ß", "Ä", "Ö", "Ü"), array("", "&AUML;", "&OUML;", "&UUML;", "&SZLIG;", "&AUML;", "&OUML;", "&UUML;"), $Extrakte[0][$i]);
|
||||
$suchextrakt = str_replace (array("+", "-", "\"", "\\"), array("", "", "", ""), $extrakt);
|
||||
|
||||
if($i == 0){
|
||||
$oper = "";
|
||||
}else{
|
||||
$oper = "AND";
|
||||
}
|
||||
|
||||
if(strpos($Extrakte[0][$i],"+") === 0){
|
||||
$sql .= "UPPER(extrakt) $trenner4 '$start5".$suchextrakt."$ende5' ";
|
||||
} elseif(strpos($Extrakte[0][$i],"-") === 0){
|
||||
$sql .= "$oper UPPER(extrakt) NOT $trenner5 '$start4".$suchextrakt."$ende5' ";
|
||||
} elseif($Extrakte[0][$i] == ""){
|
||||
NULL;
|
||||
}else{
|
||||
$sql .= "$oper UPPER(extrakt) $trenner5 '$start5".$suchextrakt."$ende5' ";
|
||||
}
|
||||
}
|
||||
|
||||
$sql .= ")";
|
||||
|
||||
}
|
||||
|
||||
######################################################################################################
|
||||
## SQL ZUSAMMENBAUEN FÜR DEN INHALT ENDE
|
||||
######################################################################################################
|
||||
|
||||
|
||||
|
||||
######################################################################################################
|
||||
## GESAMTSELECT - SQL ZUSAMMENBAUEN
|
||||
######################################################################################################
|
||||
|
||||
$query = $sql1.$sql;
|
||||
#echo $query;
|
||||
#exit;
|
||||
|
||||
|
||||
$result = $db->query($query);
|
||||
$res = $result->fetch_array()
|
||||
or die ("Cannot execute query");
|
||||
|
||||
function kurzer_text($string,$laenge){
|
||||
$origin=strlen($string);
|
||||
$stri_arr=explode(" ",$string);
|
||||
$anzzahl=count($stri_arr);
|
||||
$gekuerzt=0;
|
||||
$string="";
|
||||
while($gekuerzt<$anzzahl){
|
||||
$string_alt=$string;
|
||||
$string=$string." ".$stri_arr[$gekuerzt];
|
||||
$gekuerzt++;
|
||||
if(strlen($string)>$laenge){
|
||||
$gekuerzt=$anzzahl;
|
||||
$string=$string_alt;
|
||||
}
|
||||
}
|
||||
if($laenge<$origin){
|
||||
$string=$string."<nobr> <b>...</b></nobr>";
|
||||
}
|
||||
return $string;
|
||||
}
|
||||
|
||||
if($res['anz_treffer'] == '' or $res['anz_treffer'] == 0){
|
||||
$smarty->assign('lue_suche_nomatch', "1");
|
||||
}else{
|
||||
$smarty->assign('lue_suche_match', "1");
|
||||
$smarty->assign('anzahltreffer', "$res[anz_treffer]");
|
||||
|
||||
$db = dbconnect();
|
||||
$sql1 = "SELECT eid, thema, einleitung, ausfuehrung, extrakt, bezeichnung
|
||||
FROM lue_quelle a, lue_art b
|
||||
WHERE a.lueaid = b.lueaid
|
||||
AND b.lueaid like '$lueart'
|
||||
AND ";
|
||||
|
||||
$sql2 = " ORDER BY eid desc";
|
||||
$query = $sql1.$sql.$sql2;
|
||||
#echo $query;
|
||||
#exit;
|
||||
$result = $db->query($query)
|
||||
or die ("Cannot execute query");
|
||||
|
||||
while ($row = $result->fetch_array()){
|
||||
|
||||
if($inhalt == ''){
|
||||
##$preview = substr(strip_tags($row[inhalt]),0,200)." <b>...</b> ";
|
||||
$preview = kurzer_text(strip_tags($row['ausfuehrung']),200);
|
||||
|
||||
}else{
|
||||
#$preview = preview(strip_tags($row[inhalt]),trim($_POST[inhalt]));
|
||||
##$preview = substr(strip_tags($row[inhalt]),0,200)." <b>...</b> ";
|
||||
$preview = kurzer_text(strip_tags($row['ausfuehrung']),200);
|
||||
}
|
||||
|
||||
if($art == 'exact'){ // Übergabe für Highligthing. Wenn exact, dann darf bei Begriff nicht Gottesdienst hervorgehoben werden
|
||||
$suchart = 0;
|
||||
}else{
|
||||
$suchart = 1;
|
||||
}
|
||||
|
||||
$inhalt_hig = urlencode(serialize($_POST['inhalt']));
|
||||
|
||||
$row['suchart'] = $suchart;
|
||||
$row['inhalt_hig'] = $inhalt_hig;
|
||||
$row['preview'] = $preview;
|
||||
$value[] = $row;
|
||||
}
|
||||
// Assign this array to smarty...
|
||||
$smarty->assign('table_data', $value);
|
||||
|
||||
|
||||
} // Ende if Treffer gefunden
|
||||
|
||||
|
||||
} // Ende Action=suche
|
||||
|
||||
$smarty->assign('action', "$action");
|
||||
$smarty->display("$template/$templatename");
|
||||
?>
|
Reference in New Issue
Block a user