Probleme timestamp in tabelle upzudaten

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

  • Probleme timestamp in tabelle upzudaten

    Hallo,

    ich möchte in einen Tabellensatz einen Eintrag, der als timestamp eingestellt ist aktualisieren. Mein Problem ist jedoch, dass das query erfolgreich ist, aber trotzdem nichts in der tabelle upgedated wird . Wäre nett, wenn ihr mir mit meinem kleinen Problem weiterhelfen könntet.

    PHP-Code:
    mysql_query ("UPDATE cn_members SET online_datum='".time()."' WHERE nick='".$userdaten["name"]."'"); 
    online_datum timestamp(14) NOT NULL
    mfg
    debuGGer
    Zuletzt geändert von debuGGer; 06.12.2002, 19:35.

  • #2
    Ich nehme an es handelt sich um eine Begriffsverwirrung um den Begriff timestamp:

    Der MySQL-Feldtyp timestamp(14) erfordert einen Inhalt nach dem Format "YYYYMMDDHHMMSS"
    http://www.mysql.com/doc/en/DATETIME.html

    PHP liefert mit mit der Funktion time(), die seit Beginn der UNIX-Epoche (Januar 1 1970 00:00:00 GMT) bis jetzt vergangenen Sekunden.
    http://www.php3.de/manual/de/function.time.php

    Wenn Du deine Query so schreibst, wird es klappen, wobei now() eine MySQL Funktion und keine PHP-Funktion ist:
    PHP-Code:
    mysql_query ("UPDATE cn_members SET online_datum=now() WHERE nick='$userdaten[name]'"); 
    Noch was, eine Empfehlung. Wenn (noch) möglich verwende anstatt dem MySQL-Feldtyp timestamp(14) besser den Feldtyp DATETIME der die Uhrzeit im Format 'YYYY-MM-DD HH:MM:SS' erfordert. Ich zumindest verwende diesen Typ.
    Zuletzt geändert von hand; 06.12.2002, 19:54.

    Kommentar


    • #3
      Noch was, eine Empfehlung. Wenn (noch) möglich verwende anstatt dem MySQL-Feldtyp timestamp(14) besser den Feldtyp DATETIME der die Uhrzeit im Format 'YYYY-MM-DD HH:MM:SS' erfordert. Ich zumindest verwende diesen Typ.
      ich würde eher empfehlen, stattdessen den unix-timestamp time() von php als integer in die db zu schreiben.

      damit bist du wesentlich flexibler, was die spätere ausgabe angeht, die kannst du mit date() fast nach belieben umformatieren, was bei einem festen eintrag in der form 'YYYY-MM-DD HH:MM:SS' erst umständliche string-operationen erfordern würde...
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        Danke für die Vorschläge, ich werde mir diese heute noch durch den Kopf gehen lassen .

        @hand
        Gibt es in PHP eine Möglichkeit das DATETIME Feld unkompliziert zu formatieren?
        [...]was bei einem festen eintrag in der form 'YYYY-MM-DD HH:MM:SS' erst umständliche string-operationen erfordern würde[...]
        Ich meine, wenn man z.B. nur Jahr und Sekunde anzeigen will (was jedoch keiner machen wird).

        mfg debuGGer

        Kommentar


        • #5
          Gibt es in PHP eine Möglichkeit das DATETIME Feld unkompliziert zu formatieren?

          Ich meine, wenn man z.B. nur Jahr und Sekunde anzeigen will (was jedoch keiner machen wird).
          tja, wie gesagt, hier musst du dann anfangen mit substrings zu arbeiten.

          wenn du time() als datenformat nimmst, kannst du das ganz einfach mit date machen:

          echo date("Y s", $zeit);
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Original geschrieben von wahsaga
            wenn du time() als datenformat nimmst, kannst du das ganz einfach mit date machen:

            echo date("Y s", $zeit);
            Das ist mir ja klar, so ungefähr arbeite ich ja auch. Wieso verwendest du eigentlich integer anstatt timestamp in der sql Datenbank? Der Effekt ist doch ganz genau der selbe oder habe ich da was falsch verstanden?

            Die Frage an hand habe ich gestellt, weil seine Methode IMHO schwerer ist als mit timestamp zu arbeiten aber das gleiche Ergebnis bringt. Also nur rein interesse halber. Vielleicht liege ich ja falsch, er soll halt mal versuchen zu erklären wieso er seine Methode benutzt

            Kommentar


            • #7
              Oft sind die Dinge viel einfacher, als man sie vermutet

              Sorry, aber man muß nicht komplizierte "substring" Operationen durchführen oder PHP bemühen um lesbare oder gewünschte Datums-Anzeigeformate zu generieren.

              Das alles kann mySQL auch alleine mit Hilfe eigener Funktionen. Was wiederum die Administration erleichtert, denn man kann sprechende mySQL Routinen gegen die Datenbank ablaufen lassen (Massenupdates, oder was auch immer), die sich im wesentlichen syntaktisch nicht viel von den in den PHP Skripten verwendeten SQL Statements unterscheiden.

              Es geht ja nicht nur um eine etwaige Formatierung, die selbstverständlich ganz einfach mit Hilfe der mySQL Funktion date_format() zu bewerkstelligen ist, Du wolltest Jahr und Sekunde? Bitte sehr:
              Code:
              mysql> SELECT DATE_FORMAT('1997-10-04 22:23:51', '%Y ..sekunden.. %s' );
                      -> '1997 ..sekunden.. 51'
              ... es geht auch um die Möglichkeit mit einem Datum oder einer Zeitangabe manipulieren zu können.

              mySQL bietet eine große Anzahl sehr brauchbarer Datums- und Zeitoperationsfunktionen (Addition, Subtraktion, Quartalsberechnung, ...) (Bem.: Da ist es aber wieder egal, ob Du mySQL Feldformat timestamp(14), date oder datetime verwendest.)

              Hier sind die Funktionen im Wesentlichen zusammengefasst: http://www.mysql.com/doc/en/Date_and...functions.html

              Es sollte ja möglich sein, dass man auf die Daten der Datenbank von mehreren Stellen über mehrere Wege aus zugreifen kann. Wenn man jetzt einen unix timestamp darin ablegen würde und via ODBC mit MS Access zugreifen wollte, hätte man schon das erste Problem mit der Darstellung des Datums. MS Access zeigt sicher den unixtimestamp als Integer an. Erst durch einiges Customizingeschick kann (aber auch nicht jeder) dann das Datum wie gewünscht formatiert zur Anzeige gebracht werden. Noch blöder wird es, wenn über andere Programme anderer Betriebsystemen die Daten verändert werden sollten (kann ja vorkommen) - da hat man wieder eine nicht unwesentliche Hürde, die Nachbildung des unix timestamps.

              Wenn ich ein Datum über den linemode ändern will müßte ich bei Verwendung des unix timestamps kompliziert herumrechnen. Anstatt des 3.4.2002 18:17 Uhr möchte ich den 21.4.2002 13:12 haben - und jetzt? Oder ich möchte 4 Stunden zum 3.4.2002 22:17 addieren - und jetzt? Mit den mySQL Funktionen funzt geht das easy:

              PHP-Code:
              SELECT DATE_ADD("2002-04-03 22:17"INTERVAL 4 HOUR);
                     -> 
              2002-04-04 02:17 
              Zuletzt geändert von hand; 07.12.2002, 19:48.

              Kommentar


              • #8
                Wieso verwendest du eigentlich integer anstatt timestamp in der sql Datenbank? Der Effekt ist doch ganz genau der selbe oder habe ich da was falsch verstanden?
                wenn du dem feld in der tabelle den typ TIMESTAMP gibst, handelt es sich dabei dann um einen mysql-timestamp.
                der wird bei update-operationen automatisch wieder auf die aktuelle zeit gesetzt (aber nur der erste, wenn du mehrere in einer zeile hast).


                ich benutze aber den unix-timestamp.
                das ist der, den du in php mit time() erzeugst.
                und das ist halt einfach eine zahl, nämlich die der sekunden die seit dem 1.1.1970 vergangen sind.
                deshalb trage ich den auch als integer in meine db ein.
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar

                Lädt...
                X