Avatar billede nyst Nybegynder
06. maj 2009 - 10:35 Der er 13 kommentarer og
1 løsning

søgefunktion med tilbagemelding

Hej, jeg har en almindelige søgefuntion der søger i databse.

Denne skal udvides til at kunne give tilbagemeldning hvilke ord der søges på.

Er der nogen der ved hvordan dette gøres nemmest.

Tænker den måske skal kunne vise selve de ord der søges på men rapport herom måske hvornår og at den sender rapport hver måned eller man selv beder om et udtræ.

Nogle gode ideer - evt. simpelt lille færdigt script.

PS. den skal kunne søge i kategorier.

:-)
Avatar billede tfswebguy Nybegynder
06. maj 2009 - 12:16 #1
Du bliver nødt til at være mere præcis.
Når der bliver søgt på et (Eller flere) ord, skal disse søgeord så gemmes, så man kan få en oversigt over hvilke søgeord der bliver benyttet?
Avatar billede nyst Nybegynder
06. maj 2009 - 12:31 #2
Hej,

jeg skal prøve

Søgefelt:

<form class="search" method="post"  action="search/result.php">
<input type="text" name="search" class="search">
<input type="submit" class="formsoeg" value="Søg">
</form>

-----------------------------------------

Søgekoden:

<?php
open_db();
if(! function_exists('stripos') ) {
    function stripos($haystack, $needle, $offset=0) {
        return strpos(strtolower($haystack), strtolower($needle), $offset);
    }
}   
if($search){   
    mysql_select_db("$db");
    $noResult = "Din søgning gav intet resultat.<br><br>Prøv eventuelt igen med samme ord skrevet på en anden måde.<br><br>";
    $query = mysql_query("SELECT * FROM sider WHERE ((indhold LIKE '%".addslashes($search)."%') OR (overskrift LIKE '%".addslashes($search)."%') OR (ord LIKE '%".addslashes($search)."%')) AND godkendt='ja' ORDER BY afdeling");
    echo mysql_num_rows($query) . " resultat/er blev fundet og vist efter afdeling:<br><br>";
    while($row = mysql_fetch_array($query)){
        $indeks = $row["indeks"];
        $afdeling = $row["afdeling"];
        $overskrift = $row["overskrift"];
        $filnavn = $row["filnavn"];
        $indhold = $row["indhold"];
        $indhold = strip_tags($indhold);
        echo ("<b>$afdeling</b><br>");
        echo ("<a href=/$filnavn>&raquo;&nbsp;$overskrift</a><br>");   
$display = 80;
$pos = stripos($indhold,$search);
$beginpos = $pos - $display;
$endpos = $pos + $display + strlen($search);
if( $beginpos < 0 )
    $beginpos = 0;
if( $beginpos == 0 )
    $pre = '';
else
    $pre = '...';
if( $endpos >= strlen($indhold) )
    $post = '';
else
    $post = '...';
$indhold =  substr($indhold,$beginpos,($endpos-$beginpos+strlen($search)));
$search_preg = preg_quote($search);
$indhold = preg_replace("/($search_preg)/im",'<b>\1</b>',$indhold);
print $pre.$indhold.$post;
        echo ("<br><br>");
    }
if (!$indeks){
        print ("$noResult");
    }
close_db();
}
?>

----------------------------------------------

det giver så søgeresultatet.

-----------------------------------------------

Det jeg gerne vil er at den registerer hvilke ord der søges på.

Herefter feks en gang om måneden eller ved fremkald viser den dato der er søgt for et ord.

Evt. bare kunne give feedback om de ord der er søgt på for en given periode.

Håber det er klart nok ellers skriv endelig.

:-)
Avatar billede tfswebguy Nybegynder
06. maj 2009 - 12:59 #3
Jamen så laver du da bare en ny tabel, hvori der lægges en række med søgeord og søgetidspunkt ( time() )
Så kan du altid lave noget script der viser søgeord for den periode du ønsker
Avatar billede nyst Nybegynder
06. maj 2009 - 13:07 #4
Hej igen,

jo en ny tabel er ikke noget problem, men hvilke koder 'putter' du så ind i eksisterende søgekode ???

:-)
Avatar billede nyst Nybegynder
06. maj 2009 - 13:17 #5
kan og vil du hælpe med det - giver gerne 200 points *ss*
Avatar billede tfswebguy Nybegynder
06. maj 2009 - 13:20 #6
mysql_query("INSERT INTO searchwords_used (searchwords,posted) VALUES('". addslashes($_POST['search'])."','". time() ."')");

