Så kommer det endelig. Jeg har i høj grad forsøgt at holde mig op ad din oprindelige kode, så det er ikke alting, der er nøjagtig, som jeg ville have lavet det for mig selv - men nu er det jo heller ikke kun mig, der skal læse koden.
Hvis du har spørgsmål, så bare skyd løs.
Og jeg vil ikke garantere, at det er helt fejlfrit, for da jeg ikke har din database med dine data, kan jeg ikke afprøve det, så jeg har slet ikke prøvekørt. Jeg har dog forsøgt at undgå de værste tastefejl.
<?php
// en funktion, der skal bruges. Se forklaring på
http://exp.dk/artikler/190function my_addslashes($streng){
return get_magic_quotes_gpc()?$streng:addslashes($streng);
}
// Og en anden funktion, der laver selectboksene på en hurtig og let måde
function makeselect($navn, $liste, forvalg) {
$s = "<select name='$navn'>\n";
foreach($liste as $felt => $tekst) {
$s .= " <option value='$felt'";
if($forvalg==$felt) {
$s .= " selected='selected'";
}
$s .= ">$tekst</option>\n";
}
$s .= "</select>\n";
return $s;
}
// Først oprettes de lister, der skal bruges. Bemærk, at de bruges både
// til at lave formularen og til at kontrollere forespørgslen, så hvis
// der skal tilføjes muligheder, skal det bare gøres i listen.
// Kategorilisten kunne det måske være en ide at lægge i en include-fil,
// så den også kan bruges af formularen til at indtaste nye opskrifter.
// liste over kategorier. Første streng i hver linie, er den,
// der benyttes som værdi i tabeller og formularer. Anden streng er
// den, der vises for brugeren.
$katlist = array(
'forret' => 'Forret',
'hovedret' => 'Hovedret',
'dessert' => 'Dessert',
'fedtfattig' => 'Fedtfattig',
'orientalsk' => 'Orientalsk',
'pasta' => 'Pasta' );
// Liste over felter at sortere efter.
// Er du forresten sikker på, at Dato skal sortere efter id, når du har et date-felt?
$sortlist = array(
'titel' => 'Opskrifter',
'name' => 'Forfatter',
'id' => 'Dato' );
$sortorderlist = array(
'asc' => 'Stigende (a->z)',
'desc' => 'Faldende (z->a)' );
// Standard-værdier for formularfelterne, som de er sat til, når man kommer til siden
$kategori = 'hovedret';
$sort = 'titel';
$order = 'asc';
$offset = 0;
$range = 10; // Hvor mange vil du have på hver side?
// Nu sætter jeg en variabel, som længere nede bruges til at bestemme
// om der er tale om en gyldig forespørgsel, der skal sendes til databasen.
// Den bliver sat til falsk, hvis der findes fejl i input.
$formOK = true;
// har vi overhovedet modtaget en formular?
if(isset($_GET['q']) || isset($_GET['kategori']) ||
isset($_GET['sort']) || isset($_GET['order']) || isset($_GET['offset']) ) {
// er der søgt efter noget?
if(empty(trim($_GET['q']))) {
echo "Skriv venligst et søgeord. ";
$formOK = false;
} else {
$q=trim($_GET['q']);
$q=my_addslashes($q);
}
// Har vi en kategori?
if(isset($katlist[$_GET['kategori']])) {
$kategori = $_GET['kategori'];
} else {
echo "Forkert kategori! ";
$formOK = false;
}
// og tilsvarende for de to andre select-bokse.
if(isset($sortlist[$_GET['sort']])) {
$sort = $_GET['sort'];
} else {
echo "Forkert sorteringsfelt! ";
$formOK = false;
}
if(isset($sortorderlist[$_GET['order']])) {
$order = $_GET['order'];
} else {
echo "Forkert sorteringsorden! ";
$formOK = false;
}
// og offset skal også kontrolleres, men da den ikke er med på
// første resultatside, gør jeg det med to gange if
if(isset($_GET['offset'])) {
if(is_numeric($_GET['offset']) &&
intval($_GET['offset']) == $_GET['offset'] && $_GET['offset'] > 0) {
$offset = $_GET['offset'];
} else {
echo "Forkert offset! ";
$formOK = false;
}
}
} else {
// Vi har ikke modtaget en formular
$formOK = false;
}
// når scriptet kommer hertil har alle variablerne fornuftige værdier.
// Muligvis bortset fra $offset, som i princippet kunne være højere end antallet af rækker.
?>
<form action="soeg.php" method="get">
<table><tr>
<td>Søgeord:<br><input type="text" name="q"> </td>
<td>Sorter efter:<br>
<?php echo makeselect("sort", $sortlist, $sort); ?>
<td>Kategori:<br>
<?php echo makeselect("kategori", $katlist, $kategori); ?>
</td>
<td>Sortering:<br>
<?php echo makeselect("order", $sortorderlist, $order); ?>
</td>
</tr></table>
<input type="submit" value="Udfør">
</form>
<?php
// så ser vi, om vi har en OK formular.
if ($formOK) {
echo '<hr>';
echo '<h2>Resultater af din søgning på: "'.$q.'"</h2>';
include('config.php');
// Her jeg jeg kun slettet $kategori et sted og lavet linieskift, så det er mere læseligt
$query = mysql_query("SELECT id,titel,name,kategori,DATE_FORMAT(date,'%e/%c-%y %T') AS date
FROM opskrift
WHERE parent=0
AND (titel LIKE '%$q%' OR kategori LIKE '%$q%' OR message LIKE '%$q%')
ORDER BY $sort $order
LIMIT $offset,$range") or die(mysql_error());
if (mysql_num_rows($query) == 0){
echo 'Ingen resultater af din søgning!<br>';
} else {
echo '<table id="list"><tr>';
echo '<th width="50%">Opskrifter</th><th width="15%">Kategori</th><th width="15%">Forfatter</th>';
echo '</tr>';
while($row = mysql_fetch_assoc($query)) {
echo '<tr>';
echo "<td width='50%'><a href='laes.php?id=$row[id]'>$row[titel]</a></b></td>";
echo '<td width="15%">'.$row['kategori'].'</td>';
echo '<td width="15%">'.$row['name'].'</td>';
echo '</tr>';
}
echo '</table>';
}
echo '<br>';
$antal = mysql_result(mysql_query("SELECT COUNT(*) FROM opskrift WHERE parent=0 AND (titel LIKE '%$q%' OR kategori LIKE '%$q%' OR message LIKE '%$q%')"),0);
if ($offset > 0) {
$forrige = $offset-$range;
if($forrige < 0) {
$forrige = 0;
}
echo "<a href='?q=$q&sort=$sort&order=$order&offset=$forrige'>Forrige</a> | ";
} else {
echo 'Forrige | ';
}
if ($antal >= $offset+$range) {
$naeste = $offset+$range;
echo "<a href='?q=$q&sort=$sort&order=$order&offset=$naeste'>Næste</a>";
} else {
echo 'Næste';
}
}
?>