• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Spalten nur vom aktuellen Monat ausgeben?

MinO

Neues Mitglied
Hallo,

ich habe folgende abfrage:
Code:
$buchungen = db_query("SELECT * FROM ".$db_prefix."_buchungen WHERE uid=".$_SESSION['uid']." ORDER BY buchungszeit DESC LIMIT ".($_GET['page'] > 0 ? $_GET['page']*50 : 0).",50");

Diese abfrage ist dafür zuständig das meinen Usern ihre umsätze angezeigt werden, das neuste immer zu erst. Wie man sehen kann wird hier auch die zeit+datum in die Datenbank gespeichert "buchungszeit". Nun habe ich vor nur einträge auszugeben die vom aktuellen Monat sind. Weiß jemand ob bzw. wie sowas machbar ist?

Würde mich sehr freuen, wenn mir jemand helfen kann :D

Lieben Gruß.
 
PHP:
$buchungen = db_query("
    SELECT 
        * 
    FROM 
        ".$db_prefix."_buchungen 
    WHERE 
        uid=".$_SESSION['uid']." 
    AND 
        (DATE_FORMAT(buchungszeit, %m) = ".$monat.") 
    ORDER BY 
        buchungszeit 
    DESC LIMIT 
        ".($_GET['page'] > 0 ? $_GET['page']*50 : 0)."
    ,50");
$monat ersetzen mit dem numerischen Wert des gewünschten Monats.
Wert kann zwischen 01 für Januar und 12 für Dezember liegen.

Desweiteren bietet dein SQL-Query genug Angriffsfläche für SQL-Injections!
 
Danke für die Hilfe und den hinweis, kann man das auch so machen das die abfrage automatisch den aktuellen Monat erkennt und übernimmt? Also wenn heute Juni ist das nur einträge vom Juni angezeigt werden und wenn morgen Juli ist nur einträge vom Juli, halt so das ich das nicht immer umändern muss?
 
Über ein "interselect" wird es wegen der Verrechnung der Seite nicht gehen.

.($_GET['page'] > 0 ? $_GET['page']*50 : 0)."
,50");

Da $_GET['page'] mit 50 multipliziert wird, ansonsten auf 0 gesetzt wird, sollte SQL-Code nicht interpretiert werden b.z.w mit -1 multipliziert werden. Ich sehe das Problem immer noch nicht.
 
Über ein "interselect" wird es wegen der Verrechnung der Seite nicht gehen.

.($_GET['page'] > 0 ? $_GET['page']*50 : 0)."
,50");

Da $_GET['page'] mit 50 multipliziert wird, ansonsten auf 0 gesetzt wird, sollte SQL-Code nicht interpretiert werden b.z.w mit -1 multipliziert werden. Ich sehe das Problem immer noch nicht.
Ja, das hatte ich auch gesehen, deshlab der Edit.

Trotzdem kann man bei der Schreibweise natürlich darüber spekulieren, ob der OP davon weiß. Insofern ist der Hinweis zumindest nützlich.
 
Wollte deinen Beitrag nicht schmälern, natürlich muss man aufpassen, da hast du vollkommen recht.
Allerdings ist das auch ein schönes Beispiel, wie man sich gegen sowas schützen könnte. Der einfachste weg ist wohl, einen nummerischen Wert einfach mit 1 zu multiplizieren.
 
Ist aber meines Erachtens kein schöner Weg. (Ich war aber auch nie Fan davon, Type-Casting durch solche Operation durchzuführen. Gilt auch für Geschichten wie: $var = "$var";)

intval und Konsorten oder die „echten“ Casting-Funktionen finde ich da wesentlich aussagekräftiger.

- PHP: Type Juggling - Manual
 
Zurück
Oben