I denne artikel vil jeg forklare hvordan du laver en simpel, men effektiv søgemaskine.
Jeg vil ikke gøre noget ud af udseendet, men funktionaliteten.
Jeg går ud fra at du har adgang til PHP4 og MySQL og at du kan de mest basale kommandoer/funktioner.
Til eksemplet skal du bruge en hvilken som helst MySQL-tabel, du ønsker at søge i. I mit eksempel har jeg kaldt den for "YOURTABLE".
Lad os starte.
Vi starter med en simpelt form:
<form action="<?=basename($PHP_SELF)?>" method="GET">
<input type="hidden" name="submit" value="1">
Søg efter:<br>
<input type="text" name="soegeord"><br>
<input type="radio" name="soeg_efter" value="1" checked> Et af ordene<br>
<input type="radio" name="soeg_efter" value="2"> Alle ord<br>
<input type="radio" name="soeg_efter" value="3"> I skrevet rækkefølge<br>
<input type="submit" value="Søg">
</form>
Så tjekker vi om formen er submittet og om der er indtastet et søgeord:
(Læs kommentarerne med orange)
<?php
if($_GET['submit']){
if(!$_GET['soegeord']){
echo "Du skal indtaste et søgeord!\n";
} else {
//Vi connecter lige
@mysql_connect("localhost","root","") or die("Kunne ikke connecte til mysqlserver, fordi ".mysql_error());
@mysql_select_db("YOURDB") or die("Kunne ikke vælge database, fordi ".mysql_error());
//Så skal vi have stykket vores SQL-query sammen:
if($_GET['soeg_efter'] == 1 || $_GET['soeg_efter'] == 2){ //Hvis der søges efter "Et af ordene" eller "Alle ord"
switch($_GET['soeg_efter']){ //Tjek værdien af $soeg_efter
case 1: $and_or = " || "; break;
case 2: $and_or = " && "; break;
}
$exp = explode(" ", $_GET['soegeord']); //Del søgestrengen op i ord, i et array
for($i=0; $i < count($exp); $i++){ //En løkke der kører så længe der er nyt i $exp-array'et
if($i){ //Hvis det ikke er første gang løkken køres
$where_clause .= " $and_or ";
}
$where_clause .= " felt_der_skal_søges_i LIKE '{%$exp[$i]}%' ";
}
} elseif($_GET['soeg_efter'] == 3) { //Hvis der skal søges på alle ordene i skrevet rækkefølge
$where_clause = " felt_der_skal_søges_i LIKE '%{$_GET['soegeord']}%' ";
}
//Send query'et afsted, og udskriv resultaterne
//SQL-sætningen/query'et
$sql = "SELECT * FROM YOURTABLE WHERE $where_clause";
//Send query og hvis der opstår en fejl, skriv den
$result = @mysql_query($sql) or die("Kunne ikke sende forespørgsel, fordi ".mysql_error());
echo "<table>\n";
while($row = mysql_fetch_array($result)){ //En lykke der spytter resultaterne ud
echo "<tr><td>$row[felt_der_skal_søges_i]</td></tr>\n"; //spyt
}
echo "</table>\n";
}
}
?>
Jeg håber du fik noget ud af at læse denne artikel. Kontakt mig på <jonas at delfs dot dk> hvis du skulle finde fejl.