Houston wir haben ein Problem!

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

  • Houston wir haben ein Problem!

    Es geht mal wieder um mein Warenkorb.


    Ich habe eine Funktion eingebaut, das die Benutzerdaten in eine Tabelle gespeichert werden. Soweit so gut. Jetzt gibt es daraus eine OnlineID. Diese OnlineID soll den Benutzer die Möglichkeit geben, wenn er das nächstemal in meinen Shop ist, nur die OnlineID einzugeben, statt seine ganzen Daten. Ich frage aber diese Daten clientseitig mit JavaScript ab, ob sie ausgefüllt sind. Wie kann ich das Genze jetzt serverseitig machen unter Berücksichtigung, ob eine OnlineID eingegeben ist.

    Das nächste Problem das ich habe, ist das, User in meinen Warenkorb Artikel in den Warenkorb legen und dann nicht bestellen. Nun bleiben diese Artikel im Warenkorb, bis ich per PHPMyAdmin ran gehe und diese Lösche. Ich weiß, das man das, Automatisieren kann. Diesen Automatismus würde ich gerne nutzen. Ich habe im Warenkorb schon eine Spalte angelegt, in der ich das Daum speicher. Dies Spalte hat den Typ varchar(30) und das Datum wird so gespeichert 03.04.02 22:09.
    Das, das ganze per timestamp geht, weiß ich. Aber wie mach ich es, das er Beispielsweise, alle Einträge löscht, die älter sind als 6 Stunden?

    Zu beiden Problemen brauche ich ein Code-Schnipsel.
    *winks*
    Gilbert
    ------------------------------------------------
    Hilfe für eine Vielzahl von Problemen!!!
    http://www.1st-rootserver.de/

  • #2
    problem 1: nimm das komplette Javascript raus und überprüfe immer Serverseitig ob values gegeben sind.
    Wenn online ID keine prüfung ansonsten prüfung.
    Problem 2:
    Schau Dir mal in MySQL die DATE_SUB oder DATE_ADD Funktion an. Damit kannste ne Löschroutine basteln...
    Zuletzt geändert von MelloPie; 03.04.2002, 21:47.
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      Zu Deinem zweiten Problem. Wenn Du varchar() verwendest sehe ich keine wirtschaftlich vertretbare Möglichkeit. Wenn Du ein Datumsformat verwenden würdest könntest Du das mit dat_sub() bewerkstelligen.

      DELETE from tabelle where datumintabelle < DATE_SUB(datumintabelle,INTERVAL 6 HOUR);

      Also wenn Du es schon weißt mit dem timestamp, warum tust Du es dann nicht? Naja das muß mir wurscht sein. Für Dein Datum im varchar() Feld gibts auch einen Lösungsansatz von mir:

      Du mußt den Inhalt parsen und auf das Format jjjj-mm-tt HH:MM:SS bringen. Das bekommst Du sicher über explode() hin
      3x mindestens, einmal nach . einmal nach blank und einmal nach :

      Dann die Arrays zusammenstückeln. Das schafft man mit einer Zeile Code, die halt dann entsprechend lang ist. So und wenn Du das Datum dann hast kannst über MySQL das Datum - 6 Stunden ermitteln.

      SELECT DATE_SUB($zusammengefuerfeltesdatum,INTERVAL 6 HOUR);

      OK.

      Das Ergebnis was Du dann hast mußt Du wieder umwandeln in ...
      Ach was da zerfranst man sich ja total. Ich nehme an Du mußt eine Funktion dafür schreiben, denn schließlich ist das bestimmen aller Sätze die < sind als das Vergleichsdatum auch nicht von schlechten Eltern. Kann schon sein, daß da eine A4 Seite Code rauskommt, oder eine elendslange Zeile, oder zwei Zeilen? Who knows.

      Kommentar


      • #4
        hm ich hatte heut auch ein paar datum's zeit funktions probleme und ich kann nur empfehlen, das allsetesbeliebte google zu benutzen.. gib da einfach mysql date ein oder ähnliches, und du riegst haufenweise links wie du daten in andre formate umwandelst daten mit andern daten vergleichst bestimmte zeiträaume von daten abziehst /dazuzählst .. alles dabei sogar recht verständlich erklärt^^ hab sogar ich gecheckt

        jaja da past die signatur von einem meinem vorposter kA mehr wer es war
        ich bin Toxical, und werd es auch bleiben

        Kommentar


        • #5
          @MelloPie

          Wie ging das noch mal?
          PHP-Code:
          if(isset $Name !="")
          {
          ...

          *winks*
          Gilbert
          ------------------------------------------------
          Hilfe für eine Vielzahl von Problemen!!!
          http://www.1st-rootserver.de/

          Kommentar


          • #6
            PHP-Code:
            if(isset($Name)) {
               ...

            Kommentar


            • #7
              Re: Houston wir haben ein Problem!

              Original geschrieben von Wotan
              ...
              Ich habe im Warenkorb schon eine Spalte angelegt, in der ich das Daum speicher. Dies Spalte hat den Typ varchar(30) und das Datum wird so gespeichert 03.04.02 22:09.
              Das, das ganze per timestamp geht, weiß ich. Aber wie mach ich es, das er Beispielsweise, alle Einträge löscht, die älter sind als 6 Stunden?
              Du kannst statt Timestamp auch jeden beliebigen anderen Zeit-Typ benutzen; empfehlenswert ist dabei DateTime - also im Format "2002-04-03 22:09:00".
              Gelöscht werden die alten Datensätze dann mit
              mysql_query ("delete from WARENKORB where date_add(DATUM, interval 6 hour)<now()");

              Eine Beschreibung der beiden mysql-Funktionen date_add() und now() gibt es auf http://www.mysql.com/doc/D/a/Date_an...functions.html.
              mein Sport: mein Frühstück: meine Arbeit:

              Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

              Kommentar


              • #8
                @Titus
                Was ist besser?

                Die Function zum Löschen der Warenkörbe in die Seite mit dem Warenkorb einzubauen oder aber sie in die Navigationsleiste mit einbauen.

                Gedanken dazu:
                Die Navigationsleiste wird beim Aufruf des Shop nur ein mal geladen.

                Die Warenkorb-Seite wird mehrfach geladen und verursacht mit der Function den Warenkorb zu durchsuchen ob alte Bestände von nicht Bestellungen da sind ja mehr Trafik.
                *winks*
                Gilbert
                ------------------------------------------------
                Hilfe für eine Vielzahl von Problemen!!!
                http://www.1st-rootserver.de/

                Kommentar


                • #9
                  Hmm ... wenn die Daten sonst nicht weiter stören, sondern nur die DB "verstopfen", dann reicht es sicher das Löschen in die Navigation einzubauen.

                  Noch sinniger wär allerdings, das per cron zu erledigen - wenn möglich.
                  mein Sport: mein Frühstück: meine Arbeit:

                  Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                  Kommentar


                  • #10
                    Re: Re: Houston wir haben ein Problem!

                    Soweit klar.
                    Habe jetzt die Spalte auf DATETIME umgestellt. Habe auch die Änderungen in den Scripten auf das Datum umgestellt.

                    PHP-Code:
                    von Titus
                    mysql_query 
                    ("delete from WARENKORB where 
                    date_add(DATUM, interval 6 hour)<now()"
                    ); 
                    PHP-Code:
                    von mir
                    mysql_query 
                    ("DELETE FROM $korb WHERE 
                    datum(????, INERTVAL 6 HOUR)<NOW()"
                    ); 
                    Bei mir macht die Anweisung nämlich garnichts. Die Artikel bleiben im Warenkorb, obwohl sie von der Zeit schon über schritten sind.

                    Was muss ich anstelle von dem Fragezeichen schreiben?
                    Zuletzt geändert von Wotan; 08.04.2002, 09:01.
                    *winks*
                    Gilbert
                    ------------------------------------------------
                    Hilfe für eine Vielzahl von Problemen!!!
                    http://www.1st-rootserver.de/

                    Kommentar


                    • #11
                      Hat sich erledigt.

                      Man sollte die Abfrage richtig schreiben.

                      Statt DELETE * FROM sollte man DELETE FROM schreiben.
                      Hier im Forum habe ich den Code richtig geschrieben, nur nicht m Script.

                      *brettvorkopf*
                      *winks*
                      Gilbert
                      ------------------------------------------------
                      Hilfe für eine Vielzahl von Problemen!!!
                      http://www.1st-rootserver.de/

                      Kommentar


                      • #12
                        hm
                        PHP-Code:
                        von dir
                        mysql_query 
                        ("DELETE FROM $korb WHERE 
                        datum(????, INERTVAL 6 HOUR)<NOW()"
                        ); 

                        so vielleicht

                        PHP-Code:
                        mysql_query ("delete from $korb where 
                        date_add(datum, interval 6 hour)<now()"
                        ); 
                        die spalte datum muss natürlich mit ensprechendem index existieren ...
                        ich bin Toxical, und werd es auch bleiben

                        Kommentar

                        Lädt...
                        X