ilch Forum » Allgemein » HTML, PHP, SQL,... » Suchfunktion: Gesamte Website

Geschlossen
  1. #31
    User Pic
    Devil Mitglied
    Registriert seit
    02.02.2006
    Beiträge
    2.094
    Beitragswertungen
    21 Beitragspunkte
    Hiho! lächeln
    Habe das nun so eingefügt. "{typ} funktioniert, allerdings ist der erste Buchstabe klein - wie bekommt man den groß? ^^

    "{ctime}" funktioniert leider nicht.

    unitedfg.square7.de/index.php?search=cxt&autor=&in=4&days=360

    search.htm:
    ...
    {EXPLODE}
    <br /><br />
    <div style="float: left">{MPL}</div>
    <div style="float: right; text-align: right">Gesamt: {gAnz}</div><br /><br />
     <table width="100%" border="0" cellpadding="1" cellspacing="2" bgcolor="#666666" class="border">
      <tr>
        <td width="15%">Kategorie</td>
        <td width="60%">Titel</td>
        <td width="15%">Autor</td>
        <td width="10%">Datum</td>
      </tr>
    </table>
     <table width="100%" border="0" cellspacing="1" cellpadding="2" class="border">
      {EXPLODE}<tr class="{class}">
        <td width="15%" class="erstezeile">{typ}</td>
        <td width="60%" class="erstezeile"><a href="?{link}">{titel}</a></td>
        <td width="15%" class="erstezeile">{autor}</td>
        <td width="10%" class="erstezeile">{ctime}</td>
      </tr>{EXPLODE}
    </table>
    {MPL}


    search.php:
    <?php
    #   Copyright by: Manuel
    #   Support: www.ilch.de
     
     
    defined ('main') or die ( 'no direct access' );
     
    function  serach_mark($text,$such) {
      #$text = BBcode($text);
      $serar = explode(' ', $such);
      $text  = strip_tags($text);
      $text  = stripslashes($text);
      $rte   = '';
      $tleng = 30;
      foreach($serar as $v) {
        $firs = strpos(strtolower($text),strtolower($v));
        $begi = (($firs - $tleng) < 0 ? 0 : $firs - $tleng );
        $leng = strlen($text);
        $ende = (($firs + strlen($v) + $tleng) > $leng ? $leng : $firs + strlen($v) + $tleng );
        $ttxt = substr($text,$begi,($ende - $begi));
        $rte .= ' ... '.preg_replace("/".$v."/si",'<b>'.$v.'</b>',$ttxt);
      }
      return ($rte);
    }
     
    function search_finduser() {
      $design = new design ( 'Finduser' , '', 0 );
      $design->header();
     
      $tpl = new tpl ( 'search_finduser' );
      $tpl->out(0);
      if ( isset ( $_POST['sub'] ) AND !empty($_POST['name']) ) {
          $name = str_replace('*',"%",$_POST['name']);
        $name = escape($name, 'string');
          $q = "SELECT name,name FROM prefix_user WHERE name like '".$name."'";
          $tpl->set ('username',dbliste('',$tpl,'username',$q));
          $tpl->out(1);
      }
      $tpl->out(2);
      $design->footer();
    }
     
    if ($menu->get(1) == 'finduser') {
      search_finduser();
      exit();
    }
     
     
    $such = '';
    if ($menu->get(1) != '') {
      $such = $menu->get(1);
    } elseif (isset($_REQUEST['search'])) {
      $such = $_REQUEST['search'];
    }
     
    if ($such == 'aubt' OR $such == 'augt' OR $such == 'aeit') {
        header('Location: index.php?forum-'.$such);
        exit();
    }
     
    $such = stripslashes(escape($such, 'string'));
     
    $snac = 'Suche';
    if ($such == 'augt' OR $such == 'aeit' OR $such == 'aubt') {
      $ar_s = array('aubt'=>'unbeantworteten Themen','aeit'=>'eigenen Beitr&auml;gen','augt'=>'neue Themen seit dem letzten Besuch');
      $snac = $ar_s[$such];
    } elseif ( isset($_REQUEST['search']) ) {
      $snac = 'nach: '.$such;
    }
     
     
    $title = $allgAr['title'].' :: Suchen :: '.htmlentities($snac);
    $hmenu  = '<a class="smalfont" href="index.php?search">Suchen</a><b> &raquo; </b>'.htmlentities($snac);
    $design = new design ( $title , $hmenu );
    $design->header();
     
    $tpl = new tpl ('search');
    $tpl->set ('size', 30);
     
    $gAnz = 0;
    $autor = '';
    if(isset($_GET['autor'])) {
        $autor = escape($_GET['autor'],'string');
    }
    $tpl->set ('autor', $autor);
     
    if(isset($_GET['in'])) {
        for($i=1;$i<=4;$i++){
            if($_GET['in'] == $i) {
                $tpl->set ('checked'.$i, 'checked="checked"');
            }
        }
    } else $tpl->set ('checked1', 'checked="checked"');
     
    if ($such != 'augt' AND $such != 'aeit' AND $such != 'aubt') {
      $tpl->set('search',escape_for_fields($such),0);
    }
     
    if(isset($_GET['days'])) {
        $days = ($_GET['days'] == 0 ? 360 : intval($_GET['days']));
    }
    else $days = 360;
    $days_ar = array(  360 => 'alle Beitr&auml;ge (1 Jahr)',
                    1   => '1 Tag',
                    7   => '7 Tage',
                    14  => '2 Wochen',
                    30  => '1 Monat',
                    90  => '3 Monate',
                    180 => '6 Monate');
    $tpl->set('days',arlistee($days, $days_ar));
    $tpl->out(0);
     
    if (!empty($such) OR !empty($autor)) {
      $page = 1;
      if (isset($_GET['page'])) {
        $page = str_replace('-p','',$_GET['page']);
      }
     
     
      $limit = 25;  // Limit
      $anfang = ($page - 1) * $limit;
     
      $x = time() - (3600 * 24 * $days);
     
        $such = str_replace('-','',$such);
        $such = str_replace('=','',$such);
        $such = str_replace('&','',$such);
     
        $serar = explode(' ', $such);
        $str_forum  = '';
        $str_forum_a = '';
        $str_news   = '';
        $str_news_a = '';
        $str_downs  = '';
        $str_downs_ = '';
        $str_downs_a = '';
        foreach($serar as $v) {
            $str = str_replace('\'','',$v);
            $str = str_replace('"','',$str);
            $str = addslashes($str);
            if ( !empty($str) ) {
                if($_GET['in'] == 1) {
                    $str_forum .= "txt LIKE '%".$str."%' AND ";
                }
                elseif($_GET['in'] == 2) {
                    $str_news  .= "news_text LIKE '%".$str."%' AND ";
                }
                elseif($_GET['in'] == 3) {
                    $str_downs  .= "`descl` LIKE '%".$str."%' AND ";
                    $str_downs_ .= "name LIKE '%".$str."%' AND ";
                }
                elseif($_GET['in'] == 4) {
                    $str_forum .= "txt LIKE '%".$str."%' AND ";
                    $str_news  .= "news_text LIKE '%".$str."%' AND ";
                    $str_downs  .= "`descl` LIKE '%".$str."%' AND ";
                    $str_downs_ .= "name LIKE '%".$str."%' AND ";
                }
            }
        }
     
        if(isset($_GET['autor'])) {
            if($_GET['in'] == 1) {
                $str_forum_a .= "c.erst LIKE '%".$autor."%' AND ";
            }
            elseif($_GET['in'] == 2) {
                $str_news_a .= "`name` LIKE '%".$autor."%' AND ";
            }
            elseif($_GET['in'] == 3) {
                $str_downs_a .= "`creater` LIKE '%".$autor."%' AND ";
            }
            elseif($_GET['in'] == 4) {
                $str_forum_a .= "c.erst LIKE '%".$autor."%' AND ";
                $str_news_a .= "`name` LIKE '%".$autor."%' AND ";
                $str_downs_a .= "`creater` LIKE '%".$autor."%' AND ";
            }
        }
     
     
    // 1 = forum, ist immer standart
        $q = "
        SELECT DISTINCT
         a.fid as fid,
         a.name as titel,
         'foru' as typ,
         a.id as id,
         `time`,
          c.erst as autor
       FROM prefix_posts c
         LEFT JOIN prefix_topics a ON a.id = c.tid
         LEFT JOIN prefix_forums b ON b.id = a.fid
         LEFT JOIN prefix_groupusers vg ON vg.uid = ".$_SESSION['authid']." AND vg.gid = b.view
         LEFT JOIN prefix_groupusers rg ON rg.uid = ".$_SESSION['authid']." AND rg.gid = b.reply
         LEFT JOIN prefix_groupusers sg ON sg.uid = ".$_SESSION['authid']." AND sg.gid = b.start
       WHERE (((b.view >= ".$_SESSION['authright']." AND b.view <= 0) OR
             (b.reply >= ".$_SESSION['authright']." AND b.reply <= 0) OR
             (b.start >= ".$_SESSION['authright']." AND b.start <= 0)) OR
             (vg.fid IS NOT NULL OR rg.fid IS NOT NULL OR sg.fid IS NOT NULL OR ".$_SESSION['authright']." = -9))
         AND (".$str_forum." 1 = 1)
          AND (".$str_forum_a." 1 = 1)
         AND (time >= ". $x .")
       GROUP BY a.id
        ORDER BY time DESC";
    if(isset($_GET['in'])) {
        if($_GET['in'] == 2) {
            $q = "SELECT DISTINCT
             0 as fid,
             news_title as titel,
             'news' as typ,
             news_id as id,
             news_time as `time`,
             prefix_user.name as autor
             FROM prefix_news
             LEFT JOIN prefix_user ON prefix_news.user_id = prefix_user.id
             WHERE (".$str_news." 1 = 1)
                 AND (".$str_news_a." 1 = 1)
                 AND (news_time >= ". $x .")
             ORDER BY `time` DESC";
        } elseif($_GET['in'] == 3) {
            $q = "SELECT DISTINCT
             0 as fid,
             CONCAT( name, ' ', version ) AS titel,
             'down' as typ,
             id,
             UNIX_TIMESTAMP(`time`) as `time`,
                 creater as autor
             FROM prefix_downloads
             WHERE ((".$str_downs." 1 = 1) OR (".$str_downs_." 1 = 1))
                 AND (".$str_downs_a." 1 = 1)
                 AND (UNIX_TIMESTAMP(`time`) >= ". $x .")
             ORDER BY UNIX_TIMESTAMP(`time`) DESC";
        }   elseif($_GET['in'] == 4) {
            $sql1 = "SELECT DISTINCT
             a.fid as fid,
             a.name as titel,
             'foru' as typ,
             a.id as id,
             `time`,
             c.erst as autor
             FROM prefix_posts c
             LEFT JOIN prefix_topics a ON a.id = c.tid
             LEFT JOIN prefix_forums b ON b.id = a.fid
             LEFT JOIN prefix_groupusers vg ON vg.uid = ".$_SESSION['authid']." AND vg.gid = b.view
             LEFT JOIN prefix_groupusers rg ON rg.uid = ".$_SESSION['authid']." AND rg.gid = b.reply
             LEFT JOIN prefix_groupusers sg ON sg.uid = ".$_SESSION['authid']." AND sg.gid = b.start
             WHERE (((b.view >= ".$_SESSION['authright']." AND b.view <= 0)
                 OR (b.reply >= ".$_SESSION['authright']." AND b.reply <= 0)
                 OR (b.start >= ".$_SESSION['authright']." AND b.start <= 0))
                 OR (vg.fid IS NOT NULL OR rg.fid IS NOT NULL OR sg.fid IS NOT NULL OR ".$_SESSION['authright']." = -9))
                 AND (".$str_forum." 1 = 1)
                 AND (".$str_forum_a." 1 = 1)
                 AND (time >= ". $x .")
             GROUP BY a.id";
           
            $sql2 = "SELECT DISTINCT
             0 as fid,
             news_title as titel,
             'news' as typ,
             news_id as id,
             news_time as `time`,
             prefix_user.name as autor
             FROM prefix_news
             LEFT JOIN prefix_user ON prefix_news.user_id = prefix_user.id
             WHERE (".$str_news." 1 = 1)
                 AND (".$str_news_a." 1 = 1)
                 AND (news_time >= ". $x .")";
           
            $sql3 = "SELECT DISTINCT
             0 as fid,
             CONCAT( name, ' ', version ) AS titel,
             'down' as typ,
             id,
             UNIX_TIMESTAMP(`time`) as `time`,
                 creater as autor
             FROM prefix_downloads
             WHERE ((".$str_downs." 1 = 1) OR (".$str_downs_." 1 = 1))
                 AND (".$str_downs_a." 1 = 1)
                 AND (UNIX_TIMESTAMP(`time`) >= ". $x .")
             ORDER BY UNIX_TIMESTAMP(`time`) DESC";
         
            $q = $sql1." union ".$sql2." union ".$sql3;
        }
    }
        $gAnz = db_num_rows(db_query($q));
     
      $q .= " LIMIT ".$anfang.",".$limit;
     
      $MPL = db_make_sites ($page , "" , $limit , "index.php?search=".urlencode($such)."&autor=".urlencode($autor)."&in=".$_GET['in']."&days=".$days."&page=", "", $gAnz );
      $tpl->set_ar_out(array('MPL'=>$MPL,'gAnz'=>$gAnz),1);
     
      $q = db_query($q);
      $class = '';
    while($r = db_fetch_assoc($q) ) {
        $class = ($class == 'Cmite' ? 'Cnorm' : 'Cmite' );
        $r['class'] = $class;
        if ($r['typ'] == 'foru') {
            $r['ctime'] = db_result(db_query("SELECT MAX(time) FROM prefix_posts WHERE tid = ".$r['id']),0,0);
            $r['ord'] = forum_get_ordner($r['ctime'],$r['id'],$r['fid']);
            $r['link'] = 'forum-showposts-'.$r['id'];
        } elseif ($r['typ'] == 'news') {
            $r['ord']  = 'ord';
            $r['link'] = 'news-'.$r['id'];
            $r['ctime'] = $r['news_time'];
        } elseif ($r['typ'] == 'down') {
            $r['ord']  = 'ord';
            $r['link'] = 'downloads-show-'.$r['id'];
            $r['ctime'] = $r['time'];
        }
        $tpl->set_ar_out($r,2);
    }  $tpl->out(3);
    }
     
     
    $design->footer();
     
    ?>



    Zuletzt modifiziert von Devil am 01.03.2010 - 22:08:08
    Wer zuletzt lacht, hat den schlechtesten Ping.
    0 Mitglieder finden den Beitrag gut.
  2. #32
    User Pic
    Lord|Schirmer Administrator
    Registriert seit
    21.03.2007
    Beiträge
    7.634
    Beitragswertungen
    1193 Beitragspunkte
    Die Zeitangabe funktioniert leider nicht so einfach!
    Hier mal die Lösung:

    Ersetze ab Zeile 290 in der search.php
      $q = db_query($q);
      $class = '';
      while($r = db_fetch_assoc($q) ) {
        $class = ($class == 'Cmite' ? 'Cnorm' : 'Cmite' );
        $r['class'] = $class;
        if ($r['typ'] == 'foru') {
    	  $r['kat'] = 'Forum';
          $r['ctime'] = date("d.m.Y",db_result(db_query("SELECT MAX(time) FROM prefix_posts WHERE tid = ".$r['id']),0,0));
          $r['ord'] = forum_get_ordner($r['ctime'],$r['id'],$r['fid']);
          $r['link'] = 'forum-showposts-'.$r['id'];
        } elseif ($r['typ'] == 'news') {
    	  $r['kat'] = 'News';
          $r['ord']  = 'ord';
          $r['link'] = 'newsextended-'.$r['id'];
    	  $r['ctime'] =  date('d.m.Y',strtotime($r['time']));
        } elseif ($r['typ'] == 'down') {
    	  $r['kat'] = 'Downloads';
          $r['ord']  = 'ord';
          $r['link'] = 'downloads-show-'.$r['id'];
    	  $r['ctime'] = date("d.m.Y",$r['time']); 
        }
        $tpl->set_ar_out($r,2);
      }
      $tpl->out(3);
    }
     
     
    $design->footer();
     
    ?>


    und mach im Template search.htm aus {typ} -> {kat}

    Sollte jetzt funktionieren!
    rules :: doku :: faq :: linkus
    0 Mitglieder finden den Beitrag gut.
  3. #33
    User Pic
    Devil Mitglied
    Registriert seit
    02.02.2006
    Beiträge
    2.094
    Beitragswertungen
    21 Beitragspunkte
    Stimmt, Kat wird doch auch in der News.htm verwendet frech

    So, laut meinem Ergebnis klappt alles!
    unitedfg.square7.ch/index.php?search=.&autor=&in=4&days=360

    Vielen Dank euch beiden! Auch für die Zeit! Nicht schlecht! lächeln


    Danke nochmals glücklich Yes Yes Yes
    Wer zuletzt lacht, hat den schlechtesten Ping.
    0 Mitglieder finden den Beitrag gut.
  4. #34
    User Pic
    Lord|Schirmer Administrator
    Registriert seit
    21.03.2007
    Beiträge
    7.634
    Beitragswertungen
    1193 Beitragspunkte
    Gern geschehen!

    Interessant wäre noch wie man die Suche für alle Katogieren besser zusammenfassen kann um eine Sortierung einzufügen!

    elseif($_GET['in'] == 4) {
    ...
    ...


    Vielleicht hat noch jemand eine Idee, bisher habe ich es noch nicht hinbekommen!
    rules :: doku :: faq :: linkus
    0 Mitglieder finden den Beitrag gut.
  5. #35
    User Pic
    Domme_09 Mitglied
    Registriert seit
    08.07.2008
    Beiträge
    267
    Beitragswertungen
    0 Beitragspunkte
    du könntest um das riesen SQL-Gedöns ein "SELECT * FROM ( SQL-GEDÖNS ) ORDER BY typ" machen... Denke das sollte möglich sein
    www.bvbsupporters-ms.de
    0 Mitglieder finden den Beitrag gut.
  6. #36
    User Pic
    Lord|Schirmer Administrator
    Registriert seit
    21.03.2007
    Beiträge
    7.634
    Beitragswertungen
    1193 Beitragspunkte
    Leider ist es nicht so einfach, da bei der 4. Option für die Suche der gesamten WebSite 3 verschiedene und sortierte SQL Abfragen per Union zusammengehangen werden!
    rules :: doku :: faq :: linkus
    0 Mitglieder finden den Beitrag gut.
  7. #37
    User Pic
    OloX Hall Of Fame
    Registriert seit
    25.02.2006
    Beiträge
    990
    Beitragswertungen
    23 Beitragspunkte
    @Lord|Schirmer
    <?php
    #   Copyright by: Manuel
    #   Support: www.ilch.de
     
     
    defined ('main') or die ( 'no direct access' );
     
    function  serach_mark($text,$such) {
      #$text = BBcode($text);
      $serar = explode(' ', $such);
      $text  = strip_tags($text);
      $text  = stripslashes($text);
      $rte   = '';
      $tleng = 30;
      foreach($serar as $v) {
        $firs = strpos(strtolower($text),strtolower($v));
        $begi = (($firs - $tleng) < 0 ? 0 : $firs - $tleng );
        $leng = strlen($text);
        $ende = (($firs + strlen($v) + $tleng) > $leng ? $leng : $firs + strlen($v) + $tleng );
        $ttxt = substr($text,$begi,($ende - $begi));
        $rte .= ' ... '.preg_replace("/".$v."/si",'<b>'.$v.'</b>',$ttxt);
      }
      return ($rte);
    }
     
    function search_finduser() {
      $design = new design ( 'Finduser' , '', 0 );
      $design->header();
     
      $tpl = new tpl ( 'search_finduser' );
      $tpl->out(0);
      if ( isset ( $_POST['sub'] ) AND !empty($_POST['name']) ) {
          $name = str_replace('*',"%",$_POST['name']);
        $name = escape($name, 'string');
          $q = "SELECT name,name FROM prefix_user WHERE name like '".$name."'";
          $tpl->set ('username',dbliste('',$tpl,'username',$q));
          $tpl->out(1);
      }
      $tpl->out(2);
      $design->footer();
    }
     
    if ($menu->get(1) == 'finduser') {
      search_finduser();
      exit();
    }
     
     
    $such = '';
    if ($menu->get(1) != '') {
      $such = $menu->get(1);
    } elseif (isset($_REQUEST['search'])) {
      $such = $_REQUEST['search'];
    }
     
    if ($such == 'aubt' OR $such == 'augt' OR $such == 'aeit') {
        header('Location: index.php?forum-'.$such);
        exit();
    }
     
    $such = stripslashes(escape($such, 'string'));
     
    $snac = 'Suche';
    if ($such == 'augt' OR $such == 'aeit' OR $such == 'aubt') {
      $ar_s = array('aubt'=>'unbeantworteten Themen','aeit'=>'eigenen Beitr&auml;gen','augt'=>'neue Themen seit dem letzten Besuch');
      $snac = $ar_s[$such];
    } elseif ( isset($_REQUEST['search']) ) {
      $snac = 'nach: '.$such;
    }
     
     
    $title = $allgAr['title'].' :: Suchen :: '.htmlentities($snac);
    $hmenu  = '<a class="smalfont" href="index.php?search">Suchen</a><b> &raquo; </b>'.htmlentities($snac);
    $design = new design ( $title , $hmenu );
    $design->header();
     
    $tpl = new tpl ('search');
    $tpl->set ('size', 30);
     
    $gAnz = 0;
    $autor = '';
    if(isset($_GET['autor'])) {
        $autor = escape($_GET['autor'],'string');
    }
    $tpl->set ('autor', $autor);
     
    if(isset($_GET['in'])) {
        for($i=1;$i<=4;$i++){
            if($_GET['in'] == $i) {
                $tpl->set ('checked'.$i, 'checked="checked"');
            }
        }
    } else $tpl->set ('checked1', 'checked="checked"');
     
    if ($such != 'augt' AND $such != 'aeit' AND $such != 'aubt') {
      $tpl->set('search',escape_for_fields($such),0);
    }
     
    if(isset($_GET['days'])) {
        $days = ($_GET['days'] == 0 ? 360 : intval($_GET['days']));
    }
    else $days = 360;
    $days_ar = array(  360 => 'alle Beitr&auml;ge (1 Jahr)',
                    1   => '1 Tag',
                    7   => '7 Tage',
                    14  => '2 Wochen',
                    30  => '1 Monat',
                    90  => '3 Monate',
                    180 => '6 Monate');
    $tpl->set('days',arlistee($days, $days_ar));
    $tpl->out(0);
     
    if (!empty($such) OR !empty($autor)) {
      $page = 1;
      if (isset($_GET['page'])) {
        $page = str_replace('-p','',$_GET['page']);
      }
     
     
      $limit = 25;  // Limit
      $anfang = ($page - 1) * $limit;
     
      $x = time() - (3600 * 24 * $days);
     
        $such = str_replace('-','',$such);
        $such = str_replace('=','',$such);
        $such = str_replace('&','',$such);
     
        $serar = explode(' ', $such);
        $str_forum  = '';
        $str_forum_a = '';
        $str_news   = '';
        $str_news_a = '';
        $str_downs  = '';
        $str_downs_ = '';
        $str_downs_a = '';
        foreach($serar as $v) {
            $str = str_replace('\'','',$v);
            $str = str_replace('"','',$str);
            $str = addslashes($str);
            if ( !empty($str) ) {
                if($_GET['in'] == 1) {
                    $str_forum .= "txt LIKE '%".$str."%' AND ";
                }
                elseif($_GET['in'] == 2) {
                    $str_news  .= "news_text LIKE '%".$str."%' AND ";
                }
                elseif($_GET['in'] == 3) {
                    $str_downs  .= "`descl` LIKE '%".$str."%' AND ";
                    $str_downs_ .= "name LIKE '%".$str."%' AND ";
                }
                elseif($_GET['in'] == 4) {
                    $str_forum .= "txt LIKE '%".$str."%' AND ";
                    $str_news  .= "news_text LIKE '%".$str."%' AND ";
                    $str_downs  .= "`descl` LIKE '%".$str."%' AND ";
                    $str_downs_ .= "name LIKE '%".$str."%' AND ";
                }
            }
        }
     
        if(isset($_GET['autor'])) {
            if($_GET['in'] == 1) {
                $str_forum_a .= "c.erst LIKE '%".$autor."%' AND ";
            }
            elseif($_GET['in'] == 2) {
                $str_news_a .= "`name` LIKE '%".$autor."%' AND ";
            }
            elseif($_GET['in'] == 3) {
                $str_downs_a .= "`creater` LIKE '%".$autor."%' AND ";
            }
            elseif($_GET['in'] == 4) {
                $str_forum_a .= "c.erst LIKE '%".$autor."%' AND ";
                $str_news_a .= "`name` LIKE '%".$autor."%' AND ";
                $str_downs_a .= "`creater` LIKE '%".$autor."%' AND ";
            }
        }
     
     
    // 1 = forum, ist immer standart
        $q = "
        SELECT DISTINCT
         a.fid as fid,
         a.name as titel,
         'foru' as typ,
         a.id as id,
         `time`,
          c.erst as autor
       FROM prefix_posts c
         LEFT JOIN prefix_topics a ON a.id = c.tid
         LEFT JOIN prefix_forums b ON b.id = a.fid
         LEFT JOIN prefix_groupusers vg ON vg.uid = ".$_SESSION['authid']." AND vg.gid = b.view
         LEFT JOIN prefix_groupusers rg ON rg.uid = ".$_SESSION['authid']." AND rg.gid = b.reply
         LEFT JOIN prefix_groupusers sg ON sg.uid = ".$_SESSION['authid']." AND sg.gid = b.start
       WHERE (((b.view >= ".$_SESSION['authright']." AND b.view <= 0) OR
             (b.reply >= ".$_SESSION['authright']." AND b.reply <= 0) OR
             (b.start >= ".$_SESSION['authright']." AND b.start <= 0)) OR
             (vg.fid IS NOT NULL OR rg.fid IS NOT NULL OR sg.fid IS NOT NULL OR ".$_SESSION['authright']." = -9))
         AND (".$str_forum." 1 = 1)
          AND (".$str_forum_a." 1 = 1)
         AND (time >= ". $x .")
       GROUP BY a.id
        ORDER BY time DESC";
    if(isset($_GET['in'])) {
        if($_GET['in'] == 2) {
            $q = "SELECT DISTINCT
             0 as fid,
             news_title as titel,
             'news' as typ,
             news_id as id,
             news_time as `time`,
             prefix_user.name as autor
             FROM prefix_news
             LEFT JOIN prefix_user ON prefix_news.user_id = prefix_user.id
             WHERE (".$str_news." 1 = 1)
                 AND (".$str_news_a." 1 = 1)
                 AND (news_time >= ". $x .")
             ORDER BY `time` DESC";
        } elseif($_GET['in'] == 3) {
            $q = "SELECT DISTINCT
             0 as fid,
             CONCAT( name, ' ', version ) AS titel,
             'down' as typ,
             id,
             UNIX_TIMESTAMP(`time`) as `time`,
                 creater as autor
             FROM prefix_downloads
             WHERE ((".$str_downs." 1 = 1) OR (".$str_downs_." 1 = 1))
                 AND (".$str_downs_a." 1 = 1)
                 AND (UNIX_TIMESTAMP(`time`) >= ". $x .")
             ORDER BY UNIX_TIMESTAMP(`time`) DESC";
        }   elseif($_GET['in'] == 4) {
            $sql1 = "SELECT DISTINCT
             a.fid as fid,
             a.name as titel,
             'foru' as typ,
             a.id as id,
             `time`,
             c.erst as autor
             FROM prefix_posts c
             LEFT JOIN prefix_topics a ON a.id = c.tid
             LEFT JOIN prefix_forums b ON b.id = a.fid
             LEFT JOIN prefix_groupusers vg ON vg.uid = ".$_SESSION['authid']." AND vg.gid = b.view
             LEFT JOIN prefix_groupusers rg ON rg.uid = ".$_SESSION['authid']." AND rg.gid = b.reply
             LEFT JOIN prefix_groupusers sg ON sg.uid = ".$_SESSION['authid']." AND sg.gid = b.start
             WHERE (((b.view >= ".$_SESSION['authright']." AND b.view <= 0)
                 OR (b.reply >= ".$_SESSION['authright']." AND b.reply <= 0)
                 OR (b.start >= ".$_SESSION['authright']." AND b.start <= 0))
                 OR (vg.fid IS NOT NULL OR rg.fid IS NOT NULL OR sg.fid IS NOT NULL OR ".$_SESSION['authright']." = -9))
                 AND (".$str_forum." 1 = 1)
                 AND (".$str_forum_a." 1 = 1)
                 AND (time >= ". $x .")
             GROUP BY a.id";
           
            $sql2 = "SELECT DISTINCT
             0 as fid,
             news_title as titel,
             'news' as typ,
             news_id as id,
             news_time as `time`,
             prefix_user.name as autor
             FROM prefix_news
             LEFT JOIN prefix_user ON prefix_news.user_id = prefix_user.id
             WHERE (".$str_news." 1 = 1)
                 AND (".$str_news_a." 1 = 1)
                 AND (news_time >= ". $x .")";
           
            $sql3 = "SELECT DISTINCT
             0 as fid,
             CONCAT( name, ' ', version ) AS titel,
             'down' as typ,
             id,
             UNIX_TIMESTAMP(`time`) as `time`,
                 creater as autor
             FROM prefix_downloads
             WHERE ((".$str_downs." 1 = 1) OR (".$str_downs_." 1 = 1))
                 AND (".$str_downs_a." 1 = 1)
                 AND (UNIX_TIMESTAMP(`time`) >= ". $x .")
             ORDER BY UNIX_TIMESTAMP(`time`) DESC";
         
            $q = $sql1." union ".$sql2." union ".$sql3;
        }
    }
        $gAnz = db_num_rows(db_query($q));
     
      $q .= " LIMIT ".$anfang.",".$limit;
     
      $MPL = db_make_sites ($page , "" , $limit , "index.php?search=".urlencode($such)."&autor=".urlencode($autor)."&in=".$_GET['in']."&days=".$days."&page=", "", $gAnz );
      $tpl->set_ar_out(array('MPL'=>$MPL,'gAnz'=>$gAnz),1);
     
    $q = db_query($q);
      $class = '';
      $resAr = array();
      while($r = db_fetch_assoc($q) ) {
        $class = ($class == 'Cmite' ? 'Cnorm' : 'Cmite' );
        $r['class'] = $class;
        if ($r['typ'] == 'foru') {
          $r['kat'] = 'Forum';
          $r['ctime'] = date("d.m.Y",db_result(db_query("SELECT MAX(time) FROM prefix_posts WHERE tid = ".$r['id']),0,0));
          $r['ord'] = forum_get_ordner($r['ctime'],$r['id'],$r['fid']);
          $r['link'] = 'forum-showposts-'.$r['id'];
        } elseif ($r['typ'] == 'news') {
          $r['kat'] = 'News';
          $r['ord']  = 'ord';
          $r['link'] = 'newsextended-'.$r['id'];
          $r['ctime'] =  date('d.m.Y',strtotime($r['time']));
        } elseif ($r['typ'] == 'down') {
          $r['kat'] = 'Downloads';
          $r['ord']  = 'ord';
          $r['link'] = 'downloads-show-'.$r['id'];
          $r['ctime'] = date("d.m.Y",$r['time']);
        }
       $resAr[$r['typ']] = $r;
      }
      ksort($resAr);
      foreach ($resAr as $key => $val) {
         $tpl->set_ar_out($val,2);
      }
      $tpl->out(3);
    }
     
    $design->footer();
     
    ?>


    Dieser Code Sortiert jetzt nach Kategorie lächeln
    MfG OloX
    PHP, JavaScript, CSS
    0 Mitglieder finden den Beitrag gut.
  8. #38
    User Pic
    Lord|Schirmer Administrator
    Registriert seit
    21.03.2007
    Beiträge
    7.634
    Beitragswertungen
    1193 Beitragspunkte
    Hey Danke für die Idee! Habe es mal überdacht, aber hier eine Sortierfunktion nach Zeit zu setzen funktioniert nicht! Das Problem liegt daran, das die Abfragen und Sortierungen schon vorher stattfinden und bei der Gesamtabfrage nur die jeweilige Kategorie angehangen wird!
    rules :: doku :: faq :: linkus
    0 Mitglieder finden den Beitrag gut.
  9. #39
    User Pic
    lordrepha Mitglied
    Registriert seit
    11.03.2006
    Beiträge
    1.362
    Beitragswertungen
    22 Beitragspunkte
    Es wird hier aber nicht die gesamte webseite durchsucht, sondern nur das ws in der datenbank sthet... oder täusche ich mich??? weis jemand einen ansatz um die self pages zu durchsuchen?
    0 Mitglieder finden den Beitrag gut.
  10. #40
    User Pic
    Lord|Schirmer Administrator
    Registriert seit
    21.03.2007
    Beiträge
    7.634
    Beitragswertungen
    1193 Beitragspunkte
    Richtig! Datenbankinhalt der Forum/News/Downloads!
    rules :: doku :: faq :: linkus
    0 Mitglieder finden den Beitrag gut.
  11. #41
    User Pic
    lordrepha Mitglied
    Registriert seit
    11.03.2006
    Beiträge
    1.362
    Beitragswertungen
    22 Beitragspunkte
    ein bisschen irreführend der titel....

    aber nicht destotrotz weiss jemand einen Ansatz wie man selfpages Durchsuchen kann??
    0 Mitglieder finden den Beitrag gut.
  12. #42
    User Pic
    Domme_09 Mitglied
    Registriert seit
    08.07.2008
    Beiträge
    267
    Beitragswertungen
    0 Beitragspunkte
    Dürfte auch kein allzugroßer Aufwand sein. Musst halt die Datei einlesen und dann denn Inhalt in einen String packen und in diesem dann nach dem Suchbegriff suchen! Gibt mit Sicherheit php-Functions dazu!
    www.bvbsupporters-ms.de
    0 Mitglieder finden den Beitrag gut.
  13. #43
    User Pic
    Unknown|User gelöschter User
    Wie wäre es mot Google? Der benutzerdefinierten Suche?
    0 Mitglieder finden den Beitrag gut.
  14. #44
    User Pic
    Ithron Hall Of Fame
    Registriert seit
    21.01.2006
    Beiträge
    2.659
    Beitragswertungen
    24 Beitragspunkte
    Wobei man nicht strikt die php datei einlesen sollte (um den php code nicht mit drin zu haben), sondern lieber einen seitenaufruf imitieren sollte per fopen und dann mit fgets den inhalt der seite einliest und anschließend auswertet..

    Für eine Seite in Ordnung, für zwei wäre es noch mit dem Gewissen vereinbar... alles dadrüber wäre aber total unsinnig... für eine Suchfunktion kommt das eigentlich nicht in Frage.


    für weitere Informationen benutze google: "php html auslesen" oder "php html parsen"


    Zuletzt modifiziert von Ithron am 11.05.2010 - 00:00:36
    ZitatZitat geschrieben von loW

    Ja ich habs gesehen und wenn ichs kostenlos bekomm dann zahl ich doch nix dafür oder?
    0 Mitglieder finden den Beitrag gut.
  15. #45
    User Pic
    lordrepha Mitglied
    Registriert seit
    11.03.2006
    Beiträge
    1.362
    Beitragswertungen
    22 Beitragspunkte
    danke für den schubser in die richtige richtung THX
    0 Mitglieder finden den Beitrag gut.
  16. #46
    User Pic
    blakedj06 gelöschter User
    Hmm also ich bastel ja schon selbst ewig an der Suche und hatte es auch mehrmals vom ansatz her fertig lediglich UNION war das Schlüsselwort was gefehlt hatte.

    Nur leider scheint bei mir irgendwas nicht mit der Datenbank und den Charactersets zu stimmen.

    Ich erhalte in der Suche folgenden Fehler:

    MySQL Error:
    1271 : Illegal mix of collations for operation 'UNION'
    in Query:
    SELECT DISTINCT a.fid as fid, a.name as titel, 'foru' as typ, a.id as id, `time`, c.erst as autor FROM ic1_posts c LEFT JOIN ic1_topics a ON a.id = c.tid LEFT JOIN ic1_forums b ON b.id = a.fid LEFT JOIN ic1_groupusers vg ON vg.uid = 1 AND vg.gid = b.view LEFT JOIN ic1_groupusers rg ON rg.uid = 1 AND rg.gid = b.reply LEFT JOIN ic1_groupusers sg ON sg.uid = 1 AND sg.gid = b.start WHERE (((b.view >= -9 AND b.view <= 0) OR (b.reply >= -9 AND b.reply <= 0) OR (b.start >= -9 AND b.start <= 0)) OR (vg.fid IS NOT NULL OR rg.fid IS NOT NULL OR sg.fid IS NOT NULL OR -9 = -9)) AND (txt LIKE '%clan%' AND 1 = 1) AND (c.erst LIKE '%%' AND 1 = 1) AND (time >= 1252839893) GROUP BY a.id UNION SELECT DISTINCT 0 as fid, news_title as titel, 'news' as typ, news_id as id, news_time as `time`, ic1_user.name as autor FROM ic1_news LEFT JOIN ic1_user ON ic1_news.user_id = ic1_user.id WHERE (news_text LIKE '%clan%' AND 1 = 1) AND (`name` LIKE '%%' AND 1 = 1) AND (news_time >= 1252839893) UNION SELECT DISTINCT 0 as fid, CONCAT( name, ' ', version ) AS titel, 'down' as typ, id, UNIX_TIMESTAMP(`time`) as `time`, creater as autor FROM ic1_downloads WHERE ((`descl` LIKE '%clan%' AND 1 = 1) OR (name LIKE '%clan%' AND 1 = 1)) AND (`creater` LIKE '%%' AND 1 = 1) AND (UNIX_TIMESTAMP(`time`) >= 1252839893) ORDER BY UNIX_TIMESTAMP(`time`) DESC


    Hat da jemand ne Idee?

    Edit: Hatte auch schon versucht per phpmyadmin die Datenbank Sets anzugleichen weil ich beim prefix_news zb latin1_general hatte und die anderen aber latin1_swedish usw.

    Aber bis jetzt brachte nichts nen Erfolg. Hab auch mal versucht 1zu1 die Dateien wie hier im Thread zu ersetzen da ist es das gleiche Problem.):


    Zuletzt modifiziert von blakedj06 am 08.09.2010 - 13:11:39
    0 Mitglieder finden den Beitrag gut.
  17. #47
    User Pic
    blakedj06 gelöschter User
    Danke Problem behoben. ^^
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu HTML, PHP, SQL,...

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten