estebu: Datenbankabfrage richtig sortieren - WAS dann WOHIN schreiben??

Hallo Gemeinde,

habe ein kleineres Problem:

Ich möchte eine Datenbankabfrage sortiert auf der Webseite anzeigen lassen.
Die Abfrage sieht so aus:

mysql_select_db($database_connect, $connect);
$query_Recordset3 = "SELECT * FROM Download WHERE PNr=".$_GET["selectedNr"] ;
$Recordset3 = mysql_query($query_Recordset3, $connect) or die(mysql_error());
$row_Recordset3 = mysql_fetch_assoc($Recordset3);
$totalRows_Recordset3 = mysql_num_rows($Recordset3);

nun möchte ich irgendwo einfügen: ORDER BY Datum DESC

(wobei "Datum" ein bereits bestehendes Datenbankfeld ist.)

WIE und WO muss ich die ORDER BY   einfügen???

Vielen Dank für hilfreiche Tipps.

  1. Mahlzeit,

    Ich möchte eine Datenbankabfrage sortiert auf der Webseite anzeigen lassen.

    Die Abfrage? Oder das Ergebnis der Abfrage? ;-)

    $query_Recordset3 = "SELECT * FROM Download WHERE PNr=".$_GET["selectedNr"] ;

    Aha. Und wenn ich Deinem Skript nun "0; DROP TABLE Download;" als GET-Parameter "selectedNr" mitgebe?

    Merke: "ALL INPUT IS EVIL!" - behandle Benutzereingaben IMMER mit Vorsicht und maskiere Variablen IMMER kontextsensitiv:

    $query_Recordset3 = "SELECT * FROM Download WHERE PNr='".mysql_real_escape_string($_GET['selectedNr'])."'";

    WIE und WO muss ich die ORDER BY   einfügen???

    Da, wo Du diesen Teil der Abfrage laut SQL-Syntax immer einfügst ... unabhängig von der verwendeten Skript-Programmiersprache.

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. Mahlzeit,

      Ich möchte eine Datenbankabfrage sortiert auf der Webseite anzeigen lassen.

      Die Abfrage? Oder das Ergebnis der Abfrage? ;-)

      In diesem Falle das Ergebnis der Abfrage.

      $query_Recordset3 = "SELECT * FROM Download WHERE PNr=".$_GET["selectedNr"] ;

      Aha. Und wenn ich Deinem Skript nun "0; DROP TABLE Download;" als GET-Parameter "selectedNr" mitgebe?

      Sorry, stehe da noch nicht so im Stoff und weiss nicht recht, was immer das auch bedeuten soll. Aber es scheint ja zumindest, dass Du ziemlich genau weisst, was Du da schreibst ;)

      WIE und WO muss ich die ORDER BY   einfügen???

      Da, wo Du diesen Teil der Abfrage laut SQL-Syntax immer einfügst ... unabhängig von der verwendeten Skript-Programmiersprache.

      Nicht sehr hilfreich, denn ich würde nicht fragen, wenn ich wüsste, wo man es IMMER einfügt. Suche in meinem Fall nach einer schnellen Lösung, ohne jetzt erstmal ganze Seiten durchforsten zu müssen. Das mache ich nebenbei sowieso, aber so viel Zeit bleibt mir jetzt leider nicht. Vielleicht kannst DU es mir doch nochmal etwas verständlicher erklären?? ( á la PHP für Dummies ;) Danke für die Mühe!

      grüße
      estebu

      1. Habe die Lösung selbst herausgefunden:

        aus:

        $query_Recordset3 = "SELECT * FROM Download WHERE PNr=".$_GET["selectedNr"];

        wurde

        $query_Recordset3 = "SELECT * FROM Download WHERE PNr={$_GET["selectedNr"]} ORDER BY Datum DESC";

        und alles wird nun absteigend auf der Webseite ausgegeben.

        1. Hello,

          Dann gehen wir mal davon aus, dass Du vorher noch irgendwo

          $_GET["selectedNr"] = intval($_GET["selectedNr"]);

          geschrieben hast, und Deiner Datenbank kann nichts passieren. Wenn die 0 dann ein neutrales Element für die Spalte ist, also als Datenwert nicht vorkommen wird, dann ist sogar die Abfrage noch richtig, wenn jemand Blödsinn in der URi übergibt.

          $query_Recordset3 = "SELECT * FROM Download WHERE PNr=".$_GET["selectedNr"];

          wurde

          $query_Recordset3 = "SELECT * FROM Download WHERE PNr={$_GET["selectedNr"]} ORDER BY Datum DESC";

          und alles wird nun absteigend auf der Webseite ausgegeben.

          Ein harzliches Glückauf

          Tom vom Berg

          http://bergpost.annerschbarrich.de
          .

          --
          Nur selber lernen macht schlau
        2. Habe die Lösung selbst herausgefunden:

          Soso, deine Frage lautete:

          WIE und WO muss ich die ORDER BY   einfügen???

          https://forum.selfhtml.org/?t=169962&m=1110394

          Aber wenn du die Lösung selbst heraus gefunden hast... ;-)

          Ina

    2. echo $begrüßung;

      $query_Recordset3 = "SELECT * FROM Download WHERE PNr=".$_GET["selectedNr"] ;
      Aha. Und wenn ich Deinem Skript nun "0; DROP TABLE Download;" als GET-Parameter "selectedNr" mitgebe?

      Dann beschwert sich mysql_query() nur über die Syntax. Pro mysql_query()-Aufruf kann nur genau ein SQL-Statement abgearbeitet werden. Dein Beispiel einer SQL-Injection funktioniert so nicht.

      Merke: "ALL INPUT IS EVIL!" - behandle Benutzereingaben IMMER mit Vorsicht und maskiere Variablen IMMER kontextsensitiv:
      $query_Recordset3 = "SELECT * FROM Download WHERE PNr='".mysql_real_escape_string($_GET['selectedNr'])."'";

      Auch wenn das DROP-Beispiel nicht funktioniert ist die Behandlung von Eingabewerten gemäß Kontext vorzunehmen, denn es gibt noch genügend Möglichkeiten, wie man ein einzelnes SQL-Statement per SQL-Injection etwas anderes ausführen lassen kann als vom Programmierer vorgesehen. Bestenfalls führt es nur zu einem Syntax-Error:

      SELECT * FROM table WHERE name='O'Brien' <- nach dem O' hört der String auf.

      echo "$verabschiedung $name";

  2. $query_Recordset3 = "SELECT * FROM Download WHERE PNr=".$_GET["selectedNr"]."ORDER BY Datum";

    asc oder desc noch hintendran.

    Ina