02. februar 2006 - 21:14Der 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.
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.
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.
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?
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; } } ?>
Inde i filen function.php har jeg fundet denne stump kode om fuld-text søgning. Håber vi nærmer os: /******************************************************************************
* 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'";
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.
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!
Synes godt om
Ny brugerNybegynder
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.