"Verfallsdatum" für Daten?

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

  • "Verfallsdatum" für Daten?

    Ich schreibe gerade ein Anmeldeformular mir eMail Bestätigung. Die Daten werden in einer mySQL Tabelle gespeichert. Nun möchte ich verhindern, dass sich nicht abgeschlossene oder falsche Anmeldungen in der Datenbank als Datenleichen ansammeln.
    Ich habe auch ein Timestamp Feld eingerichtet. Welche elegante Möglichkeit gibt es, um z.B. alle Zeilen (= Tupel?), die älter als 14 Tage sind, zu löschen?

  • #2
    hmm,

    wie überprüfst du denn was Karteileichen sind ?

    Kommentar


    • #3
      Ich hatte mir das so gedacht: Jeder Besucher kann sich eintragen lassen. Er bekommt eine eMail mit einem Bestätigungs Link und seinem Passwort. Dannach hat er eben 14 Tage Zeit auf die eMail zu antworten. Tut er das, wird er aus der Anmeldungs Datenbank gelöscht und in die Besucher Datenbank aufgenommen. Tut er das nicht, soll er nach der Frist automatisch gelöscht werden.

      Für die Besucher Datenbank wollte ich das ähnlich machen nur eben anhand des letzten Login Datums.

      Kommentar


      • #4
        also für solche zwecke lege ich mir ein feld an, in dem das verfallsdatum gespeichert wird.

        z.b.

        Code:
        insert into $table set killtime = date_add(now(), interval 14 day ")
        beim jedem zugriff auf das script wird geprüft, ob bei jemandem das verfallsdatum abgelaufen ist. sollte das der fall sein --> löschen

        in der email an den user sollte ein link zu einem script sein, welches einen lösch-schutz in die db schreibt, damit nur user gelöscht werde, die nicht auf den link geklicket haben, bzw. bei denen die email falsch war.

        ps. das feld killtime sollte natürlich als "date" formatiert sein
        h.a.n.d.
        Schmalle

        http://impressed.by
        http://blog.schmalenberger.it



        Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
        ... nur ohne :-)

        Kommentar


        • #5
          ähm halbwegs hab ich das verstanden.
          Nur muss Ich leider feststellen, dass mein Wissen über mySQL viel zu oberflächlich ist. Ich habe als einzige Quelle nur die Anleitung von http://reeg.net . Die Doku ist als Einstieg wunderbar! Nur für mehr halt nicht :-(

          Ich kenne bisher nur diesen insert Befehl:
          INSERT INTO table_name [ (feld_name,...) ] VALUES (werte,...)

          Kann ich da einfach "SET feld_name = wert" hintendran hängen? Oder muss das in einen eigenen Befehl?

          Die andere Sache ist die: Wie kriege ich mit PHP das aktuelle Datum für die Abfrage in das entsprechende Format?

          Also mit den Datums Funktionen in PHP und mySQL blike ich nicht durch. Schon bei sowas einfachem wie Geburtsdatum -> Alter komm ich nicht richtig weiter. Gibt es vielleicht ein Tutorial oder ein Buch, wo auf sowas näher eingegangen wird? (am besten auch gleich eins für diese "regulären Ausdrücke" )

          ??? Fragen über Fragen

          Danke schon mal im Vorraus *g*

          Kommentar


          • #6
            reguläre ausdrücke??? da frag mal JoelH ... der liebt die

            aber zu deinen probs. zum einen díe sache mit insert. das funzt genau so:

            Code:
            $eintrag = mysql_query(" insert into $tabelle set feld='$daten_1', feld2='$daten_2' ");
            die sache mit dem datum um datum auzugeben ( in php ) den befehl date() nutzen. z.b. so:

            Code:
            echo date('d.m.Y') // ergibt 14.09.2001
            in mysql sieht das anders aus:

            Code:
            // ich gehe hierbei davon aus, dass das feld "datum" als date formatiert ist. 
            
            insert into $tabelle set datum=NOW()
            
            // ergibt einen eintrag mit dem datum von heute.
            
            insert into $tabelle set datum = date_add(now(), interval 14 day 
            
            // ergibt einen eintrag mit dem datum von heute + 14 tage
            
            um das datum ins deutsche format auszugeben so tun:
            
            select date_format(datum, 'd.m.Y') from $tabelle
            
            // bei der ausgabe kommt dann wieder 14.09.2001. aber in der db steht 2001-09-14!!!
            hoffe das hilft ...
            h.a.n.d.
            Schmalle

            http://impressed.by
            http://blog.schmalenberger.it



            Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
            ... nur ohne :-)

            Kommentar


            • #7
              nachtrag zu mysql: guck mal da: http://www.mysql.com

              und http://www.php.net/manual/de
              h.a.n.d.
              Schmalle

              http://impressed.by
              http://blog.schmalenberger.it



              Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
              ... nur ohne :-)

              Kommentar


              • #8
                Die URLs kenne ich. Das manual auf mysql.com ist sehr umfangreich nur tuhe ich mir mit dem Englisch etwas schwer. Das deutsche PHP Handbuch ist wunderbar. Der ausführliche Teil scheint nur nicht ganz vollständig zu sein.

                Zurück zum Thema:

                Achja du hast da wohl PHP und mySQL verwechselt: 'd.m.Y' statt '%d.%m.%Y' Oder?

                select date_format(datum, '%d.%m.%Y') from $tabelle

                Wenn ich das richtig verstanden habe, sollte das die ganze Datums-Spalte zurück geben?

                Code:
                $query = "select date_format(Verfallsdatum, '%d.%m.%Y') from Anmeldung";
                $erg = mysql_query($query, $mysql);
                $i = 0;
                while ($row = mysql_fetch_array ($erg)) {
                    echo $row[$i];
                    $i++;
                }
                Gibt bei mir nur das 1. Datum zurück.

                Kommentar


                • #9
                  Ich habe mir dise Zeilen ausgedacht, um die veralteten Einträge zu löschen:

                  Code:
                  $datum = date('Y-m-d');
                  $query = "delete from tabelle where datum > $datum";
                  Ich denke mal, dass das funzt.

                  Kommentar


                  • #10
                    versuchs mal so:

                    Code:
                    $query = "select date_format(Verfallsdatum, 'd.m.Y') from Anmeldung";
                    $erg = mysql_query($query, $mysql);
                    while ($row = mysql_fetch_array($erg)) {
                        echo "$row[0] <p>";
                    }
                    nein ich habe nichts verwechselt! die "%" sind überflüsseig!

                    wenn wieder nur ein ergebnis rauskommt, sind die anderen einträge in einem anderen format, oder ich bin bescheuert

                    h.a.n.d.
                    Schmalle

                    http://impressed.by
                    http://blog.schmalenberger.it



                    Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
                    ... nur ohne :-)

                    Kommentar


                    • #11
                      da haben wir wohl zeitgleich gepostet

                      zu deiner lösch - funktion. das geht nur, wenn das datum auch im format 'Y-m-d' in der datenbank steht!!

                      wenn es aber im format 'd.m.Y' drinsteht, musst du es auch anders löschen!

                      h.a.n.d.
                      Schmalle

                      http://impressed.by
                      http://blog.schmalenberger.it



                      Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
                      ... nur ohne :-)

                      Kommentar


                      • #12
                        Achso

                        while ($row = mysql_fetch_array($erg)) {
                        echo "$row[0] <p>";
                        }

                        So funktioniert es. Dummer Fehler von mir. Allerdings nur wenn ich die % mit dazuschreibe! Falls nicht, wird nur 'd.m.Y' zurückgegeben.

                        Wegen der Lösch-Abfrage: Das Feld ist vom Typ date. Ist das Format damit nicht vorgegeben?

                        [Editiert von FBeye am 14-09-2001 um 20:17]

                        Kommentar


                        • #13
                          vom prinzip her ist das format damit auf 'Y-m-d' gesetzt. man kann aber mit
                          Code:
                          $dat = date('d.m.Y');
                          
                          ( "insert into $table set datum = date_format($dat, 'd.m.Y') ");
                          dieses format ändern. dann steht halt alles im format 'd.m.Y.' drin ...

                          datums funktionen können schön verwirrend sein

                          h.a.n.d.
                          Schmalle

                          http://impressed.by
                          http://blog.schmalenberger.it



                          Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
                          ... nur ohne :-)

                          Kommentar


                          • #14
                            OK es funktioniert soweit alles.

                            DANKE

                            Gibt es eine Möglichkeit die Formatierung des Datum Feldes ab zu fragen? Damit man die Abfrage entsprechend anpassen kann? Oder gibt es da eine alternative Möglichkeit? Ich gehe mal davon aus, dass das Format in jedem Datensatz unterschiedlich sein kann.

                            Die Datums Funktionen habens echt in sich!

                            [Editiert von FBeye am 14-09-2001 um 21:11]

                            Kommentar

                            Lädt...
                            X