et søge script i php fra mysql med flere kategorier
hej jeg kan ikke få dette script til at virke det eneste der kommer frem er en hvid skærm ???scriptet ser således ud
<?php
// en funktion, der skal bruges. Se forklaring på http://exp.dk/artikler/190
function 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',
'Drinks' => 'Drinks',
'Morgenmad' => 'Morgenmad',
'Velkomst' => 'Velkomst',
'Supper' => 'Supper',
'Frokost' => 'Frokost',
'Natmad' => 'Natmad',
'Vegetar' => 'Vegetar',
'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" value="<?php echo stripslashes($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,portioner,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%">Portioner</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['portioner'].'</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';
}
}
?>
