Avatar billede beerton Nybegynder
27. februar 2002 - 12:43 Der er 21 kommentarer og
1 løsning

soegning igen

Jeg har en nyhedsdatabase, som man skal kunne soege i. Er det muligt meget simpelt at lave et soegescript.

Mit nyhedsscript ser saadan ud.

<?
$foresp = mysql_query("select id, date, country, headline, short from news order by id
desc limit 0,20 ");
while($data = mysql_fetch_array($foresp)){
echo "<p><a href=\"news.php?id=${data["id"]}\">${data["date"]}:
${data["headline"]}</a><br>";
echo "${data["short"]}";}
?>
Avatar billede tipsen Nybegynder
27. februar 2002 - 12:53 #1
Hvad vil du kunne søge efter?

id, date, country, headline el. short - eller alle sammen?

vil du kunne søge med et eller flere ord?

vil du kunne bruge jokertegn i søgningerne?

--tipsen--
Avatar billede sthen Nybegynder
27. februar 2002 - 12:56 #2
<?
$foresp = mysql_query("select id, date, country, headline, short from news order by id
desc limit 0,20 ");
while($data = mysql_fetch_array($foresp)){
echo "<p><a href=\"news.php?id=$data["id"]\">$data["date"]:
$data["headline"]</a><br>";
echo $data["short"];}
?>
Avatar billede beerton Nybegynder
27. februar 2002 - 13:11 #3
til tipsen

Jeg gerne have at den kun skal soege
i short
med flere ord

Er det meget simpelt at lave?
Avatar billede puddelundercover Nybegynder
27. februar 2002 - 13:32 #4
der er jo den enkle,

mysql_query("select id, date, country, headline, short from news where short like '%$searchword%' order by id
desc limit 0,20 ");


men den kan ikke håndtere flere ord, hvis ikke sætningen er præcis
Avatar billede beerton Nybegynder
27. februar 2002 - 13:56 #5
Jeg har lavet denne, men der kommer ingen respons. Hvad goer jeg galt?

<?
mysql_query("select id, date, country, headline, short from news where short like '%$searchword%' order by id
desc limit 0,20 ");
?>

<form action="<?php echo $PHP_SELF;?>" method="post">
<INPUT TYPE="text" NAME="searchword" SIZE="20" maxlength="40">
<INPUT TYPE="hidden" NAME="ok" VALUE="ok" SIZE="20" maxlength="30">
<INPUT TYPE="submit" value="Search">
</form>
Avatar billede tipsen Nybegynder
27. februar 2002 - 14:08 #6
Her er en funktion som genererer SQL'en til at søge i en bestemt kolonne, i en bestemt tabel efter poster som indeholder alle angivne søgeord. Søgeordene skal angives kommaseparerede og ekstra mellemrum eller lignende (whitespace) er ligegyldige forstået på den måde, at de ikke ødelægger noget!

function CreateSQL($StrSearch, $DBTable, $DBField) {
    $strarray = explode(",",$StrSearch);
    $SQL = "SELECT * FROM $DBTable WHERE ";
    foreach ($strarray as $word) {
        $word = trim($word);
        $SQL .= "$DBField LIKE '%$word%' AND ";
    }
    return substr($SQL,0,-4);
}

echo CreateSQL("søgeord1,  søgeord2  ", "news", "short");

--tipsen--
Avatar billede tipsen Nybegynder
27. februar 2002 - 14:08 #7
og det var jo så egentligt et svar...

spørg bare, hvis der er problemer med den...
Avatar billede puddelundercover Nybegynder
27. februar 2002 - 14:12 #8
beerton > hvis det er alt du har skrevet, så er det forståeligt at intet kommer frem, du er jo nødt til at lave en while sætning, hvor du echo'er outputtet ;)
Avatar billede tipsen Nybegynder
27. februar 2002 - 14:21 #9
Du kan evt kigge nærmere på http://www.hotscripts.com/PHP/Scripts_and_Programs/Search_Engines/ for at se eksempler på forskellige søgemaskiner i php...
Avatar billede beerton Nybegynder
27. februar 2002 - 14:28 #10
Hej Puddelundercover

Jeg har nu lavet nedenstaaende, men nu faar jeg flg fejlmeddelse


<?
$foresp = mysql_query("select id, date, country, headline, short from news where text like '%$searchword%' order by id
desc limit 0,20 ");
while($data = mysql_fetch_array($foresp)){
echo "The search found these news.";
}
else{
?>

<form action="<?php echo $PHP_SELF;?>" method="post">
<INPUT TYPE="text" NAME="searchword" SIZE="20" maxlength="40">
<INPUT TYPE="hidden" NAME="ok" VALUE="ok" SIZE="20" maxlength="30">
<INPUT TYPE="submit" value="Search">
</form>

<?php
}
?>
Avatar billede beerton Nybegynder
27. februar 2002 - 14:51 #11
Jeg har aendret lidt til dette

<?
$foresp = mysql_query("select id, date, country, headline, short, text from news where text like '%$searchword%' order by id
desc limit 0,20 ");
while($data = mysql_fetch_array($foresp)){
echo "<h3>The search found these news.</h3>";
echo "<p><a href=\"news.php?id=${data["id"]}\">${data["date"]}:
${data["headline"]}</a><br>";
echo "${data["short"]}";}
}
else{
?>

<form action="<?php echo $PHP_SELF;?>" method="post">
<INPUT TYPE="text" NAME="searchword" SIZE="20" maxlength="40">
<INPUT TYPE="hidden" NAME="ok" VALUE="ok" SIZE="20" maxlength="30">
<INPUT TYPE="submit" value="Search">
</form>

<?php
}
?>

Men det virker stadig ikke. Hvad kan fejlen vaere?
Avatar billede puddelundercover Nybegynder
27. februar 2002 - 14:53 #12
Jeg kan ikke lige gætte det, kan du ikke poste fejlmeddelelsen? Nu husker du vel at forbinde til servere, ikke?
Avatar billede beerton Nybegynder
27. februar 2002 - 14:57 #13
Jeg  husker at forbinde til serveren

Fejlmeddelsen er denne

Parse error: parse error in /web/www.floorballnow.com/www/news1.php on line 78
Avatar billede puddelundercover Nybegynder
27. februar 2002 - 15:09 #14
echo "<p><a href=\"news.php?id=${data["id"]}\">${data["date"]}:
${data["headline"]}</a><br>";
echo "${data["short"]}";}

jeg tror det er her omkring at der er noget galt...

når du skal extracte fra en row hedder det f.eks. $data[headline] og ikke ${data["headline"]}
Avatar billede tipsen Nybegynder
27. februar 2002 - 15:57 #15
<?
function CreateSQL($StrSearch, $DBTable, $DBField) {
    $strarray = explode(",",$StrSearch);
    $SQL = "SELECT id, date, country, headline, short, text FROM $DBTable WHERE ";
    foreach ($strarray as $word) {
        $word = trim($word);
        $SQL .= "$DBField LIKE '%$word%' AND ";
    }
    return substr($SQL,0,-4);
}

$SQL = CreateSQL($searchword, "news", "text");
$foresp = mysql_query("select id, date, country, headline, short, text from news where text like '%$searchword%' order by id
desc limit 0,20 ");
while($data = mysql_fetch_array($foresp)){
echo "<h3>The search found these news.</h3>";
echo "<p><a href=\"news.php?id=${data["id"]}\">${data["date"]}:
${data["headline"]}</a><br>";
echo "${data["short"]}";}
}
else{
?>
Avatar billede tipsen Nybegynder
27. februar 2002 - 16:04 #16
eksperten er sgu for hurtig... - jeg troede ellers jeg nåede at fortryde dén submit! - Ovenstående er pilhamrende forkert - kig på dette i stedet:

<?php
function CreateSQL($StrSearch, $DBTable, $DBField) {
    $strarray = explode(",",$StrSearch);
    $SQL = "SELECT id, date, country, headline, short, text FROM $DBTable WHERE ";
    foreach ($strarray as $word) {
        $word = trim($word);
        $SQL .= "$DBField LIKE '%$word%' AND ";
    }
    $SQL = substr($SQL,0,-4);
    $SQL .= " ORDER BY id DESC LIMIT 0,20"
    return $SQL;
}

$SQL = CreateSQL($searchword, "news", "text");
$foresp = mysql_query($SQL);
echo "<h3>The search found these news.</h3>";
while(list($id, $date, $country, $headline, $short, $text) = mysql_fetch_row($foresp)){
    echo "<p><a href=\"news.php?id=$id\">$date : $headline</a></p>";
    echo "<p>$short</p>";
}
?>
Avatar billede tipsen Nybegynder
27. februar 2002 - 16:07 #17
Kommentarer til ovenstående:

1. Den funktion der genererer SQL-sætningen er ikke særlig fleksibel - dette kan udbygges...

2. Der bliver udtaget flere felter fra databasen end der rent faktisk benyttes - dette ville være smart at begrænse til de nødvendige felter!

3. Det er nu (grundet CreateSQL()) muligt at angive flere søgeord i søgefeltet - så længe de adskilles af komma (,)!
Avatar billede beerton Nybegynder
27. februar 2002 - 16:26 #18
Jeg faar en fejlmeddelse med dette script

<?php
function CreateSQL($StrSearch, $DBTable, $DBField) {
$strarray = explode(",",$StrSearch);
$SQL = "SELECT id, date, country, headline, short, text FROM $DBTable WHERE ";
foreach ($strarray as $word) {
$word = trim($word);
$SQL .= "$DBField LIKE '%$word%' AND ";
}
$SQL = substr($SQL,0,-4);
$SQL .= " ORDER BY id DESC LIMIT 0,20"
return $SQL;
}

$SQL = CreateSQL($searchword, "news", "text");
$foresp = mysql_query($SQL);
echo "<h3>The search found these news.</h3>";
while(list($id, $date, $country, $headline, $short, $text) = mysql_fetch_row($foresp)){
echo "<p><a href=\"news.php?id=$id\">$date : $headline</a></p>";
echo "<p>$short</p>";
}
?>

<form action="<?php echo $PHP_SELF;?>" method="post">
<INPUT TYPE="text" NAME="searchword" SIZE="20" maxlength="40">
<INPUT TYPE="hidden" NAME="ok" VALUE="ok" SIZE="20" maxlength="30">
<INPUT TYPE="submit" value="Search">
</form>
Avatar billede tipsen Nybegynder
27. februar 2002 - 16:45 #19
hvilken fejlmeddelelse og hvilken linie?
Avatar billede tipsen Nybegynder
27. februar 2002 - 16:46 #20
den skal selvfølgelig kende "$searchword" på det tidspunkt du kalder funktionen - så søgningen skal kun eksekveres, hvis formen er blevet submittet!
Avatar billede tipsen Nybegynder
27. februar 2002 - 16:50 #21
skriv evt.

$searchword = "ord1, ord2"; foran $SQL = CreateSQL... - så kan du teste det!
Avatar billede tipsen Nybegynder
13. maj 2002 - 15:24 #22
Hvad var det der ikke fungerede?
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