count($tables)-1) $table_selected=0; $offset=(isset($_POST['offset'])) ? intval($_POST['offset']):0; function mysql_search($db,$tabelle,$suchbegriffe,$suchart,$offset=0,$anzahl_ergebnisse=20,$auszuschliessende_tabellen='') { global $tables,$config; $ret=false; $link=MSD_mysql_connect(); if (sizeof($tables)>0) { $suchbegriffe=trim(str_replace('*','',$suchbegriffe)); $suchworte=explode(' ',$suchbegriffe); if (($suchbegriffe>'') && (is_array($suchworte)) ) { // Leere Einträge (durch doppelte Leerzeichen) entfernen $anzahl_suchworte=sizeof($suchworte); for ($i=0;$i<$anzahl_suchworte;$i++) { if (trim($suchworte[$i])=='') unset($suchworte[$i]); } $bedingung=''; $where=''; $felder=''; // Felder ermitteln $sql='SHOW COLUMNS FROM `'.$db.'`.`'.$tables[$tabelle].'`'; $res=mysql_query($sql,$link); unset($felder); if (!$res===false) { // Felder der Tabelle ermitteln WHILE ($row=mysql_fetch_object($res)) { $felder[]=$row->Field; } } $feldbedingung=''; if ($suchart=='CONCAT') { if (is_array($felder)) { //Concat-String bildem $concat=implode('`),LOWER(`',$felder); $concat='CONCAT_WS(\'\',LOWER(`'.$concat.'`))'; $where=''; foreach ($suchworte as $suchbegriff) { $where.=$concat.' LIKE \'%'.strtolower($suchbegriff).'%\' AND '; } $where=substr($where,0,-4); // letztes AND entfernen $sql='SELECT * FROM `'.$db.'`.`'.$tables[$tabelle].'` WHERE '.$where.' LIMIT '.$offset.','.$anzahl_ergebnisse; } } else { $pattern='`{FELD}` LIKE \'%{SUCHBEGRIFF}%\''; if (is_array($felder)) { foreach ($felder as $feld) { unset($feldbedingung); foreach ($suchworte as $suchbegriff) { $suchen=ARRAY('{FELD}','{SUCHBEGRIFF}'); $ersetzen=ARRAY($feld,$suchbegriff); $feldbedingung[]=str_replace($suchen,$ersetzen,$pattern); } $bedingung[]='('.implode(' '.$suchart.' ',$feldbedingung).') '; } } else die('
Fehler: ich konnte nicht ermitteln welche Felder die Tabelle "'.$tabelle.'" hat!'); $where=implode(' OR ',$bedingung); $sql='SELECT * FROM `'.$db.'`.`'.$tables[$tabelle].'` WHERE ('.$where.') LIMIT '.$offset.','.$anzahl_ergebnisse; } } else $sql='SELECT * FROM `'.$db.'`.`'.$tables[$tabelle].'` LIMIT '.$offset.','.$anzahl_ergebnisse; $res=@mysql_query($sql,$link); if ($res) { WHILE ($row=mysql_fetch_array($res,MYSQL_ASSOC)) { //Treffer markieren foreach ($row as $key=>$val) { foreach ($suchworte as $suchbegriff) { $row[$key]=markiere_suchtreffer($suchbegriff,$row[$key]); } $row[$key]=ersetze_suchtreffer($row[$key]); } $ret[]=$row; } } } return $ret; } // Markiert den Suchbegriff mit einem Code (ASCII 01/02) // - falls nicht gefunden : Rückgabe des Originalstrings // function markiere_suchtreffer($suchbegriff,$suchstring) { $str=strtolower($suchstring); $suchbegriff=strtolower($suchbegriff); if ((strlen($str)>0) && (strlen($suchbegriff)>0) ) { // Treffer Position bestimmen $offset=0;$trefferpos=0; while ( ($offset<=strlen($str)) ) //Wenn nur der erste Treffer markiert werden soll, so muss die Zeile so lauten // while ( ($offset<=strlen($str)) || ($in_html==false) ) { for ($offset=$trefferpos;$offset<=strlen($str);$offset++) { $start=strpos($str,$suchbegriff,$offset); if ($start===false) $offset=strlen($str)+1; else { if ($offset<=strlen($str)) { //Treffer überprüfen $in_html=false; // Steht die Fundstelle zwischen < und > (also im HTML-Tag) ? for ($position=$start;$position>=0;$position--) { if (substr($str,$position,1)==">") { $in_html=false; $position=-1; // Schleife verlassen } if (substr($str,$position,1)=="<") { $in_html=true; $position=-1; // Schleife verlassen } } if ($in_html) { for ($position2=$start;$position2") { $in_html=true;$position2=strlen($str)+1; $offset=strlen($str)+1; } } } if (!$in_html) { $ersetzen=substr($suchstring,$start,strlen($suchbegriff)); $str=substr($suchstring,0,$start); $str.=chr(1).$ersetzen.chr(2); $str.=substr($suchstring,($start+strlen($ersetzen)),(strlen($suchstring)-strlen($ersetzen))); $suchstring=$str; } if ($in_html) { $trefferpos=$start+1;$offset=$trefferpos; } } $offset=$start+1; } } } } return $suchstring; } // Ersetzt die Codes letztlich durch die Fontangabe function ersetze_suchtreffer($text) { $such=ARRAY(chr(1),chr(2)); $ersetzen=ARRAY('',''); return str_replace($such,$ersetzen,htmlspecialchars($text)); } $suchbegriffe=trim($suchbegriffe); // Leerzeichen vorne und hinten wegschneiden if (isset($_POST['reset'])) { $suchbegriffe=''; $_SESSION['mysql_search']['suchbegriffe']=''; $suchart=''; $_SESSION['mysql_search']['suchart']=''; $table_selected=0; $_SESSION['mysql_search']['table_selected']=0; } $max_treffer=20; $treffer=mysql_search($db,$table_selected,$suchbegriffe,$suchart,$offset,$max_treffer+1); $showtables=0; // Anzeige der Tabellendaten im restlichen SQL-Browser ausschalten // Fix bis zur kompletten Umstellung auf Templates echo $aus; $aus=''; $anzahl_tabellen=sizeof($tables); $table_options=''; if ($anzahl_tabellen>0) { for ($i=0;$i<$anzahl_tabellen;$i++) { if (isset($tables[$i])) { $table_options.='