mySQL Datumsvergleich in Select ... where DB-Datum = $Feld funktioniert nicht

  • Hallo zusammen,
    zunächst, ich bin ein Frischling in PHP und MySQL, habt bitte ein wenig Nachsicht mit mir.
    Zu meinem Problem: Zunächst habe ich einen Datensatz in die Tabelle: "Anfragen" geschrieben. Zu jeder ERSTEN Anfrage eines Tages möchte ich in einer zweiten Tabelle: "Reservierung" mehrere Datensätze schreiben. Damit ich nicht mit jeder neuen Anfrage erneut Reservierungen erzeuge, frage ich mit dem Anfragedatum der ERSTEN Anfrage in den Reservierungen nach, ob schon ein Datensatz vorhanden ist. Falls zum Anfragedatum keine Reservierungen existieren, möchte ich mehrere Reservierungen schreiben. Falls Reservierungen existieren, das sollte nach der Logik bei jeder weiteren Anfrage der Fall sein, soll nichts passieren. Ich hoffe, dass ich das Problem gut beschrieben habe.
    Alles funktioniert, bis auf den Select-Vergleich des Reservierungs-Datums gegen das Anfrage-Datum.
    Vergleiche ich im Select-Befehl der Reservierung das Reservierungsdatum gegen eine Konstante z.B. "2017-04-02" funktioniert die Prüfung, vergleiche ich gegen ein übergebenes Datenfeld z.B. $Suchfeld (mit dem Inhalt "2017-04-02" funktioniert die Prüfung NICHT. Ich suche schon 3 Tage erfolglos nach einer Lösung. Danke für Eure Unterstützung und vielleicht sogar mit einer Lösung dieses Problems.


    Hallo nochmal,

    hier habe ich den Programmcode angefügt:

    1. das Hauptprogramm

    2. Das Unterprogramm:

    3. die Bildschirmausgabe:

    Danke für Eure Hilfe.

    • Offizieller Beitrag

    Hi,

    Steht in $_SESSION['suchdatum'] das drin, was Du erwartest?
    Mach evtl. mal ein var_dump( $_SESSION['suchdatum'] ); und poste die Ausgabe hier. I.d.R. werden Steuerzeichen mit übergeben, die Du mit trim() vor dem Vergleich entfernen solltest.

    Und bitte ändere den obigen Beitrag ab, in dem Du den relevanten Code hier postest!
    Niemand hat Lust, sich Bilder anzusehen, um Fehler zu finden.

    Gruß Arne

  • Hallo Arne,
    der Trim-Befehl hat leider nichts gebracht. Im beigefügten Code habe ich mal das Vergleichsdatum über das Feld $suchdatum laufen lassen. Leider findet er dann KEINE Reservierungen.

    Hier die Bildschirmanzeige:

    Denke ich vielleicht zu kompliziert? :roll:

  • Hi Arne, die Syntax eines SQL-Befehls bringt mich um ...
    Habe mit Deinem Hinweis in 3 mySQL-Büchern gesucht und nichts gefunden.
    Bin immer noch der Meinung, nichts falsch gemacht zu haben.
    Für mich sind beide "where-Befehle" identisch, vorausgesetzt das im Feld: $suchdatum der Wert: '2017-04-02' steht.
    Bitte laß mich nicht länger zappeln, ich finde den Fehler nicht.

  • Hallo Arne, aber ...
    im Tabellenfeld der Reservierung UND im "suchdatum steht 2017-04-02 (ohne Anführungszeichen).
    Wieso sind dann beide Felder nicht gleich? Wenn die einfachen Anführungszeichen falsch sind, dann dürfte doch die Abfrage über die Konstante: '2017-04-02' keine Treffer in den Reservierungen anzeigen. Ich verstehe nichts mehr.

    Kannst Du mir bitte den where Befehl posten, damit ich nicht ganz verzweifel?

    • Offizieller Beitrag

    Denk doch bitte nach...

    Wenn der statische Wert mit einfachen Quotes ( Anführungszeichen ) offensichtlich funktioniert, werden die wohl an der Stelle richtig sein! Wo habe ich gesagt, dass die falsch seien?!
    Spätestens seit #6 weißt Du, dass Dir diese sog. SingleQuotes im Variablenwert von $suchdatum fehlen.

    Jetzt zähl bitte 1 und 1 zusammen!
    Sorry, aber da musst Du wirklich selbst drauf kommen, sonst ist der Lerneffekt = 0...

  • Danke für den Hinweis auf den Lerneffekt. Ich werde versuchen dem $suchdatum die einfachen Quotes mitzugeben und teste den Ablauf erneut. Schon jetzt kann ich sagen, dass das Vorgehen aus meiner Sicht völlig unsinnig ist. Sorry. Ich melde mich wieder.

    Hier das Ergebnis - es klappt! - Auch wenn ich den Sinn nicht verstehe.

    Hier die Bildschirmausgabe:

    Auch wenn ich den Sinn nicht verstehe - ich möchte Dir, Arne, herzlich für Deine Geduld und letzlich für eine funktionierende Lösung danken. Danke vielmals. mfG Hans-Werner

    - - - Aktualisiert - - -

    Ich lerne daraus, dass wenn ein Vergleich eines Tabellenfeldes mit dem DATE-Format und einer Variablen z.B. $suchdatum
    notwendig wird, MUSS die Variable nicht nur das Vergleichsdatum, sondern auch noch einfach Quotes (vorne und hinten) enthalten. Sonderbar, aber es funktioniert, wie man sieht.

    Einmal editiert, zuletzt von hpuettma (3. April 2017 um 20:01)