[erledigt] MySQL Abfrage klappt nicht

Probleme bei der regulären Arbeiten mit phpBB, Fragen zu Vorgehensweisen oder Funktionsweise sowie sonstige Fragen zu phpBB im Allgemeinen.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.1, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
dani1
Mitglied
Beiträge: 60
Registriert: 15.03.2006 17:43

[erledigt] MySQL Abfrage klappt nicht

Beitrag von dani1 »

Hallo,

folgende MySQL Abfrage klappt nicht wie sie sollte, weiß jemand warum?
Diese löscht alle unaktiven User aus der Datenbank, wobei dies erst nach 72 Std. geschehen sollte.

Code: Alles auswählen

DELETE FROM `phpbb_users`
WHERE `user_active` = 0
AND `user_regdate` < ( NOW() - ( 72*3600 ) )
AND `user_actkey` != ''
AND `user_id` != -1 
Zuletzt geändert von dani1 am 12.08.2006 16:51, insgesamt 1-mal geändert.
Gruß Daniel
OpenVPN-Forum Das Forum Rund um VPNs
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von PhilippK »

Schau dir mal die Doku von MySQL an. MySQL verwendet nicht das UNIX-Datumsformat sondern ein eigenes (yyyy-mm-dd hh:mm:ss). Daher bekommst du auch bei NOW() nichts zurück, von dem du dann eine bestimmte Zeit abziehen kannst.
Du musst NOW() vorher in das UNIX-Format umwandeln, damit das geht.

Gruß, Philipp
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
Fähnchen
Ehemaliges Teammitglied
Beiträge: 2124
Registriert: 14.08.2004 23:38

Beitrag von Fähnchen »

Was genau funktioniert da denn nicht?
Eine genauere Fehlerbeschreibung wäre hilfreich.
In welcher Variable speicherst du denn das user_regdate?
Zuletzt geändert von Fähnchen am 12.08.2006 12:51, insgesamt 1-mal geändert.
Die Signatur hat Urlaub.
Benutzeravatar
roger
Mitglied
Beiträge: 565
Registriert: 30.10.2002 21:32
Wohnort: Bavaria D.C.

Beitrag von roger »

Anstelle von NOW() würde ich die Funktion UNIX_TIMESTAMP() benutzen...
(denn die ganzen Zeitangaben werden in der DB als "Unix-Zeit" gespeichert...)


roger

PS.: `user_regdate` ist eine Variable der Tabelle _users...
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Beitrag von Miriam »

Houston........we have a problem.

Also nicht wir, sondern Du, Dani.

Wenn Du das machen möchtest -->

Code: Alles auswählen

DELETE FROM `phpbb_users`
WHERE `user_active` = 0
AND `user_regdate` < ( NOW() - ( 72*3600 ) )
AND `user_actkey` != ''
AND `user_id` != -1
wobei Du es vielleicht so lösen solltest:

Code: Alles auswählen

$sql = "DELETE FROM " . USERS_TABLE . "
WHERE `user_active` = 0
AND `user_regdate` < ( " . time() - ( 72*3600 ) . " )
AND `user_actkey` != ''
AND `user_id` != -1";
... ist Dein erster Admin nach 72 Stunden Abwesenheit tot.... denn der hat die ID 2 (okay... nur bei vorheriger Deaktivierung... aber trotzdem).
Besser wäre:

Code: Alles auswählen

$sql = "DELETE FROM " . USERS_TABLE . "
WHERE `user_active` = 0
AND `user_regdate` < ( " . time() - ( 72*3600 ) . " )
AND `user_actkey` != ''
AND `user_id` > 2";
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Benutzeravatar
roger
Mitglied
Beiträge: 565
Registriert: 30.10.2002 21:32
Wohnort: Bavaria D.C.

Beitrag von roger »

Hallo Miriam,

wobei time() das php-Äquivalent für die MySQL-Funktion UNIX_TIMESTAMP() ist...
Ich finde die Zeile

Code: Alles auswählen

AND `user_regdate` < ( UNIX_TIMESTAMP() - ( 72*3600 ) )
"sauberer"... (aber darüber lässt sich sicher streiten... :wink: )

roger
dani1
Mitglied
Beiträge: 60
Registriert: 15.03.2006 17:43

Beitrag von dani1 »

Ups, was war hier denn los?

So, ich möchte das ganze per Cron ausführen. Dazu habe ich eine Datei namens user.sql erstellt und testweise folgendes am laufen:

Code: Alles auswählen

DELETE FROM phpbb_users
WHERE `user_active` = 0
AND `user_regdate` < ( " . time() - ( 72*1 ) . " )
AND `user_actkey` != ''
AND `user_id` > 2
Dieser Befehl löscht mir jetzt jedoch nicht den User den ich gerade (vor ca. 5 min) angelegt habe. Weshalb ?

Danke schonmal, Ihr seid klasse !
Gruß Daniel
OpenVPN-Forum Das Forum Rund um VPNs
dani1
Mitglied
Beiträge: 60
Registriert: 15.03.2006 17:43

Beitrag von dani1 »

Oh, so gehts:

Code: Alles auswählen

DELETE FROM phpbb_users
WHERE `user_active` = 0
AND `user_regdate` < ( UNIX_TIMESTAMP() - ( 72*3600 ) )
AND `user_actkey` != ''
AND `user_id` > 2
Vielen, vielen Dank Jungs und Mädels !!!
Gruß Daniel
OpenVPN-Forum Das Forum Rund um VPNs
Benutzeravatar
Atti
Mitglied
Beiträge: 75
Registriert: 08.08.2006 04:56

Hallo

Beitrag von Atti »

Hallo
Sorry ja ihr erklärt das alles so schön hier,von wegen mann muss die zeit auf unix umstellen, und die HTML code so oder so einsetzen ??!!!

Na ja ich bin neu was ich damit sagen will eure erkläreungen nützen mir nichts weil ich nicht weiss wo ich das einfügen oder ändern muss?
Welche datei welchche stelle usw..??!!

Gruss Atti
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Beitrag von Miriam »

Atti, was möchtest Du denn machen? :o
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Antworten

Zurück zu „phpBB 2.0: Administration, Benutzung und Betrieb“