Ankündigung

Einklappen
Keine Ankündigung bisher.

Prüfen ob DATE vor DATE liegt ...

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Prüfen ob DATE vor DATE liegt ...

    ... brauche oben genannte Funktion.
    Beide Daten werden als DATE Wert in die Datenbank geschrieben und anschliessend verglichen :

    PHP-Code:
        if ($erstellungsdatum $rpdatum) { 
    Allerdigns funktioniert das ganz nicht ...
    $erstellungsdatum = 11.11.2010
    $rpdatum = 31.12.2008

    Trotzdem komme ich in die Schleife rein ...

    Wo liegt mein Fehler? Ist ein "einfacher Vergleich" mittels Operatoren nicht möglich ?

  • #2
    Für PHP sind Daten wie 11.11.2010 ein String, und wenn man String per >/< miteinander Vergleichen will benutzt PHP afaik den ASCII Wert vom ersten Zeichen hierfür. Wenn du wirklich die Daten vergleichen willst musst du die Daten erstmal in einen Timestamp umwandeln. Das geht mit der Funktion strtotime.
    Oder du benutzt die mit PHP 5.3 neu hinzugekommene Klasse DateTime.

    Kommentar


    • #3
      ähm in deinem Beispiel oben benutzt du die Funktion date fälschlicherweise doch gar nicht...

      Poste mal mehr Code.

      Kommentar


      • #4
        if ($erstellungsdatum < $rpdatum) {
        Das sind keine Datenbankspalten, sondern PHP-Variablen. Wenn die Spaltentypen jeweils date sind, dann kannst du das so selektieren:

        Code:
        SELECT dies,und,das FROM tbl WHERE erstellungsdatum < rpdatum
        [PHP]if ($var != 0) {
        $var = 0;
        }[/PHP]

        Kommentar


        • #5
          Ich versuche mal mehr Code zusammen zu bringen wobei ich mich bei knapp 800 Zeilen trotzdem ein wenig beschränken muss

          Zu erst werden die Daten per POST übergeben und in eine Variable geschrieben :
          PHP-Code:
                          $erstellungsdatum $_POST['erstellungsdatum'];
                          
          $rpdatum $_POST['rpdatum']; 
          Dann werden die Daten auf Fehler geprüft ... Fehler im Sinne dessen, was vom Formular erwartet wird (nämlich rpdatum darf nicht nach erstellungsdatum liegen). Falls ein Fehler auftritt wird eine Variable auf 1 gesetzt ...

          PHP-Code:
                          if ($erstellungsdatum $rpdatum) {
                              
          $fehlerimformular 1;
                          } 
          Später - wenn die Daten in die Datenbank übertragen werden sollen - wird geprüft, ob oben genannte Variable auf 1 gesetzt ist. Wenn ja wird nicht geschrieben. Wenn nein wird geschrieben ...

          PHP-Code:
          if ($fehlerimformular == 0)  {
                              
          mysql_query("INSERT INTO (erstellungsdatum, rpdatum) VALUES (STR_TO_DATE('$erstellungsdatum','%d.%m.%Y'), STR_TO_DATE('$rpdatum','%d.%m.%Y'), 
          So. Ich hoffe ich habe nichts vergessen ...

          EDIT: Ich schau mir mal den Ansatz von Drako an. Aus rein logischem denken glaube ich, dass er am ehesten die Problematik trifft.

          Kommentar


          • #6
            Zitat von themk# Beitrag anzeigen

            EDIT: Ich schau mir mal den Ansatz von Drako an. Aus rein logischem denken glaube ich, dass er am ehesten die Problematik trifft.
            Ehrlich gesagt habe ich gedacht, dass du dich zumindest in die Funktion date eingelesen hast. Deshalb habe ich nach mehr Code gefragt. Hast du scheinbar nicht, und du hast DATE einfach so im Threadtitel verwendet.

            Natürlich musst du das Datum erst mittels mktime in einen UNIX-Timestamp (Integer-Wert) wandeln, bevor du damit Vergleiche anstellen kannst.
            Ich wollte durch meine Nachfrage nur wissen, ob du das überhaupt gemacht hast.

            strtotime wird dir nicht weiterhelfen, da es ein anderes Format erwartet, als du im Eingangspost angegeben hast. Und DateTime wandelt nicht in Timestamps um, sondern formatiert nur Datumsangaben.

            --PBone

            Kommentar


            • #7
              Beide Daten werden als DATE Wert in die Datenbank geschrieben
              Das war verwirrend. Ich dachte auch, dass du die Prüfung bei der Selektion machst.

              Also:

              wenn du die Eingaben in eine date-Spalte schieben willst, dann müssen die ja in folgendem Format vorliegen:
              PHP-Code:
              $erstellungsdatum '2010-11-16';
              $rpdatum '2010-11-17'
              und dann kannst du das auch ganz einfach so prüfen:
              PHP-Code:
              if ($erstellungsdatum $rpdatum) {
                 
              $fehlerimformular 1;

              Aber da die Daten garantiert in einem anderen Format vorliegen, denn sonst hättest du ja nicht gefragt, hilft es zu schreiben:
              PHP-Code:
              if (strtotime($erstellungsdatum) < strtotime($rpdatum)) {
                 
              $fehlerimformular 1;

              [PHP]if ($var != 0) {
              $var = 0;
              }[/PHP]

              Kommentar

              Lädt...
              X