Online liste til chat
Jeg har lavet en simpel chat i php og mysql, og ville gerne tilføje en liste over online.Jeg har fundet en function på nettet som kan regne ud hvor lang tid der er mellem to givne MYSQL DateTime variabler.
Hvad jeg så har gjort er at få siden til at opdaterer sig selv, og hver gang den opdaterer skriver den et nyt sidste logintidspunkt i databasen.
jeg har lavet det sådan at hvis der går 20 sekunder uden at en online svarer bliver hans status sat til ofline.
Mit problem er at ca halvdelen af tiden er $data[1]=0
og så bliver alle brugerne jeg checker for+mig selv sat som ofline
hvis i kan finde fejlen eller har en bedre måde at gøre det på ville jeg være glad hvis i postede det, tak
jeg beklager at min kode måske er lidt uoverskuelig da jeg er temelig ny til php
<code>
<?php
session_start();
$bruger = $_SESSION["username"];
$db=mysql_connect("localhost","user","password");
mysql_select_db("Alfheim",$db) or die("Error");
function get_mysql_to_epoch( $date )
{
list( $year, $month, $day, $hour, $minute, $second )
= split( '([^0-9])', $date );
return date( 'U', mktime( $hour, $minute, $second, $month, $day,
$year ) );
}
function get_elapsed_time(
$time_start,
$time_end,
$units = 'seconds',
$decimals = 2
)
{
$divider['years'] = ( 60 * 60 * 24 * 365 );
$divider['months'] = ( 60 * 60 * 24 * 365 / 12 );
$divider['weeks'] = ( 60 * 60 * 24 / 7 );
$divider['days'] = ( 60 * 60 * 24 );
$divider['hours'] = ( 60 * 60 );
$divider['minutes'] = ( 60 );
$divider['seconds'] = 1;
$elapsed_time = ( ( get_mysql_to_epoch( $time_end )
- get_mysql_to_epoch( $time_start ) )
/ $divider[$units] );
$elapsed_time = sprintf( "%0.{$decimals}f", $elapsed_time );
return $elapsed_time;
}
$aar=date("Y");
$maaned=date("m");
$dag=date("d");
$time=date("H");
$min=date("i");
$sec=date("s");
$sec=$sec+20;
//nuværende tidspunkt plus 20 sek
$temp="$aar.$maaned.$dag $time.$min.$sec";
mysql_query("UPDATE Login SET ONLINE='1',LASTLOGGED='$temp' where USERS='$bruger'");
$time_in = date("Y.m.d H.i.s");
$input=mysql_query("SELECT USERS,LASTLOGGED FROM Login WHERE ONLINE = '1'");
?>
<html><head><meta http-equiv="refresh" content="2"></head><body bgcolor="black" text="white"><b><font color="green">Users Online:</font></b><br>
<?php
while($data=mysql_fetch_row($input))
{
if(get_elapsed_time( $time_in, $data[1], 'seconds',0)<=0)
mysql_query("UPDATE Login SET ONLINE='0', LASTLOGGED='$temp' where USERS='$data[0]'");
echo "$data[0]<br>";
echo "<br><br>";
}
?>
</body></html>
</code>
Jeg vil værdsætte enhver hjælp jeg måtte få
Hilsen
WOFD
