Ich habe ein
Suchscript gefunden, das ich erweitern wollte. Und zwar soll der Benützer auswählen können, wie die gesuchten Daten sortiert werden sollen inkl. Blätterfunktion.
Wenn ich in der GET-Routine z.B ORDER BY Idno DESC die Sortierung fix lasse, funktioniert es und zwar bei jedem Blättern.
Die Query sieht dann so aus:
SELECT * FROM artikel WHERE Titel LIKE'%stem cells%' ORDER BY Idno DESC LIMIT 0, 20
Wenn ich aber aus dem Formular die ausgewählte Sortierung hole, dann ist
die erste Darstellung i.O., aber immer wenn er die GET-Routine durchläuft, gibt es den Fehler:
Im betreffenden Query fehlt komischerweise der Sortierungsparameter:
SELECT * FROM artikel WHERE Titel LIKE'%stem cells%' ORDER BY LIMIT 20, 20
Hier das Script, entscheidend ist hier die Routine ab else if ($_GET)
PHP-Code:
<form action="suche.php" method="POST" name="suche">
<label>
Suchbegriff:
<input name="searchstring" type="text" size="25" />
<label>
Sortierung Auswählen:
<select name="sortieren">
<option value="Idno DESC" selected>Idno absteigend</option>
<option value="Jahrgang DESC">Jahrgang absteigend</option>
<option value="BdVol DESC">BdVol absteigend</option>
<option value="Ablage DESC">Ablage absteigend</option>
<option value="Idno ASC">Idno aufsteigend</option>
<option value="Jahrgang ASC">Jahrgang aufsteigend</option>
<option value="BdVol ASC">BdVol aufsteigend</option>
<option value="Ablage ASC">Ablage aufsteigend</option>
</select>
<input type="submit" value="suchen" />
....
<?php
if (!empty ($_POST['searchstring']))
{
$query = 'SELECT
COUNT(*)
FROM
artikel
WHERE
Titel LIKE'."'%".$_POST['searchstring']."%'";
$result = mysql_query ($query) or die (mysql_error());
$found = mysql_fetch_row ($result);
$num = $found[0];
$query = 'SELECT
*
FROM
artikel
WHERE
Titel LIKE'."'%".$_POST['searchstring']."%'".'
ORDER BY '.$_POST['sortieren'].'
LIMIT 0, 20';
$param = '?num='.$num.'&string='.urlencode($_POST['searchstring']);
echo '<br>'.$query.' Query aus POST-Parameter<br>';
}
else if ($_GET)
{
// Suchabfrage per GET-Parameter
$query = 'SELECT
*
FROM
artikel
WHERE
Titel LIKE'."'%".urldecode($_GET['string'])."%'".'
ORDER BY'.$_GET['sortieren'].'
LIMIT
'.$_GET['limit'].', 20';
// register_globals-Problem !
$num = $_GET['num'];
// Defininition der GET-Parameter (Trefferanzahl, Suchwort)
$param = '?num='.$_GET['num'].'&string='.$_GET['string'];
echo '<br>'.$query.' GET Parameter<br>';
}
if ($num)
{
$result = mysql_query ($query) or die (mysql_error());
while ($row = mysql_fetch_assoc($result))
{
echo '<br>'.$row['Titel'].'<br />';
}
echo '<br>';
for ($i = 1; $i <= ceil ($num / 20); $i++)
{
// Von-Wert
$from = $i * 20 - 19;
// Bis-Wert
($i * 20 <= $num) ? $to = $i * 20 : $to = $num;
// Limit-Wert
$limit = $i * 20 - 20;
// Ausgabe der Links inkl. GET-Parameter für Limit
echo '<a href="'.$_SERVER['PHP_SELF'].$param;
echo '&limit='.$limit.'">'.$from.'-'.$to.'</a> ';
}
}
?>
Also, darf ich das "ORDER BY'.$_GET['sortieren'].'" gar nicht verwenden, oder habe ich einen Syntaxfehler oder sonst was?
Vielen Dank für jeden Tipp und herzliche Grüsse von TAX
PS. Natürlich möchte ich später auch die Suche in den Feldern variieren, aber wenn das gelöst ist, wird das dann auch kein Problem sein.