Datenbank reagiert nicht auf WHERE-Klausel

PHP-Fan

Erfahrenes Mitglied
Hallo,

ich habe ein Script welches die Anzahl der Besucher anzeigt, die gerade auf der Seite sind. Das Funktioniert auch ganz gut bis auf eine Sache. Er löscht manche Werte nicht, die er eigentlich löschen müsste. Mein Code:

PHP:
<?php

$iZeitspanne = 300; 
//$sIP = getenv('REMOTE_ADDR');
$sIP = getenv('HTTP_X_FORWARDED_FOR');

mysql_query('DELETE FROM `useronline` WHERE `time` <= '. time());
mysql_query('UPDATE `useronline` SET `time` = "'. (time()+$iZeitspanne) .'" WHERE `ip` = "'. $sIP .'"'); 

if (mysql_affected_rows() == 0)
{
	mysql_query('INSERT INTO `useronline` (ip, time) VALUES ("'. $sIP .'", "'. (time()+$iZeitspanne) . '")');
}

$rQryUserOnline = mysql_query('SELECT COUNT(*) FROM `useronline`');
$iOnlineUser = mysql_result($rQryUserOnline, 0);

echo $iOnlineUser;

?>

Meine Datenbanktabelle:

table.jpg

Wie man sieht ist eine IP mehrfach drin (mit gleicher Zeit). Wieso wird die nicht gelöscht? Was muss/kann ich anders machen? So stimmt die Anzahl der User die Online sind natürlich nicht mehr.

Danke für eure Tipps.
 
Zuletzt bearbeitet:
Danke für die Antwort. Ich habe es nun umgeschrieben:

PHP:
<?php

$iZeitspanne = 300; 
//$sIP = getenv('REMOTE_ADDR');
$sIP = getenv('HTTP_X_FORWARDED_FOR');

mysql_query('DELETE FROM `useronline` WHERE `time` < '. time());
mysql_query('INSERT INTO `useronline` SET `ip` = "'. $sIP .'", `time` = (time()+'. $iZeitspanne .') ON DUPLICATE KEY UPDATE `time` = (time()+'. $iZeitspanne .')');
		
$rQryUserOnline = mysql_query('SELECT COUNT(*) FROM `useronline`');
$iOnlineUser = mysql_result($rQryUserOnline, 0);

echo $iOnlineUser;

?>

Erhalte aber bei

Code:
INSERT INTO 
  `useronline`
 SET
  `ip` = "'. $sIP .'", 
  `time` = (time()+'. $iZeitspanne .') 
ON DUPLICATE KEY UPDATE 
  `time` = (time()+'. $iZeitspanne .')

einen Syntax-Error. Was mache ich falsch?
 
Bei einem Insert kannst du kein SET verwenden, hier die INSERT-Syntax:

SQL:
INSERT INTO `table` (`spalte1`, `spalte2`, `spalte3`) VALUES ('text1', 'text2', 'text3');
 
PHP:
$sInsertUpdateQry = '
INSERT INTO
   `useronline` (`ip`, `time`) 
VALUES
   ("'. $sIP .'"), time()+'. $iZeitspanne .' 
ON DUPLICATE KEY UPDATE
   `time` = time()+'. $iZeitspanne .'';

mysql_query($sInsertUpdateQry);

Ergibt ebenfalls einen Syntaxerror :(
 
Zuletzt bearbeitet:
Der Fehler liegt nach VALUES
Die Klammer erstreckt sich nämlich über alle values, die rein geschrieben werden.

SQL:
VALUES ('".$sIP."',time()+".$iZeitspanne.")
 
SQL:
INSERT INTO `useronline` (`ip`, `time`) VALUES ("78.94.186.204", time()+300) ON DUPLICATE KEY UPDATE `time` = time()+300

Ebenfalls Syntaxerror.
 
Probiers mal mit dem hier

SQL:
INSERT INTO `useronline` 
      (`ip`,`time`) 
VALUES 
      ('78.94.186.204',TIME()+300) 
ON DUPLICATE KEY UPDATE 
      `time`=TIME()+300
 
Ich musste nur

SQL:
time()

durch

SQL:
unix_timestamp()

ersetzen.
 
Zuletzt bearbeitet von einem Moderator:
Zurück