Autor
|
Thread
|
25.05.2007 15:33 Uhr
|
|
mdean
|
Forenposter
|
|
registriert
|
03.01.2007
|
wohnt in
|
Schweiz
|
Beiträge
|
90
|
|
Zitat: Fehlermeldung..?
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE Nickname = 'mdean'' at line 8
Also könnte ich den Standardwert Null so lassen? Ich werds später dann sowieso noch testen, dann seh ichs ja (kanns mit xampp noch nicht testen, weil der ja keine mails verschicken kann.)
|
|
|
25.05.2007 18:15 Uhr
|
|
Negura
|
Forenposter
|
|
registriert
|
06.12.2006
|
wohnt in
|
|
Beiträge
|
57
|
|
Zitat: Also könnte ich den Standardwert Null so lassen? Ich werds später dann sowieso noch testen, dann seh ichs ja (kanns mit xampp noch nicht testen, weil der ja keine mails verschicken kann.)
Bei Xampp ist doch der Mercury Mail Server dabei, vielleicht solltest du dir den mal Konfigurieren.
|
|
|
25.05.2007 18:55 Uhr
|
|
mdean
|
Forenposter
|
|
registriert
|
03.01.2007
|
wohnt in
|
Schweiz
|
Beiträge
|
90
|
|
Zum vorherigen Problem, das ist gelöst
Aber nochmal zum Mail zeugs:
Hab keine Ahnung wie ich den konfigurieren soll, ist mir zu kompliziert
Deshalb kommt jetzt beim Skript immer die Nachricht, dass da Mail nicht versendet werden konnte.
|
|
|
26.05.2007 11:22 Uhr
|
|
mdean
|
Forenposter
|
|
registriert
|
03.01.2007
|
wohnt in
|
Schweiz
|
Beiträge
|
90
|
|
Zitat: Ach ja, eventuell bei jedem Script prüfen ob der Benutzer die Passwortänderung nach 24h stunden auch vollzogen hat, sonst wieder auf NULL zurückstellen.
Dann müsste ich doch nochmals ne Spalte machen, in ders die Zeit speichert, wenn der generierte Code in die DB eingetragen wurde oder?
Also könnte ich das so machen, das wenn der User auf den Link geklickt hat, es auch die Zeit z.B. auf Null stellt. Dann kann ich in jedem skript prüfen ob die Zeit ungleich Null ist. dann prüfe ob sie schon mehr als 24h ist, und wenn das so ist dann setze diese und den code wieder auf null. Wie mach ich das?
PHP:
<?
$sql ="SELECT
Zeit
FROM
user
WHERE
Zeit != NULL
";
$result = mysql_query($sql);
if ($result //Wie prüfe ich jetzt ob es schon mehr als 24h sind?) {}
?>
|
|
|
26.05.2007 13:26 Uhr
|
RE:
|
Negura
|
Forenposter
|
|
registriert
|
06.12.2006
|
wohnt in
|
|
Beiträge
|
57
|
|
Zitat:
if ($result //Wie prüfe ich jetzt ob es schon mehr als 24h sind?) {}
ganz einfach:
$result = timestamp(); // gibt dir den aktuellen timestamp aus, diesen schreibst du in die Datenbank zum User
jetzt müssen wir mal eben nachdenken, wieviel sekunden hat ein tag? warum sekunden? weil der timestamp die sekunden seit einem bestimmten datum zurückgibt, seit dem 1. januar 1970 oder so ungefähr. Nun ja, der Tag hat 60*60*24 Sekunden, als Ergebnis = 86400 Sekunden pro Tag, dann noch schnell prüfen
PHP:
if($alter_timestamp+86400 < timestamp())
{
echo '24h sind vorbei!';
}
Du kannst natürlich den Timestamp auch direkt die 86400 dazu addieren und diese in die Datenbank schreiben, mach das wie du lustig bist. Dann würde die IF Abfrage allerdings schöner aussehen...
PHP:
if($datenbank_timestamp < timestamp())
{
// ...
}
viel erfolg
Gruß Negura
|
|
|
26.05.2007 14:22 Uhr
|
|
mdean
|
Forenposter
|
|
registriert
|
03.01.2007
|
wohnt in
|
Schweiz
|
Beiträge
|
90
|
|
Danke!
Sollte eigentlich klappen. Mal sehen ob es in 24h es auch wirklich wieder zurückstellt.
|
|
|
31.05.2007 19:08 Uhr
|
|
mdean
|
Forenposter
|
|
registriert
|
03.01.2007
|
wohnt in
|
Schweiz
|
Beiträge
|
90
|
|
So hab das jetzt mal getestet, aber irgendwo scheint sich wieder ein Fehler in meinem Skript zu verstecken. Das heisst, es gibt zwar keine Fehlermeldung oder so etwas, aber PW_ID und Zeit werden nicht auf Null zurückgestellt, wenn die 24h vorbei sind, sondern den im anderen Skript generierten timestamp bleibt.
Hier mein Code:
PHP:
<? $sql ="SELECT
Zeit
FROM
user
WHERE
PW_ID != NULL
";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
$aktuelle_Zeit = ($row['Zeit'] + 86400);
if ($row['Zeit'] > $aktuelle_Zeit) {
$sql = "UPDATE
user
SET
PW_ID = NULL,
Zeit = NULL
WHERE
Zeit = '".db_security($row['Zeit'])."'
";
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
} ?>
|
|
|
01.06.2007 11:48 Uhr
|
|
Negura
|
Forenposter
|
|
registriert
|
06.12.2006
|
wohnt in
|
|
Beiträge
|
57
|
|
ich hab mir dein code nicht genau angeguckt, aber das macht kein sinn oder?
PHP:
<?
if ($row['Zeit'] > $aktuelle_Zeit)
?>
vielleicht so...
PHP:
<?
if (time() > $aktuelle_Zeit)
?>
anderseits speicherst du ja scheinbar nur den normalen, nicht bearbeiteten timestamp, dann übersehe einfach mal oben stehenden code.
prüfe einfach mal ob bei
PHP:
<?
$aktuelle_Zeit = ($row['Zeit'] + 86400);
?>
$aktuelle_Zeit auch wirklich das richtige berechnet wird, kann sein das du es so schreiben musst.
PHP:
<?
$aktuelle_Zeit = $row['Zeit'];
$aktuelle_Zeit += 86400;
?>
Sorry, wie gesagt, code nicht richtig angeguckt.
Gruß Negura
|
|
|
01.06.2007 15:28 Uhr
|
RE:
|
mdean
|
Forenposter
|
|
registriert
|
03.01.2007
|
wohnt in
|
Schweiz
|
Beiträge
|
90
|
|
Zitat:Negura
ich hab mir dein code nicht genau angeguckt, aber das macht kein sinn oder?
PHP:
<?
if ($row['Zeit'] > $aktuelle_Zeit)
?>
vielleicht so...
PHP:
<?
if (time() > $aktuelle_Zeit)
?>
Hab jetzt das mit $aktuelle_Zeit geändert, ändert aber immernoch nichts...
Den Code von mir ist schon logisch den in $row['Zeit'] steht der timestamp drin, bei dem der User ein neues Passwort angefordert hat. Mit der if Abfrage prüfts ja dann ob der grösser ist als den nach 24h und wenn ja, dann sollte es ja auf Null zurückstellen.
Was könnt es sonst noch sein?
|
|
|
01.06.2007 19:41 Uhr
|
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
Hey, ich finde du gehst da eh zu kompliziert ran, ein einfaches update reicht doch:
PHP:
<?php
$sql = "UPDATE
user
SET
PW_ID = NULL,
Zeit = NULL
WHERE
Zeit + ".(60*60*24)." < ".time()."
";
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
?>
Dadurch wird jede PW_ID auf NULL gesetzt, die vor mehr als einem Tag (60*60*24 Sekunden) erstellt wurde.
|
|
|