Hallo,
Danke schon mal für die Infos.
Wenn $sort einfach leer ist (da nicht gesetzt), dann steht da am Ende der Select-Anweisung ".. ORDER BY " und da ist sie dann schon vorbei. Das gibt einen Mysql-Syntaxfehler (direkt nach der mysql_query-Zeile ein echo mysql_error(); einfügen und dann siehst Du das)
Ok, das funkt.
Du hast 2 Möglichkeiten:
- QUICK&DIRTY-Lösung:
am Anfang des Scripts:
if (!isset($sort)) $sort = "standard_spalte";
Das hat auch funktioniert.
- Wirkliche Lösung:
- register_globals in der php.ini auf Off stellen.
Tja, das kann ich leider nicht, da ich keinen Zugriff auf die php.ini bei meinem Provider habe.
- Alle übergebenen Parameter (da sie jetzt nicht mehr global registriert werden) über $_GET und $_POST (bzw. $HTTP_GET_VARS und $HTTP_POST_VARS bei PHP < 4.1) - siehe http://www.php.net/manual/en/reserved.variables.php
- Alle Eingaben validieren. (also sehen, ob sie plausibel sind) Dazu sind regexps ganz geeignet: http://www.php.net/manual/en/ref.regex.php, http://www.php.net/manual/en/ref.pcre.php
- Falls eine Eingabe leer ist, dann soll ein Default-Wert zugewiesen werden:
if (!isset($_GET["variable"])) {
$wert_zu_verwenden = _default_wert_;
} else {
if (ist_valide($_GET["variable"])) {
$wert_zu_verwenden = $_GET["variable"];
} else {
spucke_fehler_aus;
$wert_zu_verwenden = _default_wert_;
}
}
- Auf jeden Fall das SQL-Statement noch mal mit addslashes absichern, man weiß ja nie:
$sql = "SELECT .... FROM " . addslashes ($tabelle) . " ORDER BY " . addslashes ($sort);
Hier kommt nun eine schöne Fehlermeldung: You have an error in your SQL syntax near 'FROM ....' at line 1
Zu Sicherheit und PHP siehe auch noch http://www.php.net/manual/en/security.php
Grüße,
Christian
Danke jedenfalls für deine Mühe.
LG
Heinz