Avatar billede nickern Nybegynder
24. februar 2007 - 13:56 Der er 17 kommentarer og
1 løsning

Søgemaskine i php

Hejsa

Jeg skal lave en søgefunktion på min side

Men jeg er lidt i tvivl om hvordan jeg skal kode det?

altså jeg har en tabel med en kolonne, hvor der er tekst. Det er blandt alle disse tekster jeg skal have fundet det der blev søgt på.
Så hvis jeg har denne tekst "Vind en tur i tivoli med hangaren.dk" og man så søger på "tivoli" skal dette tilbud komme frem.

Nogen der kan hjælpe mig med dette?
Avatar billede michaeltryl Seniormester
24. februar 2007 - 14:03 #1
$sog_ord ="det ord som søges efter";

$nquery = mysql_query ("SELECT * FROM tabel WHERE tekst LIKE '%$sog_ord%'") or die(mysql_error());
Avatar billede coderdk Praktikant
24. februar 2007 - 14:12 #2
Du kan også bruge full text search:

http://google.com/search?q=mysql+php+full+text+search
Avatar billede nickern Nybegynder
24. februar 2007 - 14:34 #3
Men det der søges efter er jo fra et input felt - hvordan trækker jeg så værdien derfra over i søgningen?
Avatar billede bootup Nybegynder
24. februar 2007 - 15:14 #4
<?php
$sog_ord = $_POST['soegefelt'];
$query = mysql_query ("SELECT * FROM tabel WHERE tekst LIKE '%$sog_ord%'") or die(mysql_error());
?>
<form action="din_side.php" method="post">
<input name="soegefelt" type="text" /> <input type="button" value="Søg" />
</form>
Avatar billede bootup Nybegynder
24. februar 2007 - 15:27 #5
Gik lige lovligt stærkt. Gør sådan her:

<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
include("din_forbindelsesfil.php");

$sog_ord = $_POST['soegefelt'];
$query = mysql_query ("SELECT * FROM tabel WHERE tekst LIKE '%$sog_ord%'") or die(mysql_error());

  while($row = mysql_fetch_assoc($query)) {
    echo "Tilbud: ".$row['tekst']." koster gratis<br>";
  }
}
?>
<form action="din_side.php" method="post">
<input name="soegefelt" type="text" /> <input type="submit" value="Søg" />
</form>
Avatar billede nickern Nybegynder
24. februar 2007 - 15:46 #6
okay - tak...

Kan jeg godt have mit søgefelt på en side? og så kommer tilbudene frem på en anden side?

Bare jeg skal have søgefeltet på forsiden. Men jeg skal have den til at åbne resultaterne på en underside.
Avatar billede bootup Nybegynder
24. februar 2007 - 15:59 #7
Sagtens, så ændre du bare din_side.php og smider php-koden over på siden der skal vise det.

Eksempel:


index.php (eller siden din søgeboks skal være på):

<form action="siden_resultaterne_skal_komme_paa.php" method="post">
<input name="soegefelt" type="text" /> <input type="submit" value="Søg" />
</form>




siden_resultaterne_skal_komme_paa.php (der hvor resultaterne fremkommer):

<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
include("din_forbindelsesfil.php");

$sog_ord = $_POST['soegefelt'];
$query = mysql_query ("SELECT * FROM tabel WHERE tekst LIKE '%$sog_ord%'") or die(mysql_error());

  while($row = mysql_fetch_assoc($query)) {
    echo "Tilbud: ".$row['tekst']." koster gratis<br>";
  }
}
?>
Avatar billede nickern Nybegynder
24. februar 2007 - 16:45 #8
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
include("db.php");

$sog_ord = $_POST['soegefelt'];
$query = mysql_query ("SELECT * FROM spar WHERE link LIKE '%$sog_ord%'") or die(mysql_error());

    if (mysql_num_rows($query) == 0)
    {
        echo "<b>Dit søgeord matchede ikke nogen tilbud. Prøv igen</b><br /><form action=\"sog.php\" method=\"post\">
          <input name=\"soegefelt\" type=\"text\" class=\"formular\" size=\"20\" />
          &nbsp;
          <input name=\"Submit\" type=\"submit\" class=\"formularknap\" value=\"S&Oslash;G\" /></form>";
    }
    else
    {

  while($row = mysql_fetch_assoc($query)) {
    echo "<b><a href=\"http://www.shoplisten.dk/spar.php?id=".$row[id]."\" target=\"_blank\" title=\"".$row['link']."\" style=\"text-decoration:none;color:black;">".$row['link']."</a></b><br><hr style=\"border:dashed black; border-width:1px 0 0; height:0;\"><br />";
  }
}}
?>

Har prøvet at bruge denne fil til den side hvor søgeordet skal findes - men det vil ikke fungere:s

får denne fejlmeddelelse:

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in SOG.php on line 86

Forstår ikke fejlen? Kan I se den?
Avatar billede bootup Nybegynder
24. februar 2007 - 17:06 #9
prøv at ændre
style=\"text-decoration:none;color:black;">".$row['link']."</a></b><br>

med
style=\"text-decoration:none;color:black;>".$row['link']."</a></b><br>
Avatar billede bootup Nybegynder
24. februar 2007 - 17:08 #10
Sorry... du mangler jo bare en backslash

sådan:
style=\"text-decoration:none;color:black;\">".$row['link']."</a></b><br>
Avatar billede nickern Nybegynder
24. februar 2007 - 17:08 #11
jeg har fået styr på det nu:) Den fungerer helt optimalt nu:)

Ligger du lige et svar?
Avatar billede bootup Nybegynder
24. februar 2007 - 17:09 #12
Jooo
Avatar billede nickern Nybegynder
24. februar 2007 - 17:41 #13
Kan du evt. hjælpe mig med en ting mere.

Jeg ønsker at lave en søgemaskine over hele min side.

Men jeg har en del kategorier - som ligger i hver sin tabel.

Så jeg tænkte på om man ikke kunne lave en dropdown boks hvor der så stod en titel, alt efter hvilken titel det bliver, vælger den så selv en tabel.

F.eks. hedder min konkurrencetabel "vind" så står der om man vil søge i "konkurrencer" og så åbner den automatisk "vind" vil man søge i tilbud åbner den automatisk "spar" - kan det lade sig gøre?
Avatar billede bootup Nybegynder
24. februar 2007 - 20:02 #14
<form action="siden_resultaterne_skal_komme_paa.php" method="post">

<select name="tabel">
    <option value="vind">Konkurrencer</option>
    <option value="spar">Tilbud</option>
</select>

<input name="soegefelt" type="text" /> <input type="submit" value="Søg" />
</form>


<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
include("db.php");

$tabel = $_POST['tabel'];
$sog_ord = $_POST['soegefelt'];
$query = mysql_query ("SELECT * FROM $tabel WHERE link LIKE '%$sog_ord%'") or die(mysql_error());

    if (mysql_num_rows($query) == 0)
    {
        echo "<b>Dit søgeord matchede ikke nogen tilbud. Prøv igen</b><br /><form action=\"sog.php\" method=\"post\">
          <input name=\"soegefelt\" type=\"text\" class=\"formular\" size=\"20\" />
          &nbsp;
          <input name=\"Submit\" type=\"submit\" class=\"formularknap\" value=\"S&Oslash;G\" /></form>";
    }
    else
    {

  while($row = mysql_fetch_assoc($query)) {
    echo "<b><a href=\"http://www.shoplisten.dk/spar.php?id=".$row[id]."\" target=\"_blank\" title=\"".$row['link']."\" style=\"text-decoration:none;color:black;\">".$row['link']."</a></b><br><hr style=\"border:dashed black; border-width:1px 0 0; height:0;\"><br />";
  }
}}
?>


Du kan selv tilføje flere tabeller, ved at ændre det der er imellem <select></select>
Avatar billede nickern Nybegynder
24. februar 2007 - 20:18 #15
Ja - den er jeg helt med på:)

Jeg har endnu et spørgsmål.

Mine sparetips - når man nu skal søge i dem, har jeg 3 felter med tekst - hvordan får jeg den til at søge i alle sammen på en gang, er det bare sådan:

$query = mysql_query ("SELECT * FROM $tabel WHERE link, titel, description LIKE '%$sog_ord%'") or die(mysql_error());

eller hvad?
Avatar billede bootup Nybegynder
24. februar 2007 - 20:49 #16
$query = mysql_query ("SELECT * FROM $tabel WHERE link OR titel OR description LIKE '%$sog_ord%'") or die(mysql_error());

Skulle jeg mene
Avatar billede coderdk Praktikant
24. februar 2007 - 21:09 #17
$query = mysql_query ("SELECT * FROM $tabel WHERE link LIKE '%$sog_ord%' OR titel LIKE '%$sog_ord%' OR description LIKE '%$sog_ord%'") or die(mysql_error());
Avatar billede bootup Nybegynder
24. februar 2007 - 21:48 #18
Takker coderdk :)
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