date mit DB Eintrag abgleichen

stega

Erfahrenes Mitglied
Hi!
Ich habe folgendes Problem:
Ich habe eine Datenbank, in der es (vereinfacht gesagt) 3 Felder gibt: user, besuche, datum
Wenn sich ein User einloggt, wiird die Zahl seiner Besuche um 1 erhöht. In einer Mitgliederliste werden die User nach den meisten Besuchen aufgelistet. JEtzt will ich aber eine Funktion zur Sicherheit gegen Missbrauch einbauen: In das Feld 'datum' soll das aktuelle Datum eingetragen werden und beim nächsten Einloggen soll dann das Script überprüfen, ob wir ein neues Datum haben. Erst dann soll der Besuchezähler erhöht werden, sonst soll er auf dem gleichen Stand bleiben.

PHP:
//datum ermitteln
$datum = date(Y.m.d);
//letztes besuchsdatum holen
$sqldate = "SELECT datum FROM user WHERE user='".$_REQUEST["name"]."'";
$resultdate = mysql_query ($sqldate);

if ($datum != $resultdate); 
{
$sqldate = "UPDATE user SET datum=$datum WHERE user='".$_REQUEST["name"]."'";
$resultdate = mysql_query ($sqldate);
$sqlb = "UPDATE user SET besuche=besuche+1 WHERE user='".$_REQUEST["name"]."'";
$resultb = mysql_query ($sqlb);
}

Leider funktioniert das nicht, das Script erhöht die Anzahl der Besuche weiterhin.
Was mach ich falsch? ich stize jetzt schon seit nem ganzen Tag nur an diesem Schnipsel und bringe es nicht fertig, den Fehler zu beheben....
Danke für eure Hilfe
 
PHP:
//datum ermitteln 
$datum = date(Y.m.d); 
//letztes besuchsdatum holen 
$sql = mysql_query("SELECT datum FROM user WHERE user='".$_REQUEST["name"]."'"); 
$resultdate = mysql_fetch_assoc($sql);

if ($datum != $resultdate['datum']); 
{ 
$sqldate = "UPDATE user SET datum=$datum WHERE user='".$_REQUEST["name"]."'"; 
$resultdate = mysql_query ($sqldate); 
$sqlb = "UPDATE user SET besuche=besuche+1 WHERE user='".$_REQUEST["name"]."'"; 
$resultb = mysql_query ($sqlb); 
}
So sollte es laufen. Du hattest vergessen, die Daten von der DB "abzuholen" und stattdessen $datum mit dem Result-Handler des Queries verglichen.
 
Abgesehen davon, dass du vergessen hast das Ergebnis aus dem result zu fetchen, was für einen Typ hat die Spalte Datum? Wenn sie vom Typ Date ist: Mysql speichert das Datum syntaktisch anders ab (0000-00-00), als die Funktion date() (0000.00.00) es zurückliefert. Also ist der Vergleich immer falsch.

Warum sicherst du nicht einfach nur den Timestamp und guckst immer, ob er auch älter als 24 Std. ist bevor du erhöhst...

alternativ:
PHP:
$row = mysql_fetch_assoc($resultdate);

$datum = str_replace(".", "-", $datum);
if ($datum != $row['datum'])

...
 
ich habe jetzt mal eure Tipps umgesetzt, aber es funktioniert trotzdem nicht....das DB-Feld is im Date Format 0000-00-00 (dafür is ja die replace Anweisung), aber trotzdem werden die Besuche erhöht...
mein Code sieht jetzt so aus:
PHP:
//datum ermitteln
$datum = date(Y.m.d);
//letztes besuchsdatum holen
$sqldate = "SELECT datum FROM user WHERE user='".$_REQUEST["name"]."'";
$resultdate = mysql_query ($sqldate); 
$row = mysql_fetch_assoc($resultdate); 

$datum = str_replace(".", "-", $datum); 
if ($datum != $row['datum'])  
{
$sqldate = "UPDATE user SET datum=$datum WHERE user='".$_REQUEST["name"]."'";
$resultdate = mysql_query ($sqldate);
$sqlb = "UPDATE user SET besuche=besuche+1 WHERE user='".$_REQUEST["name"]."'";
$resultb = mysql_query ($sqlb);
}

Was muss ich jetzt noch ändern? ODer wie geht das mit den 24h? Die Idee is nämlich gut!
 
Warum eigentlich das Datum erst in einer anderen Form generieren und anschließend in die eigentliche bringen?
Formatiere es doch gleich so, wie du es haben möchtest mittels [phpf]date[/phpf].
PHP:
$datum = date('Y-m-d');
//die spätere str_replace-Anweisung lässt du dann natürlich weg!

Mit dem Timestamp funktioniert das Ganze nach dem gleichen Prinzip. Du legst das Tabellenfeld nur vom Typ Integer an und speicherst dort mit Hilfe von [phpf]time[/phpf] den Zeitstempel. Beim Überprüfen fragst du dann ab, ob (time() - (24 * 60 * 60)) > Zeitstempel_in_der_Datenbank ist und handelst je nach dem...
 
danke, hab jetzt einfach das mit dem date('Y-m-d'); gemacht, jetzt klappts plötzlich...komisch, aber es funktioniert, danke für eure schnelle Hilfe!:)
 
"Komisch" ist das ganz und gar nicht, das war eigentlich zu erwarten ;)
Du hast bei deiner Ur-Version nämlich die Formatierungsangabe nicht in einen String "gepackt".
 
Hilfe, ich verzweifle, jetzt klappt das Ganze plötzlich nicht mehr....gestern Abend hat alles schön funktioniert und jetzt streikt es....jetzt wird nicht mal mehr das Datum in die Datenbank geschrieben....:eek:
mein Code sieht jetzt so aus:
PHP:
//datum ermitteln
$datum = date('Y-m-d');
//letztes besuchsdatum holen
$sqldate = "SELECT datum FROM user WHERE user='".$_REQUEST["name"]."'";
$resultdate = mysql_query ($sqldate); 
$row = mysql_fetch_assoc($resultdate); 

if ($datum != $row['datum'])  
{
$sqldate = "UPDATE user SET datum=$datum WHERE user='".$_REQUEST["name"]."'";
$resultdate = mysql_query ($sqldate);
$sqlb = "UPDATE user SET besuche=besuche+1 WHERE user='".$_REQUEST["name"]."'";
$resultb = mysql_query ($sqlb);
}
aber es funktioniert nicht....was is denn jetzt noch falsch? :(
 
Das Ganze könnte auch vereinfacht werden:
PHP:
<?php
  [...]
  $query = "
	UPDATE
	        `user`

	  SET
	        `datum` = CURRENT_DATE,
	        `besuche` = `besuche`+1

	  WHERE
	        `user` = '".mysql_escape_string($_REQUEST['name'])."',
	    AND `date` < CURRENT_DATE
	";
  mysql_query($query);
  [...]
?>
 
mh...ich hab jetzt mal dein Script verwendet, es klappt jetzt, wenn ich aber in die Datenbank schaue, steht da immer noch 0000-00-00 als Datum...d.h. er hat nichts verändert, woran köntne das liegen?
Mit diesem Problem schlage ich mich nämlich au grad an einer anderen Stelle rum, wo ich mit UPDATE einen Punktestand erhöhen will, aber in der DB nichts passiert...:(
 
Zurück