Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] MySqli Update und If Statement Problem

Einklappen

Neue Werbung 2019

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

  • [Erledigt] MySqli Update und If Statement Problem

    Hallo zusammen,

    ich habe ein kleines Problem betreffend mysql Update mit If Bedingung.

    Undzwar soll bei einem Update überprüft werden ob das hinterlegte Datum kleiner ist als das jetztige, wenn dies zutrifft, soll das aktuelle Datum genommen werden [NOW()], wenn nicht das hinterlegte.

    Meine Query:
    PHP-Code:
    UPDATE user SET 
         member 
    "Premium"
         
    expiredate DATE_ADD(IF(expiredate NOW(), NOW(), expiredate), INTERVAL 1 DAYS 
    WHERE 
         ID 
    27 
    EDIT: Das Problem ist, dass die If Bedingung nicht funktioniert!

    Sieht einer das Problem und kann mir erklären was das Problem ist?

    Gruß
    prophet

    Ps.: Ja es wird MySqli mit prepared Statements benutzt


  • #2
    Was das Problem ist solltest du eigentlich uns erklären, nicht andersrum.
    Zitat von nikosch
    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

    Kommentar


    • #3
      Warum schiebst Du das nicht einfach in die Where-Klausel mit rein?
      Competence-Center -> Enjoy the Informatrix
      PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

      Kommentar


      • #4
        Ahh verdammt vergessen. Das Problem ist, dass die If Bedingung nicht funktioniert!

        @Arne_Drews:
        Was meinst du soll in die Where Klausel mit rein?

        Kommentar


        • #5
          Na Du setzt einfach expiredate auf NOW() wo die ID passt UND das Datum kleiner ist!
          Competence-Center -> Enjoy the Informatrix
          PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

          Kommentar


          • #6
            Das ist aber nicht der Sinn der Query.
            Die Query soll einem User x Tage gutschreiben, also:
            PHP-Code:
            DATE_ADD(expiredateINTERVAL 1 DAYS 
            Da jedoch das expiredate auch in der Vergangenheit liegen kann (zB. gestern), und das Datum somit kleiner ist als das aktuelle, soll das jetztige Datum per NOW() genommen werden, wenn das Datum jedoch größer ist, soll das bereits in der Datenbank hinterlegte genommen werden, da es sein kann, dass der User bereits Premiumstatus hat und seinen Account verlängert.

            Kommentar


            • #7
              Die Query soll einem User x Tage gutschreiben, also:
              Ich gehe nur nach dieser Aussage:
              Undzwar soll bei einem Update überprüft werden ob das hinterlegte Datum kleiner ist als das jetztige, wenn dies zutrifft, soll das aktuelle Datum genommen werden [NOW()], wenn nicht das hinterlegte.
              , was hier anders formuliert für mich dasselbe aussagt:
              Da jedoch das expiredate auch in der Vergangenheit liegen kann (zB. gestern), und das Datum somit kleiner ist als das aktuelle, soll das jetztige Datum per NOW() genommen werden, wenn das Datum jedoch größer ist, soll das bereits in der Datenbank hinterlegte genommen werden
              Und das erreichst Du mit einem einfachen Konstrukt, ähnlich diesem:
              Code:
              UPDATE
                  `user`
              
              SET 
                  `member` = 'Premium', 
                  `expiredate` = NOW()
              
              WHERE 
                  `ID` = 27
                  AND `expiredate` < NOW()
              , wobei das jetzt nur als Erklärung dient, und nicht als lauffähig gepostet ist.
              Competence-Center -> Enjoy the Informatrix
              PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

              Kommentar


              • #8
                Ok ich formuliere es nochmal anders:

                Dem User sollen eine Anzahl Tage gutgeschrieben werden, dies mache ich mit expiredate = DATE_ADD().
                Wenn jetzt expiredate zB.: 0000-00-00 00:00:00 ist (Was der default-Wert ist), würde der DATE_ADD Teil folgendermaßen aussehen.
                PHP-Code:
                expiredate DATE_ADD("0000-00-00 00:00:00"INTERVAL 1 DAY
                und das würde wieder 0000-00-00 00:00:00 zurückliefern.
                Wenn jetzt das Datum zB 2014-11-23 12:12:12 ist, würde
                PHP-Code:
                expiredate DATE_ADD("2014-11-23 12:12:12 ist"INTERVAL 1 DAY
                2014-11-24 12:12:12 zurückliefern.

                Das Datum das in expiredate gesetzt werden soll, MUSS bei der Query IMMER in der Zukunft liegen, somit bringt das
                Code:
                `expiredate` = NOW()
                nichts.

                Deine Query würde was bringen, wenn ich 2 Requests machen würde, das möchte ich jedoch vermeiden.

                Kommentar


                • #9
                  Ok, aber sollte es dann nicht mit ein wenig Anpassung machbar sein:
                  Code:
                  UPDATE
                      `user`
                  
                  SET 
                      `member` = 'Premium', 
                      `expiredate` = DATE_ADD( NOW(), INTERVAL 1 DAY )
                  
                  WHERE 
                      `ID` = 27
                      AND `expiredate` < NOW()
                  , das sollte vom Prinzip her expiredate auf Heute + 1 Tag setzen, wenn der Datensatz die ID 27 hat UND expiredate zurückliegt...
                  Competence-Center -> Enjoy the Informatrix
                  PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                  Kommentar


                  • #10
                    Ahh damned, hab den Fehler gefunden.
                    Meine Query hätte von anfang an funktioniert, wenn ich nicht den Plural von Tag genommen hätte... -.-"
                    Was ein Buchstabe aus machen kann...

                    Kommentar

                    Lädt...
                    X