Announcement

Collapse
No announcement yet.

Problem mit "Select from where"-Abfrage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit "Select from where"-Abfrage

    hallo zusammen,

    der unten stehende code gibt mir datum und veranstaltung nach datum sortiert in eine html-tabelle aus.
    jetzt möchte ich aber nur die veranstaltungen eines bestimmten zeitraumes angezeigt bekommen, habe aber schwierigkeiten mit der syntax für die entsprechende where-bedingung.

    startdatum und enddatum sind in der datenbank als int(20) definiert.
    wenn ich mich nicht irre müssen bereits in der sql-abfrage die variablen startdatum und enddatum in ein datumsformat umgewandelt werden um dann zu prüfen, ob deren inhalt innerhalb eines bestimmten zeitraumes liegt. genau dieser teil bereitet mir probleme, oder ich sitze schon so lange an dem problem, dass ich den wald vor lauter bäumen nicht mehr sehe.
    oder mache ich hier schon einen grundsätzlichen fehler wenn ich mit

    "......where startdatum >= datum1 AND enddatum <= datum2"

    versuche das Datum zu vergleichen? Für hilfreiche Tipps wäre ich verdammt dankbar

    r. aus g.


    php-code ist folgender:

    if ($order=="")
    {
    $order="startdatum";
    $dir="DESC";
    }

    $abfrage = "SELECT `startdatum`, `enddatum`, `titel` from Termine ORDER BY $order";

    $ergebnis = @mysql_query($abfrage);

    while($row=@mysql_fetch_array($ergebnis))
    {

    $startDatum=$row['startdatum'];
    $endDatum=$row['enddatum'];
    $Titel=$row['titel'];

    $startDatum = date("d.m.Y",$startDatum);
    $endDatum = date("d.m.Y",$endDatum);
    if ($startDatum == $endDatum) $Datum = $startDatum;
    else $Datum = $startDatum." bis ".$endDatum;

    echo"<tr>\n";
    echo" <td nowrap><font color=\"#000000\">$Datum</font></td>";
    echo" <td nowrap><font color=\"#000000\">$Titel</font></td>";
    echo"</tr>\n";

    }
    ?>

  • #2
    Hi,

    verwendest du auch Anführungszeichen um dein Datum herum?

    Übrigens dein Code sieht so aus als wäre er anfällig für folgende Sicherheistrisiken:
    http://de.wikipedia.org/wiki/SQL-Injection
    http://de.wikipedia.org/wiki/Cross-Site_Scripting
    "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

    Viele Grüße Novi

    Comment


    • #3
      Hallo,
      Originally posted by von_nix_ne_ahnung View Post
      ... oder mache ich hier schon einen grundsätzlichen fehler...
      Ja, den hier:
      Originally posted by von_nix_ne_ahnung View Post
      ...startdatum und enddatum sind in der datenbank als int(20) definiert.
      Welchen vernünftigen Grund gibt es einen Datumswert als Integer und nicht als Datum abzulegen?

      Originally posted by von_nix_ne_ahnung View Post
      ...
      wenn ich mich nicht irre müssen bereits in der sql-abfrage die variablen startdatum und enddatum in ein datumsformat umgewandelt werden um dann zu prüfen, ob deren inhalt innerhalb eines bestimmten zeitraumes liegt. genau dieser teil bereitet mir probleme, ...
      Da hier keiner ausser dir weiß wie du das Datum für startdatum und enddatum in einen Integer "codiert" hast, kann das auch keiner außer dir konkret beantworten. Allgemein gilt: Die Variablen $startDatum und $endDatum müssen vom gleichen Format und identisch codiert sein, wie die abzufragenden Spalten startdatum und enddatum.

      Originally posted by von_nix_ne_ahnung View Post
      ...
      wenn ich mit

      "......where startdatum >= datum1 AND enddatum <= datum2"

      versuche das Datum zu vergleichen?
      Dies findet nur Termine, die komplett innerhalb des Suchzeitraumes liegen.
      Wenn auch die Termine gefunden werden sollen, die im Suchzeitraum nur beginnen oder enden, dann wäre:
      [highlight=sql]
      ...
      where startdatum <= datum2 AND enddatum >= datum1
      [/highlight]
      besser. (Unter der Voraussetzung, dass datum1 der Beginn und datum2 das Ende des Suchzeitraumes ist.)

      Gruß Falk
      Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

      Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

      Comment


      • #4
        Originally posted by von_nix_ne_ahnung View Post
        startdatum und enddatum sind in der datenbank als int(20) definiert.
        Hi,

        das hatte ich wohl überlesen. Kann es sein, dass du die Zeit in Form eines Timestamps speicherst. Wenn ja, würde ich zumindest die Spalte vom Typ timestamp wählen.

        Wenn du deine als Integer gespeicherten Timestamp-Werte mit anderen Timestamps in deiner Where-Klausel vergleichst dürfte es eigentlich keine Probleme geben.
        "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

        Viele Grüße Novi

        Comment

        Working...
        X