Bare lige et eks..

OG OG OG.. Husk at bruge $_POST['string'].
Det er altid den bedste løsning
Avatar billede nyst Nybegynder
06. maj 2009 - 13:28 #7
øh sætter du den ind før

    mysql_select_db("$db");

altså sådan her:

}   
if($search){
    mysql_query("INSERT INTO searchwords_used (searchwords,posted) VALUES('". addslashes($_POST['search'])."','". time() ."')");

    mysql_select_db("$db");
    osv osv
Avatar billede tfswebguy Nybegynder
06. maj 2009 - 14:07 #8
det er lige meget. Det skal bare være i din search funktion.

Og ret det lige til, så det bliver lavet ordentligt det script der ;)

if($_POST['search']){ // HUSK AT ANGIVE MED $_POST['search']
...
}
Avatar billede nyst Nybegynder
06. maj 2009 - 14:48 #9
Hej igen

er det den rette vej?

---------------------------

<?php
open_db();
if(! function_exists('stripos') ) {
    function stripos($haystack, $needle, $offset=0) {
        return strpos(strtolower($haystack), strtolower($needle), $offset);
    }
}   
if($_POST['search']){
    mysql_query("INSERT INTO searchwords_used (searchwords,posted) VALUES('". addslashes($_POST['search'])."','". time() ."')");
    mysql_select_db("$db");
    $noResult = "Din søgning gav intet resultat.<br><br>Prøv eventuelt igen med samme ord skrevet på en anden måde.<br><br>";
    $query = mysql_query("SELECT * FROM sider WHERE ((indhold LIKE '%".addslashes($_POST['search'])."%') OR (overskrift LIKE '%".addslashes($_POST['search'])."%') OR (ord LIKE '%".addslashes($_POST['search'])."%')) AND godkendt='ja' ORDER BY afdeling");
    echo mysql_num_rows($query) . " resultat/er blev fundet og vist efter afdeling:<br><br>";
    while($row = mysql_fetch_array($query)){
        $indeks = $row["indeks"];
        $afdeling = $row["afdeling"];
        $overskrift = $row["overskrift"];
        $filnavn = $row["filnavn"];
        $indhold = $row["indhold"];
        $indhold = strip_tags($indhold);
        echo ("<b>$afdeling</b><br>");
        echo ("<a href=/$filnavn>&raquo;&nbsp;$overskrift</a><br>");   
$display = 80;
$pos = stripos($indhold,$_POST['search']);
$beginpos = $pos - $display;
$endpos = $pos + $display + strlen($_POST['search']);
if( $beginpos < 0 )
    $beginpos = 0;
if( $beginpos == 0 )
    $pre = '';
else
    $pre = '...';
if( $endpos >= strlen($indhold) )
    $post = '';
else
    $post = '...';
$indhold =  substr($indhold,$beginpos,($endpos-$beginpos+strlen($_POST['search'])));
$_POST['search']_preg = preg_quote($_POST['search']);
$indhold = preg_replace("/($_POST['search']_preg)/im",'<b>\1</b>',$indhold);
print $pre.$indhold.$post;
        echo ("<br><br>");
    }
if (!$indeks){
        print ("$noResult");
    }
close_db();
}
?>

----------------------------------------

:-)
Avatar billede tfswebguy Nybegynder
11. maj 2009 - 12:23 #10
Ser meget fornuftigt ud. Har du lavet tabellen?
Avatar billede tfswebguy Nybegynder
18. maj 2009 - 09:43 #11
er du der endnu?
Avatar billede nyst Nybegynder
09. oktober 2009 - 11:11 #12
Hej og undskyld jeg har været væk - ved ikke om du stadig er der og vil hjælpe.

Først vil jeg gerne have den gamle til at virke med $_POST['search']så den er uptodate også i PHP5

men det giver

Parse error: parse error, unexpected T_STRING
i ca denne linie
$_POST['search']_preg = preg_quote($_POST['search']);

har du en ide? :-)
Avatar billede nyst Nybegynder
12. oktober 2009 - 10:06 #13
Jeg har ændret denne:

$_POST['search']_preg = preg_quote($_POST['search']);
$indhold = preg_replace("/($_POST['search']_preg)/im",'<b>\1</b>',$indhold);


til

$search_preg = preg_quote($_POST['search']);
$indhold = preg_replace("/($search_preg)/im",'<b>\1</b>',$indhold);

hvilket gør den virker i både php 4 og 5

:-)
Avatar billede nyst Nybegynder
05. januar 2010 - 12:24 #14
lukker denne da ingen svar :-)
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