Anzeige

TIMESTAMP update will nicht

TIMESTAMP update will nicht | PSD-Tutorials.de

Erstellt von thexe, 26.10.2008.

  1. thexe

    thexe ein Albtraum

    Dabei seit:
    11.11.2007
    Beiträge:
    551
    Geschlecht:
    männlich
    Ort:
    A:\autostart.exe
    Software:
    CS5 Design Premium
    Kameratyp:
    Pentax K200D
    TIMESTAMP update will nicht
    für meinen Mitgliederbereich bau ich derzeit nen eigenes Forum, klappt soweit auch schon ganz gut, aber damits auch einigermaßen übersichtlich bleibt, möcht ich anzeigen, ob neue Beiträge geschrieben wurden seit der letzten Aktivität.
    Dazu hab ich ne neue Tabelle erstellt, die auf die User-ID verweist und bei aufrufen eines bestimmten Scripts die Tabelle an der Stelle der User-ID (die ich in ner Session habe) updatet.
    Eigentlich hab ich CURRENT_TIMESTAMP on UPDATE in der DB als Attribut angegeben, aber das führt er nicht aus.

    Mein Update-Script-Snippet:
    PHP:
    1. mysql_query("UPDATE last_online SET ip='".$_SERVER['REMOTE_ADDR']."' WHERE usr_id LIKE '".$_SESSION['ID']."'");
    Meine DB-Struktur: (das Überflüssige hab ich mal rausgelassen)
    id int(11) auto_increment
    usr_id int(11) time timestamp ON UPDATE CURRENT_TIMESTAMP CURRENT_TIMESTAMP
    ip varchar(32)

    Wie bekomm ich den aktuellen TIMESTAMP vom Script nun in meine Datenbank?
    MfG the-xe
     
    #1      
  2. saila

    saila Moderatorle

    Dabei seit:
    21.06.2006
    Beiträge:
    2.239
    Geschlecht:
    männlich
    Ort:
    50°48'23.69" N 7°14'22.19" O
    Software:
    Eclipse, PHP5 OO, MySQL5, CSS(auch Barrierefrei), JS, Symfony
    TIMESTAMP update will nicht
    AW: TIMESTAMP update will nicht

    Hi,

    was bewirkt den dein LIKE in der Bedingung?

    PHP:
    1.  
    2. mysql_query("UPDATE ". $table ." SET zeit = ". time() ." WHERE userid = ". (int)$_SESSION['ID'] );
    3.  
    Es gibt auch noch andere Möglichkeiten die Zeitangaben per SQL direkt zu markieren.
     
    #2      
  3. thexe

    thexe ein Albtraum

    Dabei seit:
    11.11.2007
    Beiträge:
    551
    Geschlecht:
    männlich
    Ort:
    A:\autostart.exe
    Software:
    CS5 Design Premium
    Kameratyp:
    Pentax K200D
    TIMESTAMP update will nicht
    AW: TIMESTAMP update will nicht

    das like ist/war mein Vergleichsoperator von der Session und der ID in der DB, man kanns auch mit nem Gleichheitszeichen machen, hab ich jetzt auch so, allerdings besteht das Problem weiterhin.

    Die IP, die ich ja mit-update, wird auch korrekt ersetzt, bloß versteh ich nicht, wieso das Auto-Update beim Timestamp fehlschlägt ...

    Und deine Möglichkeit hab ich mal ausprobiert, funktioniert leider auch nicht ...
     
    #3      
  4. saila

    saila Moderatorle

    Dabei seit:
    21.06.2006
    Beiträge:
    2.239
    Geschlecht:
    männlich
    Ort:
    50°48'23.69" N 7°14'22.19" O
    Software:
    Eclipse, PHP5 OO, MySQL5, CSS(auch Barrierefrei), JS, Symfony
    TIMESTAMP update will nicht
    AW: TIMESTAMP update will nicht

    Meine Möglichkeit funktioniert garantiert - sofern du ein Intenger-Wert von 10 für die Zeitangabe festgelegt hast. Frage ist nur, ob du es korrekt übernommen hast. Wo steht übrigens im MySql-Manual, das Zeiten automatisch bei einem Update angepasst werden?

    Übrigens - wenn du CURRENT_TIMESTAMP verwenden willst, musst du dein Statement entsprechend mit NOW() anpassen.

    Sprich
    PHP:
    1.  
    2. mysql_query("UPDATE ". $table ." SET zeit = NOW(), ip = ". (int)$_SESSION['REMOTE_ADDR'] ." WHERE ID = ". (int)$_SESSION['id'];
    3. [php]
     
    Zuletzt bearbeitet: 26.10.2008
    #4      
  5. thexe

    thexe ein Albtraum

    Dabei seit:
    11.11.2007
    Beiträge:
    551
    Geschlecht:
    männlich
    Ort:
    A:\autostart.exe
    Software:
    CS5 Design Premium
    Kameratyp:
    Pentax K200D
    TIMESTAMP update will nicht
    AW: TIMESTAMP update will nicht

    nirgends, ich hab diese Möglichkeit als Einstellung in meiner Datenbank zur Verfügung, was es so ganz genau damit auf sich hat kann ich nicht genau sagen, dafür fehlt mir einfach noch zuviel Wissen rund um PHP, bin bloß ein kleiner Fisch, der allerdings das bisschen, was er kann, gut umzusetzen weiß, meistens jedenfalls :D
    Und für den Rest gibts ja zum Glück so nette Profis wie hier, die einem immer mal wieder ein wenig auf die Sprünge helfen, und damit mein Wissen erfolgreich erweitern; ein Danke-Schön an jeden, der sich hiermit angesprochen fühlt.


    Zurück zum Problem: das hat sich grad in Rauch aufgelöst, keine Ahnung wieso, ich hab einfach mal als IP einen Text-Eintrag definiert, der erst nicht eingefügt wurde, weil dieses zeit=NOW() drinn war, nachdem ich das rausgelöscht hatte wurde der Textstring in die IP-Sektion geschrieben und der TIMESTAMP richtig automatisch geupdatet.
    Ich hab nun $ip=$_SERVER['REMOTE_ADDR']; gesetzt, jetzt scheints zu funktionieren.
    Wie gesagt, keine Ahnung warum, Computer sind ja noch launischer als Frauen :uhm:

    Deshalb noch einmal ein riesen-rosa-Danke-Schön von mir :)
    MfG the-xe
     
    #5      
  6. saila

    saila Moderatorle

    Dabei seit:
    21.06.2006
    Beiträge:
    2.239
    Geschlecht:
    männlich
    Ort:
    50°48'23.69" N 7°14'22.19" O
    Software:
    Eclipse, PHP5 OO, MySQL5, CSS(auch Barrierefrei), JS, Symfony
    TIMESTAMP update will nicht
    AW: TIMESTAMP update will nicht

    Gerne, auch wenn nichts von alle dem geholfen hat. Allerdings mal die Frage - wie liest du den TIMESTAMP den aus, wenn er in keiner Tablllenspalte enthalten ist oder nimmst du den TIMESTAMP der gesamten Tabelle was sich als etwas unsinnig herausstellen dürfte für deine angedachte Verwendung?
     
    #6      
  7. thexe

    thexe ein Albtraum

    Dabei seit:
    11.11.2007
    Beiträge:
    551
    Geschlecht:
    männlich
    Ort:
    A:\autostart.exe
    Software:
    CS5 Design Premium
    Kameratyp:
    Pentax K200D
    TIMESTAMP update will nicht
    AW: TIMESTAMP update will nicht

    Der Timestamp ist vorhanden, er ist eine Spalte der Tabelle, die die letzte Online-Aktivität speichert.
    Dafür hab ich eine Spalte für die ID der Zeile, eine Spalte für die User-ID (zur Identifizierung), eine Spalte "time" mit dem Timestamp und eine mit der letzten Ip (Sicherheitsgründe).
    Nun hab ich für jeden User eine Zeile angelegt, bzw. es wird für jeden neuen User, der sich anmeldet, automatisch eine Zeile eingerichtet.
    Meine Timestamp-Spalte hat zudem das Attribut "CURRENT_TIMESTAMP ON UPDATE" im phpmyadmin zugewiesen bekommen, also sollte auch der Timestamp beim Update irgenteines Wertes in der gleichen Zeile der Timestamp mit geupdatet werden, was ja mittlerweile auch prima funktioniert.

    /Einschub: Mist, klappt doch nicht, das Problem liegt darin, dass die IP nicht geupdatet wird, sofern sie schon die gleiche ist, somit wird bloß die erste Aktion mit Timestamp gespeichert, die man mit einer neuen IP ausübt.
    Was ist aufwendiger (performance-lastiger), zuerst die Daten der IP überschreiben mit irgendeinem konstantem Wert (z.B. "0049") und die IP danach wie geplant update, oder eine neue Spalte anlege, die beim Update +1 macht, was zudem den Vorteil hätte, dass ich anguggen könnte, wer wieviele Zugriffe hat?
     
    #7      
  8. saila

    saila Moderatorle

    Dabei seit:
    21.06.2006
    Beiträge:
    2.239
    Geschlecht:
    männlich
    Ort:
    50°48'23.69" N 7°14'22.19" O
    Software:
    Eclipse, PHP5 OO, MySQL5, CSS(auch Barrierefrei), JS, Symfony
    TIMESTAMP update will nicht
    AW: TIMESTAMP update will nicht

    Performancelastig ist auf jeden Fall aus einem Vorgang zwei zu machen. Du schreibst, dass für jeden User eine Zeile angelegt wird. Wie soll sich das verhalten bei geänderter IP oder wechselnder IP?

    Im Grunde - um deine Frage zu beantworten - machst du ein Updatevorgang bezogen auf die aktuelle IP. In der Tabelle kannst du ja eine zusätzliche Spalte für Zugriffe einfügen und per +1 im gleichen Updatevorgang laufen lassen. Sprich ein Updatevorgang in welchem der Timestamp und die Zugriffszahl angepasst werden. Die IP ist ja in einer Session. Dies bedeutet auch, das du eine ständige Prüfung der IP mitlaufen lassen musst - wenn ich dich richtig verstanden habe. Somit musst du auch vor jedem Updatevorgang prüfen, ob die IP zur aktuellen Session korrekt ist oder ob sich diese geändert hat. Wenn sich diese geändert hat, darfst du ja nicht eine evtl. neue IP des Users mit einer möglichen vorhandenen IP in der DB verbinden, da diese ja zuvor ein anderer User inne hatte. Eigentl. müsstest du das ganze etwas anderst aufbauen. Die letzte Aktivität wird in der User-Tabelle festgehalten und die IP und die damit verbundenen Zugriffe (evtl. auch URL's) werden in deiner jetztigen Tabelle festgehalten. Hat den Vorteil, dass du alles auf die aktuellen Session beziehen kannst und nicht der Gefahr unterläufst, Daten eines anderen Users zu überschreiben bzw. zu fälschen.

    Edit:
    Ok, ich editiere jetzt ein mal. Lese aber noch eben du hast deinen Beitrag 37 mal editiert - respekt!
     
    #8      
  9. thexe

    thexe ein Albtraum

    Dabei seit:
    11.11.2007
    Beiträge:
    551
    Geschlecht:
    männlich
    Ort:
    A:\autostart.exe
    Software:
    CS5 Design Premium
    Kameratyp:
    Pentax K200D
    TIMESTAMP update will nicht
    AW: TIMESTAMP update will nicht

    Ich hab mich vorrübergehend für die Alternative entschieden, die IP des Users mit dem Wert 0 zu überschreiben und gleich in der nächsten Zeile des Scripts wieder die aktuelle IP einzufügen.
    Löschen und wieder einfügen ist wohl mehr, einen Wert abzufragen, ihn +1 zu nehmen und dann wieder zuupdaten kommt ca. aufs gleiche raus, also ists Jacke wie Hose.

    Die Spalte für die Zugriffszahlen ist jetzt überflüssig geworden, s. oben.

    Mhh hast mich wohl missverstanden, die IP wird nie per Session übergeben, wozu denn auch, die kann ich doch auch direkt per $_SERVER['REMOTE_ADDR'] auslesen
    Es geht hier allein um die letzte Online-Zeit eines Users, der Rest ist erstmal sekundär.

    Wie meinen? Entschuldigung, aber das versteh ich jetzt nicht :D

    Geht leider nicht, es ist pro Tabelle bloß eine Timestamp-Spalte erlaubt, und die hab ich bereits für den Anmeldezeitpunkt in Beschlag genommen, das war auch mein erster Gedanke, hat aber nicht geklappt, schade :motz:

    Was für Daten sollten denn da überschrieben oder gefälscht werden?
    Die einzige Möglichkeit ist, das Script im richtigen Moment abzubrechen, dass er die 0 setzt, die neue IP allerdings nicht.
    Ich hab das Script allerdings so aufgebaut, dass es bloß über die index.php läuft, und relativ weit oben, wo festgestellt wird, ob man Mitglied ist, also noch vor der Ausgabe irgendwelcher html-Elemente, dass ein Abbruch bloß eine weiße Seite zaubern würde, bringt alles nix ;)
    Die IP hab ich bloß als Wert, den es zu updaten gilt, genommen, weil ich damit einen verwertbaren String habe und gleichzeitig meine Update-Funktion ans laufen kommt.

    Ich liebe es, wenn meine Signatur so gut ankommt :lol:

    Uff, verdammt viel Text ^^
    MfG the-xe
     
    #9      
  10. saila

    saila Moderatorle

    Dabei seit:
    21.06.2006
    Beiträge:
    2.239
    Geschlecht:
    männlich
    Ort:
    50°48'23.69" N 7°14'22.19" O
    Software:
    Eclipse, PHP5 OO, MySQL5, CSS(auch Barrierefrei), JS, Symfony
    TIMESTAMP update will nicht
    AW: TIMESTAMP update will nicht

    Tja da scheinen zwei wohl voll aneinander vorbeizureden.

    Mein Ansatz ist auch nicht für die Tabellenspalte einen SQL-TIMESTAMP zu nehmen, sondern ein INT(10) in welchen der Wert time() (PHP) gespeichert wird. Was zudem auch noch die Performance verbessert. Die letzte Aktivität kann somit in der Usertabelle festgehalten werden inkl. der IP. Und da ein User sich so oder so anmelden muss und einige Daten in einer Session transportiert werden, so dürfte es wohl kein Problem sein, die IP auch in die Session zu schreiben.

    Dann wäre noch zu prüfen - wenn Daten eh aus der DB gelesen werden, ob in diesem Moment nicht direkt in ein SELECT ein UPDATE mit eingebunden werden kann bzw. in wie weit sich dies auf die Performance auswirkt. In meinem Ansatz wäre das kaum bemerkbar bzgl. Performance. Das kann man übrigens auch testen über den SQL-Querybrowser ;)
     
    #10      
  11. thexe

    thexe ein Albtraum

    Dabei seit:
    11.11.2007
    Beiträge:
    551
    Geschlecht:
    männlich
    Ort:
    A:\autostart.exe
    Software:
    CS5 Design Premium
    Kameratyp:
    Pentax K200D
    TIMESTAMP update will nicht
    AW: TIMESTAMP update will nicht

    Da ham wir wirklich aneinander vorbeigeredet ^^
    Der Vorteil an nem time()-Wert wäre die einfache Rechenbarkeit bzw. Differenzierbarkeit zwischen der aktuellen Zeit und der letzten Aktivität.
    Nur hab ich momentan noch nen kleines Problem mit dem Zeitformat von php, ein vorgegebenes von SQL umzuformen find ich da schon einfacher :p
    Wie auch immer, ich klemm mich mal morgen rein, heut abend muss ich noch mal nen wenig für meine Physikklausur morgen lernen, wird noch nen langer Abend :lol:

    Und bei Gelegenheit musst du mir auch nochmal kurz erklären, was du mit SQL_Querybrowser meinst, wie und wo ich den beziehen kann und woher die schottischen Schafe kommen. :p

    MfG the-xe ;)
    PS: danke für alles
     
    #11      
x
×
×
teststefan