Avatar billede renefred Nybegynder
02. februar 2006 - 21:14 Der er 21 kommentarer og
1 løsning

Søgning på lokale bogstaver i en PHP / MySQL app

Jeg har installeret FAQ Manager Pro 3.0 (http://www.faq-manager-pro.com/)
Firmaet bag er nærmest ikke eksisterende og support har været forgæves, så derfor dette spørgsmål.

Når man søger på et ord som ikke indeholder lokale bogstaver (æøå) så kommer spørgsmål og svar fint frem.

Men hvis man søger på et ord som indeholder æ, ø eller å, så kommer spørgsmål og svar kun delvis frem.

Prøv selv på:

www.renefrederiksen.dk/SE

Søg først på: "uden" Bemærk resultatet med både spørgsmål og svar.
Søg derefter på: "søger" Bemærk at spørgsmål og svar ikke vises og hvis man går ind under det viste, så vises spørgsmålet, men svaret vises ikke.

Jeg er selvfølgelig interesseret i, at søgning hvori der indgår lokal bogstaver, vises på samme måde som hvor der ikke indgår lokale bogstaver.

Lad mig vide hvilke andre detaljer/filer der skal bruges for at løse dette.
Avatar billede jakobdo Ekspert
03. februar 2006 - 08:34 #1
Det kommer vel lidt an på hvordan data præsenteres af dit system.
Og hvordan koden er sat sammen.
Hvad hvis du søger på SØGER direkte i phpmyadmin, får du så de rigtige resultater?
Det kan være noget regexp som fejler.
Avatar billede renefred Nybegynder
03. februar 2006 - 09:45 #2
Jeg tror søgningen i phpmyadmin er OK. Der kommer 2 resultater frem på "søger". En i faqadminlog (hvor jeg går ud fra spørgsmålene administreres) og en i faqdata hvor spørgsmålene opbevares.
Jeg er ingen expert i phpmyadmin så jeg kan ikke sige om det er 100% rigitg, men der er et positivt resultat på søgningen.

Jeg har hørt regexp omtalt før, men den ligger uden for min begrebsverden. Jeg kan ikke finde regexp i FAQ Manager filerne.
Kan jeg poste en stump kode eller andet, der vil hjælpe mere på dette?
Avatar billede jakobdo Ekspert
03. februar 2006 - 21:38 #3
Prøv at post koden som bliver brugt til at udtrække resultatet fra databasen.
Avatar billede renefred Nybegynder
04. februar 2006 - 00:07 #4
Her er mine bud på hvilke filer det kan være:

search.php

<?php
Tracking("searchpage",0);
if (isset($_REQUEST["suchbegriff"]) || isset($_GET["search"])) {
    if (isset($_REQUEST["suchbegriff"])) {
        $suchbegriff = $_REQUEST["suchbegriff"];
        }

    if (isset($_REQUEST["search"])) {
        $suchbegriff = $_REQUEST["search"];
        }

    $printResult = searchEngine($suchbegriff);
    }

else {
    $printResult = $help_search;
    }

$tpl->processTemplate ("writeContent", array(
                "msgSearch" => "Search",
                "writeSendAdress" => $_SERVER["PHP_SELF"]."?".$sids."action=search",
                "msgSearchWord" => "Keyword",
                "printResult" => $printResult
                ));

$tpl->includeTemplate("writeContent", "index");

?>

database.php
<?php
/******************************************************************************
* File:                database.php
* Description:            database class for MySQL
******************************************************************************/

class db_mysql {
   
    var $conn = false;
    var $queries = 0;
    var $sqllog = "";
   
    // connect to server and select database
    function &connect ($host, $user, $passwd, $db) {
        $this->conn = @mysql_connect($host,$user,$passwd);
        if (empty($db) OR $this->conn == false) {
            print "<p align=\"center\">The connection to the MySQL server could not be established.</p>\n";
            print "<p align=\"center\">The error message of the MySQL server:<br />".mysql_error()."</p>\n";
            return false;
            }
        return @mysql_select_db($db, $this->conn);
        }
    // send a query
    function &query ($query) {
        $this->sqllog .= $query."<br>\n";
        $this->queries++;
        $ret = @mysql_query($query, $this->conn);
        return $ret;
        }
    // fetch a result row as an object
    function &fetch_object ($result) {
        $ret = @mysql_fetch_object($result);
        return $ret;
        }
    // fetch a result row
    function &fetch_row ($result) {
        $ret = @mysql_fetch_row($result);
        return $ret;
        }
    // fetch a row as an array
    function &fetch_assoc ($result) {
        $ret = @mysql_fetch_assoc($result);
        return $ret;
        }
    // fetch a result row
    function &num_rows ($result) {
        $ret = @mysql_num_rows($result);
        return $ret;
        }
    // get the last id
    function &insert_id () {
        $ret = @mysql_insert_id($this->conn);
        return $ret;
        }
    // prints the count of queries
    function &countqueries() {
        $ret = $this->queries;
        return $ret;
        }
    // prints the count of queries
    function &sqllog() {
        $ret = $this->sqllog;
        return $ret;
        }
    // closes a connection
    function &dbclose() {
        $ret = @mysql_close($this->conn);
        return $ret;
        }
    }
?>
Avatar billede jakobdo Ekspert
04. februar 2006 - 08:03 #5
Prøv at post koden/funktionen: searchEngine()
Avatar billede renefred Nybegynder
04. februar 2006 - 11:06 #6
Inde i filen function.php har jeg fundet denne stump kode om fuld-text søgning. Håber vi nærmer os:
/******************************************************************************

* Funktionen für die Volltextsuche

******************************************************************************/



/*

* Suchfunktion für die Volltextsuche | @@ Thorsten - 2002-09-16

* Last Update: @@ Thorsten, 2004-03-24

*/

function searchEngine($begriff)

{

    global $db, $sids,  $sqltblpre;

   

    $categories = getCategories();

    $seite = "";

    $output = "";

   

    if (isset($_REQUEST["seite"])) {

        $seite = $_REQUEST["seite"];

        }

    if (isset($_REQUEST["search"])) {

        $begriff = $_REQUEST["search"];

        }

    $begriff = trim($begriff);

   



  $words=explode(' ',$begriff);

  $query="SELECT id, lang, rubrik, thema, content 

            from ".$sqltblpre."faqdata WHERE (";     

  foreach($words as $v)

  {

  if ($v) $sub.="(.*$v.*)|";

  }

  $sub=substr($sub,0,strlen($sub)-1);

  $query.="thema REGEXP \"$sub\" OR ";

  $query.="content REGEXP \"$sub\" OR ";

  $query.="keywords REGEXP \"$sub\"  ";

  $query.=')';

  /*  if (mysql_check("4.0.1") == FALSE) {

        // Search with MySQL 3.23.23+

          $query = "SELECT id, lang, rubrik, thema, content FROM ".$sqltblpre."faqdata WHERE MATCH (thema,content,keywords) AGAINST ('".$begriff."') AND active = 'yes'";

        }

    else {

        // Search with MySQL 4.0.1+

      $query = "SELECT id, lang, rubrik, thema, content FROM ".$sqltblpre."faqdata WHERE MATCH (thema,content,keywords) AGAINST ('".str_replace(" ", "* ", trim($begriff))."*' IN BOOLEAN MODE) AND active = 'yes'";

        }

       

    */

    $result = $db->query($query);

    $num = $db->num_rows($result);

   

    $seiten = ceil($num / 10);

    if (!$seite) {

        $seite = 1;

        }

    $y = $seite * 10;

    $x = $y - 10;

    if ($y > $num) {

        $y = $num;

        }

   

    $result = $db->query($query." LIMIT ".$x.",10");

    $output = "<table cellSpacing=\"0\" cellPadding=\"4\" width=\"100%\" bgColor=\"#ffffff\" border=\"0\" >\n";

    $output.= "<tr><td class=\"af3_title\" >";

    $output.= "Search Results for \"".$begriff."\"";

    $output.= "</td></tr>\n";

    $output.= "<tr><td >";

    $output.= "There are ".$num." questions found  for your query:";

    $output.= "</td></tr></table>\n";

   

    if ($num > 0) {

       

        if ($seiten > 1) {

            $output .= "<p><b>Page ".$seite." from ".$seiten."Pages</b></p>";

            }

        $output .= "<ol>\n";

        for ($i = $x; $i < $y ; $i++) {

            list($id, $lang, $rubrik, $thema, $content) = $db->fetch_row($result);

            $rubriktext = $categories[$rubrik];

            $thema = substr(safeHTML($thema), 0, 45);

           

            $content = strip_tags(stripslashes($content));

               

            $content =  substr($content, 0, 80);

            $thema = preg_replace('/(((href|src)="[^"]*)?'.$begriff.'(?(1).*"))/umies', "highlight_no_links(\"\\1\")", $thema);

            $content = preg_replace('/(((href|src)="[^"]*)?'.$begriff.'(?(1).*"))/umies', "highlight_no_links(\"\\1\")", $content);

            $output .= "<li><b>".$rubriktext."</b>: <a class=\"af3_links\" href=\"".$_SERVER["PHP_SELF"]."?".$sids."action=article&amp;cat_id=".$rubrik."&amp;id=".$id."&amp;lang=".$lang."&amp;highlight=".$begriff."\">".stripslashes($thema)."...</a><br><div style=\"font-size: 10px;\"><b>Content: </b> ".stripslashes($content)."...</div><br></li>\n";

            }

        $output .= "</ol>\n";

        }

    else {

        $output = "<p>No entries available.</p>";

        }

   

    if ($num > 10) {

        $output .= "<p align=\"center\"><b>";

        $vor = $seite - 1;

        $next = $seite + 1;

        if ($vor != 0) {

            $output .= "[ <a class=\"af3_links\" href=\"".$_SERVER["PHP_SELF"]."?".$sids."action=search&amp;&search=".$begriff."&amp;seite=".$vor."\">Previous</a> ]";

            }

        $output .= " ";

        if ($next <= $seiten) {

            $output .= "[ <a class=\"af3_links\" href=\"".$_SERVER["PHP_SELF"]."?".$sids."action=search&amp;search=".$begriff."&amp;seite=".$next."\">Next</a> ]";

            }

        $output .= "</b></p>";

        }

    return $output;

}

/******************************************************************************

* Funktionen für die Volltextsuche

******************************************************************************/



/*

* Suchfunktion für die Volltextsuche | @@ Thorsten - 2002-09-16

* Last Update: @@ Thorsten, 2004-03-24

*/

function search_Query($begriff)

{   

  $begriff = trim($begriff);

  $words=explode(' ',$begriff);

  $query=" AND (";     

  foreach($words as $v)

  {

  if ($v) $sub.="(.*$v.*)|";

  }

  $sub=substr($sub,0,strlen($sub)-1);

  $query.="thema REGEXP \"$sub\" OR ";

  $query.="content REGEXP \"$sub\" OR ";

  $query.="keywords REGEXP \"$sub\"  ";

  $query.=')';

    return $query;

}

/*

* Funktion für das Herausfiltern von highlighting HTML aus URLs und Images | @@ Matthias Sommerfeld, 2003-07-14

* Last Update: @@ Thorsten, 2003-11-11

*/

function highlight_no_links($string = "")

{

    if ("" == $string) {

        return "";

        }

    if ("href=" == substr($string, 0, 5) || "src=" == substr($string, 0, 4)) {

        return $string;

    }

    else {

        return "<span style=\"color: #FF0000; \">".$string."</span>";

    }

}
Avatar billede jakobdo Ekspert
04. februar 2006 - 11:11 #7
Der er nævnt: REGEXP Kan du nogen steder finde en som DEFINE eller lign?
Avatar billede renefred Nybegynder
05. februar 2006 - 21:37 #8
Det kan jeg ikke finde nogen steder. Ville det hjælpe hvis jeg lagde filerne til dig et sted så du selv kunne kigge dem igennem?
Avatar billede jakobdo Ekspert
06. februar 2006 - 10:50 #9
Du kan da prøve!
Avatar billede renefred Nybegynder
07. februar 2006 - 23:06 #10
Avatar billede jakobdo Ekspert
08. februar 2006 - 18:43 #11
Prøv i index.php og ret:
define("DEBUG", FALSE);
til:
define("DEBUG", TRUE);
og lav søgningen igen.
Måske vi kan få noget debug info?
Avatar billede renefred Nybegynder
08. februar 2006 - 19:03 #12
Så er der debug info når man søger.
Avatar billede jakobdo Ekspert
09. februar 2006 - 06:59 #13
Det har noget med denne kode at gøre, skal nok kigge på det senere:

for ($i = $x; $i < $y ; $i++) {
            list($id, $lang, $rubrik, $thema, $content) = $db->fetch_row($result);
            $rubriktext = $categories[$rubrik];
            $thema = substr(safeHTML($thema), 0, 45);
           
            $content = strip_tags(stripslashes($content));
               
            $content =  substr($content, 0, 80);
            $thema = preg_replace('/(((href|src)="[^"]*)?'.$begriff.'(?(1).*"))/umies', "highlight_no_links(\"\\1\")", $thema);
            $content = preg_replace('/(((href|src)="[^"]*)?'.$begriff.'(?(1).*"))/umies', "highlight_no_links(\"\\1\")", $content);
            $output .= "<li><b>".$rubriktext."</b>: <a class=\"af3_links\" href=\"".$_SERVER["PHP_SELF"]."?".$sids."action=article&amp;cat_id=".$rubrik."&amp;id=".$id."&amp;lang=".$lang."&amp;highlight=".$begriff."\">".stripslashes($thema)."...</a><br><div style=\"font-size: 10px;\"><b>Content: </b> ".stripslashes($content)."...</div><br></li>\n";
            }
Avatar billede jakobdo Ekspert
09. februar 2006 - 18:46 #14
Jeg trr fejlen ligger i disse linier:

$thema = preg_replace('/(((href|src)="[^"]*)?'.$begriff.'(?(1).*"))/umies', "highlight_no_links(\"\\1\")", $thema);
            $content = preg_replace('/(((href|src)="[^"]*)?'.$begriff.'(?(1).*"))/umies', "highlight_no_links(\"\\1\")", $content);
Avatar billede renefred Nybegynder
09. februar 2006 - 20:28 #15
Det er det rene volapyk for mig, så jeg håber du kan finde en løsning på det...
Avatar billede jakobdo Ekspert
09. februar 2006 - 20:40 #16
Prøv at kontakt mig på MSN: jakobdo (at) hotmail (dot) com
Avatar billede renefred Nybegynder
10. februar 2006 - 15:07 #17
Jeg har fundet en løsning på problemet. Problemet er ikke fixet i dette FAQ system, men de 200 point går til dig for indsatsen.
Avatar billede renefred Nybegynder
10. februar 2006 - 15:08 #18
Jeg har fundet en løsning på problemet. Problemet er ikke fixet i dette FAQ system, men de 200 point går til dig for indsatsen.
Avatar billede jakobdo Ekspert
10. februar 2006 - 15:15 #19
Hvordan løste du problemet?
Du svarede ikke rigtigt tilbage via MSN i går?
Avatar billede jakobdo Ekspert
10. februar 2006 - 15:16 #20
Og et svar!
Avatar billede renefred Nybegynder
10. februar 2006 - 20:11 #21
Jeg kunne ikke rigtig se hvad det skulle hjælpe du gik via min PC for at løse problemet. Du havde de samme filer som mig.
Jeg har fundet et næsten tilsvarende FAQ system, så jeg giver op på FAQ manager.
Avatar billede jakobdo Ekspert
11. februar 2006 - 11:38 #22
Det var nu mere fordi jeg ville have debugget lidt i koden og set hvad den gjorde!
For jeg var ret sikker på at det var i de to linier tidligere nævnt, den fejlede...

Men jeg takker for point!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester