Avatar billede backside Nybegynder
20. oktober 2004 - 08:49 Der er 12 kommentarer og
2 løsninger

Søg i database

Flyttet fra: http://www.eksperten.dk/spm/552159

Table 'content'
felterne:

  `id` int(11) NOT NULL auto_increment,
  `title` varchar(255) NOT NULL default '',
  `last_updated` timestamp(14) NOT NULL,
  `posting_time` timestamp(14) NOT NULL,
  `text` text NOT NULL,
  `keywords` text NOT NULL,
  `position` tinyint(4) NOT NULL default '0',
  `status` tinyint(4) default NULL,

Eks.:

INSERT INTO `content` VALUES (15, 'Start', 20041018235540, 20041018235435, 'indhold af side 1', 'startside keywords forside index', 0, 1);
INSERT INTO `content` VALUES (16, 'side 2', 20041019000621, 20041019000359, 'indhold af side 2', 'keywords for side 2', 0, 1);
INSERT INTO `content` VALUES (17, 'side 3', 20041019000623, 20041019000425, 'indhold af side 3', 'bla bla', 0, 1);
INSERT INTO `content` VALUES (18, 'side 4', 20041019000624, 20041019000452, 'indhold af side 4', 'bla bla', 0, 1);

osv....

Siderne vises som page.php?id=15

Hvis jeg søger efter "forside" skal der vises et link til page.php?id=15 i den iframe hvor indholdet af 'text' vises. (ud fra 'keywords')
Hvis jeg søger efter "bla" skal der vises link til page.php?id=17 og page.php?id=18

Jeg vil på samme måde kunne søge i 'text' feltet, enten ved at vælge indhold, keywords, eller ved at vælge begge.
Altså evt. 3 søgemuligheder. (med checkbox måske)

Er det gjort forståeligt? Har prøvet mig frem det meste af dagen, men den holder sku ikke rigtig. :(
Jeg er nået til det punkt hvor en færdig løsning vil være at foretrække inden jeg hacker min egen database og udryder den med en flammekaster.
....eller det der er værre, sætter min kone til at administrerer den.
Avatar billede phpnewbie Nybegynder
20. oktober 2004 - 09:19 #1
noget i stil med :

select id from content where text like '$search_condition'

så ville en søgning på bla returnere id fra alle rækker der indehold "bla" i nogen form.
Avatar billede Slettet bruger
20. oktober 2004 - 09:28 #2
Du skal vel bruge noget i denne stil (Her har jeg gået ud fra 3 radioknapper eller en <select>-dropdown):

<?php

$soeg=isset($_POST['hvad'])?$_POST['hvad']:'begge';

switch($soeg){
  case 'text':
    $where="text LIKE '%" . $_POST['soegetekst'] . "%'";
    break;
  case 'keywords':
    $where="keywords LIKE '%" . $_POST['soegetekst'] . "%'";
    break;
  case 'begge':
    $where="keywords LIKE '%" . $_POST['soegetekst'] . "%' OR text LIKE '%" . $_POST['soegetekst'] . "%'";
}

echo "<h1>Søgeresultat</h1>\n";

$result=mysql_query("SELECT * FROM content WHERE $where ORDER BY last_updated DESC");

if(mysql_num_rows($result)>0){
  echo "<ol>\n";
  while($row=mysql_fetch_assoc($result)){
    echo "<li><a href='page.php?id={$row['id']}'>{$row['title']}</a> {$row['last_updated']}</li>\n";
  }
  echo "</ol>\n";
} else {
  echo "<p>Der var intet, der passede på din søgning. Prøv igen.</p>\n";
}

?>
Avatar billede bojo Nybegynder
20. oktober 2004 - 09:36 #3
Avatar billede backside Nybegynder
20. oktober 2004 - 09:53 #4
sandbox>> Det ligner noget jeg kan bruge.
Kan du lave den komplet med form, checkboxe og det hele?
Normalt er jeg ikke vild med bare at få en færdig løsning, men jeg har opgivet totalt. ;)
Avatar billede Slettet bruger
20. oktober 2004 - 10:21 #5
Hvor komplet mener du? Du har vel i forvejen en HTML-skabelon, du smider det ind i? Derudover skal du selv indsætte kode til at åbne forbindelse til databasen.

<?php

$soegetekst=isset($_POST['soegetekst'])?$_POST['soegetekst']:'';

echo "
<form action='' method='post'>
<p>
<input type='text' name='soegetekst' value="
. htmlentities($soegetekst)
. "<input type='submit' name='send' value='S&oslash;'><br>
Søg: <input type='radio' name='hvad' id='text' value='text'>
<label for='text'>Indhold<label>
<input type='radio' name='hvad' id='keywords' value='keywords'>
<label for='keywords'>N&oslash;gleord<label>
<input type='radio' name='hvad' id='begge' value='begge'>
<label for='begge'>Begge<label>
</p>
</form>";

$soeg=isset($_POST['hvad'])?$_POST['hvad']:'begge';

switch($soeg){
  case 'text':
    $where="text LIKE '%" . $soegetekst . "%'";
    break;
  case 'keywords':
    $where="keywords LIKE '%" . $soegetekst . "%'";
    break;
  case 'begge':
    $where="keywords LIKE '%" . $soegetekst . "%' OR text LIKE '%" . $soegetekst . "%'";
}

echo "<h1>Søgeresultat</h1>\n";

$result=mysql_query("SELECT * FROM content WHERE $where ORDER BY last_updated DESC");

if(mysql_num_rows($result)>0){
  echo "<ol>\n";
  while($row=mysql_fetch_assoc($result)){
    echo "<li><a href='page.php?id={$row['id']}'>{$row['title']}</a> {$row['last_updated']}</li>\n";
  }
  echo "</ol>\n";
} else {
  echo "<p>Der var intet, der passede på din søgning. Prøv igen.</p>\n";
}

?>
Avatar billede backside Nybegynder
20. oktober 2004 - 12:28 #6
Jo da, det har jeg. Og jeg har styr på forbindelsen til databasen.
Tester det lige af senere, skal ud af døren nu.
Avatar billede backside Nybegynder
20. oktober 2004 - 13:27 #7
Der er en syntax fejl i formen et sted, kan ikke helt finde ud af hvor det er.
Men ellers tror jeg lige det var den løsning jeg søgte, selvom min forklaring haltede lidt.
Avatar billede sostack Nybegynder
20. oktober 2004 - 14:19 #8
Prøv med:
echo "
<form action='' method='post'>
<p>
<input type='text' name='soegetekst' value="
. htmlentities($soegetekst)
. "><input type='submit' name='send' value='S&oslash;'><br>
Søg: <input type='radio' name='hvad' id='text' value='text'>
<label for='text'>Indhold<label>
<input type='radio' name='hvad' id='keywords' value='keywords'>
<label for='keywords'>N&oslash;gleord<label>
<input type='radio' name='hvad' id='begge' value='begge'>
<label for='begge'>Begge<label>
</p>
</form>";

//sostack
Avatar billede backside Nybegynder
20. oktober 2004 - 14:59 #9
Damn, det var der den manglede. Tak ;)
Den er sku bare fjong nu. Tak for hjælpen.
sandbox>> Smid lige et svar. sostack fortjener også lige lidt for den manglende > i formen.
Avatar billede backside Nybegynder
20. oktober 2004 - 16:28 #10
Jeg var lidt hurtig der.
Resultatet af søgningen skulle gerne vises i iframen. (name="centerframe" id="centerframe")
Hvordan gør jeg det?
Avatar billede backside Nybegynder
20. oktober 2004 - 17:43 #11
Jeg har klaret den. Smid nogle svar.
Avatar billede Slettet bruger
20. oktober 2004 - 18:09 #12
OK her er et fra mig.

Der mangler forresten også et par '-er om value-attributten til søgefeltet.

<input type='text' name='soegetekst' value='"
. htmlentities($soegetekst)
. "'>
Avatar billede backside Nybegynder
20. oktober 2004 - 20:35 #13
Jep, der var lige lidt småfejl et par steder. Men det funker nu.  ;)
Avatar billede backside Nybegynder
21. oktober 2004 - 11:11 #14
Takker for hjælpen.
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