Avatar billede tobiassen Nybegynder
02. februar 2008 - 11:45 Der er 17 kommentarer og
1 løsning

Søgefunktion

Hey eksperter

Jeg vil gerne have en søgefunktion på min side, jeg køre php med en MySQL database (klientversion: 5.0.22)

Det som der skal gennemsøges er tabelen nedenfor, hvor den så ikke skal fange det der står i id, img, hoejde og bredde.

ved ikke hvordan resultatet skal komme ud, men jeg forestiller mig noget lignende sådan her:

en titel
en horisontal linie ( hr )
og en tekst

prikken over i'et ville så være hvis det ord man have søgt efter ville blive markeret i den tekst der kommer ud.

hvad skal der til og hvordan gør man ?


CREATE TABLE `allround` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`type` VARCHAR( 255 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL ,
`headline` VARCHAR( 255 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL ,
`navn` VARCHAR( 255 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL ,
`adresse` VARCHAR( 255 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL ,
`postnr` TEXT( 4 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL ,
`town` VARCHAR( 255 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL ,
`mail` VARCHAR( 255 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL ,
`website` VARCHAR( 255 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL ,
`telefon` VARCHAR( 255 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL ,
`text` TEXT CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL ,
`img` VARCHAR( 255 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL ,
`bredde` VARCHAR( 255 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL ,
`hoejde` VARCHAR( 255 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL
) ENGINE = innodb;
Avatar billede themaster Nybegynder
03. februar 2008 - 21:01 #1
ved ikke om det er det her du søgte..

<?php

// henter søgestrengen med _POST
$string = $_POST['string'];

// connect til databasen. husk at rette userid, pwd osv...!
mysql_connect("localhost", "admin", "1admin") or die(mysql_error());
mysql_select_db("test") or die(mysql_error());

// sql-query

$sql = "SELECT * FROM allround WHERE
                type  LIKE '%".mysql_escape_string($string)."%' OR
                headline  LIKE '%".mysql_escape_string($string)."%' OR
                navn  LIKE '%".mysql_escape_string($string)."%' OR
                adresse  LIKE '%".mysql_escape_string($string)."%' OR
                postnr LIKE '%".mysql_escape_string($string)."%' OR
                town  LIKE '%".mysql_escape_string($string)."%' OR
                mail  LIKE '%".mysql_escape_string($string)."%' OR
                website  LIKE '%".mysql_escape_string($string)."%' OR
                telefone  LIKE '%".mysql_escape_string($string)."%' OR
                text  LIKE '%".mysql_escape_string($string)."%'";
               
$result = mysql_query($sql) or die(mysql_error());

//udskriver søgeresultatet
while($row = mysql_fetch_array( $result )) {
    $output = "
          ".$row['headline']."
          <br />
          <hr />
          ".$row['text']."
          <br />
          ";
        //markerer søgestrengen med rød.
        $output = str_replace($string, "<div style=\"background-color: red;\">".$string."</b>", $output);
    print($output);
}

// sletter variable
unset($string);
unset($output);
?>

Du kan selvfølgelig udskifte html'en..

//themaster
Avatar billede themaster Nybegynder
03. februar 2008 - 21:48 #2
ups..

  $output = str_replace($string, "<div style=\"background-color: red;\">".$string."</b>", $output);

skulle være:

  $output = str_replace($string, "<div style=\"background-color: red;\">".$string."</div>", $output);

//themaster
Avatar billede tobiassen Nybegynder
03. februar 2008 - 22:01 #3
det virker nogenlunde :)

men baggrunden bliver ikke rød ?

se selv www.easy-websolutions.dk

og hvordan kan man gøre sådan så hvis den ikke finder noget skal den skrive noget med at der ikke var noget resultat på det søgte ord
Avatar billede tobiassen Nybegynder
03. februar 2008 - 22:06 #4
eller jo nogle gange bliver ordet markeret med rød, men ikke altid..

og markeringen fylder også en hel linie, ka man ik få den til at markere kun lige ordet?

du kan selv li tjekke det på den side jeg skrev før :)
Avatar billede tobiassen Nybegynder
03. februar 2008 - 22:19 #5
har fundet ud af det med markeringen fylder en hel linie, gav den bare en span i stedet.

men har ik fundet ud at det andet endnu,

også ville jeg os gerne have lavet så outputtet kunne tage den overskrift og det billede med som tilhører teksten. har prøvet med det her, men det virker ik helt efter hensigten:

    $output = "
          <b>".$row['type']."</b>
          <hr />";

if ($raekke['img'] == "")
{}
else
{

if ($raekke['bredde'] == "")
{

        $output = "<span class='float_right'><img src='/upload/".$raekke['img']."' border='0' alt='billede'></span>";
}
else
{
           
        $output = "<span class='float_right'><img src='/upload/".$raekke['img']."' border='0' alt='billede' width='".$raekke['bredde']."' height='".$raekke['hoejde']."'></span>";
}
}

if ($raekke['headline'] == "")
{}
else
{

$output = "<b>".$raekke['headline']."</b><a name='".$raekke['headline']."'></a><br /><br />";

}
$output = "".$row['text']."
          <br /><br />
          ";
        //markerer søgestrengen med rød.
        $output = str_replace($string, "<span style=\"background-color: #69bc46;\">".$string."</span>", $output);
    print($output);
}

// sletter variable
unset($string);
unset($output);

?>
Avatar billede themaster Nybegynder
03. februar 2008 - 22:46 #6
udskift det her:

//udskriver søgeresultatet
if (mysql_num_rows($result)!=0) {
    while($row = mysql_fetch_array( $result )) {
   
        $output = "
                                ".$row['headline']."
                                <br />
                                ";
        if ($row['img']!="") {
            if ($row['bredde']!="")
                $output .= "<span class='float_right'><img src='/upload/".$row['img']."' border='0' alt='billede'></span>";
            else
                $output .= "<span class='float_right'><img src='/upload/".$row['img']."' border='0' alt='billede' width='".$row['bredde']."' height='".$row['hoejde']."'></span>";
        }
   
        if ($row['headline']!="") {
            $output .= "<b>".$row['headline']."</b><a name='".$row['headline']."'></a><br /><br />";
   
        $output .= "                           
                                <hr />
                                ".$row['text']."
                                <br />
                                ";
        //markerer søgestrengen med rød.
        $output = str_replace($string, "<div style=\"background-color: red;\">".$string."</b>", $output);
        print($output);
    }
} else {
    $output = "<div>Din søgning på '<b>".$string."</b>' gav desværre ikke noget resultat.</div>";
    print($output);
}
Avatar billede tobiassen Nybegynder
04. februar 2008 - 11:17 #7
nu siger den bare:

Parse error: syntax error, unexpected T_ELSE in D:\Domains\easy-websolutions.dk\wwwroot\soeg.php on line 205
Avatar billede themaster Nybegynder
04. februar 2008 - 13:46 #8
ja... sorry.. min fejl.
ret:
if ($row['headline']!="") {
til:
if ($row['headline']!="")

//themaster
Avatar billede tobiassen Nybegynder
04. februar 2008 - 15:38 #9
nu siger den :


Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in D:\Domains\easy-websolutions.dk\wwwroot\soeg.php on line 178
Avatar billede tobiassen Nybegynder
04. februar 2008 - 15:53 #10
og den finder heller ik noget, lige meget hvad jeg søger på ?
Avatar billede tobiassen Nybegynder
04. februar 2008 - 16:00 #11
det var min fejl, havde glemt:

$result = mysql_query($sql) or die(mysql_error());

men bilederne kommer ik rigtigt ud, se selv:

www.easy-websolutions.dk
Avatar billede tobiassen Nybegynder
04. februar 2008 - 16:07 #12
har fundet ud af hvorfor den ik altid finder ordet, det fordi den gør forskel på store og små bogstaver, kan man gøre så den ik gør det ?

og så når den finder et ord, udskriver den alle posterne der har den type, f.eks. i referencer, der udskriver den begge referencer,. kan man ik gøre så den kun udskriver den hvor søgeordet er funder..

de er nemlig langt ind som to forskellige i databasen
Avatar billede tobiassen Nybegynder
04. februar 2008 - 19:17 #13
eller den finder det selv om det er med store bogstaver, men den markere det ikke ?
Avatar billede tobiassen Nybegynder
04. februar 2008 - 19:18 #14
men forresten, har fået rettet den til nu og det hele virker, ud over det med store bogstaver
Avatar billede tobiassen Nybegynder
05. februar 2008 - 16:29 #15
kan du gøre så den ik laver forskel på store og små bogstaver ? men så den i stedet bare fanger ordet lige meget hvad ?
Avatar billede tobiassen Nybegynder
06. februar 2008 - 18:33 #16
kan du gøre så den ik laver forskel på store og små bogstaver ? men så den i stedet bare fanger ordet lige meget hvad ?
Avatar billede tobiassen Nybegynder
26. februar 2008 - 18:10 #17
??
Avatar billede tobiassen Nybegynder
18. august 2008 - 11:21 #18
lukker
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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