*/ require_once './global.php'; $title = $lang->get('Suche'); if (!isset($_REQUEST['where'])) { $_REQUEST['where'] = ''; } if (!isset($_REQUEST['order_by'])) { $_REQUEST['order_by'] = ''; } if (!isset($_REQUEST['order'])) { $_REQUEST['order'] = ''; } if (!isset($_REQUEST['limit'])) { $_REQUEST['limit'] = 5; } if (!isset($_REQUEST['search_method'])) { $_REQUEST['search_method'] = "OR"; } // Sofern der Besucher nach einem Pagerank sucht, müssen // wir die Einstellungen gesondert festlegen if (isset($_GET['pr'])) { $_REQUEST['where'] = 'pagerank'; $_REQUEST['search'] = (int) $_GET['pr']; $_REQUEST['limit'] = 10; } // Suchbegriff wird nach Badwords durchsucht if (!empty($_REQUEST['search'])) { $_REQUEST['search'] = str_replace($core->options['badwordchar'], "", convert_badwords($_REQUEST['search'])); } // Falls es sich bei der Suchanfrage um eine PLZ oder um einen Pagerank handelt, // wird die minimale Zeichanzahl herabgesetzt if ($_REQUEST['where'] == 'plz' || $_REQUEST['where'] == 'pagerank') { $min_char = 1; } else { $min_char = 3; } if (isset($_REQUEST['search']) && strlen(trim($_REQUEST['search'])) >= $min_char) { $this_keyword = $db->query_fetch("SELECT * FROM " . TABLE_PREFIX . "stats_log_keywords WHERE keyword = '" . trim(escapeString($_REQUEST['search'])) . "'"); // Hier schreiben wir die Begriffe erstmal in die LOG Tabelle if (!is_array($this_keyword)) { $db->query(" INSERT INTO ". TABLE_PREFIX ."stats_log_keywords VALUES (NULL, '" . time() . "', '" .escapeString($_SERVER['REMOTE_ADDR']). "', '".trim(escapeString($_REQUEST['search']))."', 1) "); } else { $db->query("UPDATE " . TABLE_PREFIX . "stats_log_keywords SET date = " . time() . ", count = count + 1 WHERE search_id = " . $this_keyword['search_id'] . ""); } switch ($_REQUEST['where']) { case 'plz': $where[] = 'plz'; break; case 'city': $where[] = 'city'; break; case 'pagerank': $where[] = 'l.pagerank'; break; default: $where[] = "l.name"; $where[] = "l.description"; } // Die Keywords sollen bei jeder Suche berücksichtigt werden // Ausnahmen: // - Suche nach Pagerrank if ($_REQUEST['where'] != 'pagerank') { $where[] = 'keywords'; } switch ( $_REQUEST['order_by'] ) { case 'name': $order_by = 'l.name'; break; case 'plz': $order_by = 'plz'; break; default: $order_by = 'clicks'; } if ($_REQUEST['order'] == 'asc') { $order = 'asc'; } else { $order = 'desc'; } if ($_REQUEST['limit'] < 1) { $_REQUEST['limit'] = 1; } if ($_REQUEST['limit'] > 100) { $_REQUEST['limit'] = 100; } $limit = (int)$_REQUEST['limit']; // Wir definieren ein Array für alle ungültigen // Zeichen, die später aus dem Suchstring gefiltert werden $keyword_filter = array('+','-','!','%'); $keywords = trim(escapeString($_REQUEST['search'])); $keywords = str_replace($keyword_filter, ' ', $keywords); $keywords = explode(" ", $keywords); // HotFix #1041 // Um die Suche nach PR0 Links zu ermöglichen, // müssen wir bei der PR Suche, den Filter überspringen if (!isset($_GET['pr'])) { foreach ($keywords as $key => $value) { $value = trim($value); if (!empty($value)) { $keywords_temp[] = $value; } } $keywords = $keywords_temp; unset($keywords_temp); } unset($query_keys); // Bugfix #1057 // Suchbegriffe, die nicht der Mindestlänge entsprechen, // werden aus dem Array $keywords entfernt foreach ($keywords as $key => $keyword) { if (strlen($keywords[$key]) < $min_char) { unset($keywords[$key]); } } // Der Suchstring für die Datenbankabfrage wird generiert if ($_REQUEST['search_method'] == "OR" || $_REQUEST['search_method'] == "AND") { foreach ($keywords as $value) { foreach ($where as $wvalue) { if ($wvalue == "plz") { $query_keys[] = $wvalue . " LIKE '" . trim($value) . "%'"; } elseif ($wvalue == "l.pagerank") { $query_keys[] = $wvalue . " LIKE '" . trim($value) . "'"; } else { $query_keys[] = $wvalue . " LIKE '%" . trim($value) . "%'"; } } $query_strings[] = "( " . implode(" OR ",$query_keys). " )"; unset($query_keys); } // Die Suchmethode wird ausgewertet if ($_REQUEST['search_method'] == "OR") { $query_keywords = " AND (" . implode(" OR ", $query_strings) . ")"; } else { $query_keywords = " AND (" . implode(" AND ", $query_strings). ")"; } unset($query_strings); } else { $search_string = implode(" ", $keywords); foreach($where as $wvalue) { if ($wvalue == "plz") { $query_keys[] = $wvalue . " LIKE '" . $search_string . "%'"; } elseif ($wvalue == "l.pagerank") { $query_keys[] = $wvalue . " LIKE '" . trim($value) . "'"; } else { $query_keys[] = $wvalue . " LIKE '%" . $search_string . "%'"; } } $query_keywords = " AND (" . implode(" OR ",$query_keys) . " )"; unset($query_keys); } $query = "SELECT count(*) as count FROM " . TABLE_PREFIX . "links as l WHERE activated = '1' AND deactivated = '0' " . $query_keywords . " "; $count = $db->query_fetch($query); if (isset($_REQUEST['start'])) { if ($_REQUEST['start'] > 0 && $_REQUEST['start'] <= $count['count']) { $start = intval($_REQUEST['start']); } else { $start = 0; } } else { $start = 0; } // ****** SEARCH QUERY ****** // ************************** $result = $db->query(" SELECT c.cat_id, c.name AS cat_name, l.link_id, l.parent_cat_id, l.name, l.url, l.clicks, l.pagerank, l.description, l.image, l.button, l.banner, l.link_type, l.date_entry, l.land, AVG(v.points) AS avg_points, COUNT(v.link_id) AS votes FROM " . TABLE_PREFIX . "links AS l LEFT JOIN " . TABLE_PREFIX . "votes AS v ON (l.link_id = v.link_id) LEFT JOIN " . TABLE_PREFIX . "cats AS c ON (l.parent_cat_id = c.cat_id) WHERE activated = '1' AND deactivated = '0' " . $query_keywords . " GROUP BY l.link_id ORDER BY c.name ASC, " . $order_by . " " . $order . " LIMIT " . $start . "," . $limit ); // Sofern es sich um eine Pagerank - Suche handelt, // setzen wir die Keywords zurück, denn hier soll nichts markiert werden if ($_REQUEST['where'] == 'pagerank') { $keywords = array(); } while ($row = $db->fetch_array($result)) { get_link_template($row, $keywords); } unset($temp); foreach ($_REQUEST as $key => $value) { $temp[] = $key."=".$value; } $next_page = "?".implode("&", $temp); $tpl->load('content','search'); $tpl->output(); } // Daten für die LIVE Suche einlesen $result = $db->query("SELECT * FROM ". TABLE_PREFIX ."stats_log_keywords ORDER BY date DESC LIMIT 0,10"); while ($row = $db->fetch_array($result)) { $datum = date("d.m.Y", $row['date']); $zeit = date("H:i:s", $row['date']); // Filter $row['ip'] = apply_filter('search_ip', $row['ip']); $row['keyword'] = apply_filter('search_live_keyword', $row['keyword'], 35); $tpl->load('search_live_bit','search_live_bit'); } $tpl->load('content','search_form'); $tpl->output(); ?>