Christian Seiler: not a valid MySQL result resource ?

Beitrag lesen

Hallo,

Funktioniert sehr gut. Ich kann jetzt per Mausklick nach bestimmten Spalten sortieren. Folgender Link kommt zur Anwendung: <a href="index.html?sort=pos%20ASC">Pos</a>

So weit so gut. Nun mein Problem:
Rufe ich nur index.html auf (es könnte ja sein, dass die Seite so augerufen wird), bekomme ich folgende Fehlermeldung:
Warning: Supplied Argument is not a valid MySQL result resource in index.html on line 62 (das ist der Teil mit while ...).

Wo liegt der Fehler?

Validierung der Eingaben. Dein Code ist zusätzlich noch die reinste Sicherheitslücke (nicht böse gemeint, ist halt so)

$sql="SELECT Pos,Fname,Lname,Team,PPG,RPG,APG,SPG,BPG FROM $tabelle ORDER BY $sort";

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)

Du hast 2 Möglichkeiten:

1. QUICK&DIRTY-Lösung:

am Anfang des Scripts:

if (!isset($sort)) $sort = "standard_spalte";

2. Wirkliche Lösung:

1. register_globals in der php.ini auf Off stellen.

2. 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

3. 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

4. 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_;
  }
}

5. Auf jeden Fall das SQL-Statement noch mal mit addslashes absichern, man weiß ja nie:

$sql = "SELECT .... FROM " . addslashes ($tabelle) . " ORDER BY " . addslashes ($sort);

Zu Sicherheit und PHP siehe auch noch http://www.php.net/manual/en/security.php

Grüße,

Christian