webForumDet fria alternativet

Nybörjare med cookies...

PHPur PHP

6 svar · 296 visningar · startad av Pike

PikeMedlem sedan nov. 200452 inlägg
#1

Jo jag vett att det har tagits upp liknande saker tidigare men jag har inte fattat så mycket av dem.Jag har försökt att göra en "Vilka är online" till min community i några dagar nu, men jag har inte fått det att funka :x
Alltså om man har varit inaktiv i 30 minuter(när kakan går ut) så ändras ett fält i databasen till offline. Sen så är det ju bara att hämta vilka som är online och så med det är inga problem.
Skulle vara snällt om någon med kunskap kunde hjälpa ;)

K@llenMedlem sedan mars 20032 667 inlägg
#2

Här förklarar jag och några till hur du bör göra en sådan finktion:
http://www.webforum.nu/showthread.php?s=&threadid=117033&forumid=23

PikeMedlem sedan nov. 200452 inlägg
#3

Okej, men jag fattade inte mycket av den tråden. Men tack ändå.
Jag har försökt att göra med timestamp tidigare med det gick inge vidare. Den bara skrev in 0:er istället för tiden också tog den bort alla som var aktiv innan :l

// Sätter online
include "data.php";
$Ldelete = mysql_connect("$mysql_host", "$mysql_user", "$mysql_pass");
$databas = mysql_select_db("$mysql_db");
$sqlINSERT="INSERT INTO medlemmar_online(user,timestamp)
VALUES('$username','$currenttime2')";
mysql_query("$sql");
mysql_close($Ldelete);

// sätter offline
$currenttime = date("YmdHis"); //tiden
$deletefrom = $currenttime-2000; //tiden - 20min.
$Ldelete = mysql_connect("$mysql_host", "$mysql_user", "$mysql_pass");
$databas = mysql_select_db("$mysql_db");
$sql = "DELETE FROM medlemmar_online WHERE timestamp > '$deletefrom'";
mysql_query("$sql");
mysql_close($Ldelete);
K@llenMedlem sedan mars 20032 667 inlägg
#4

Först och främst bör du byta namn på din kolumn, timestamp är ett reserverat ord. Din lösning skulle kunna fungera men den är onödigt omständlig. Förklaring i korthet.

1. Skapa en sessionvariabel med ett unikt medlemsvärde vid inloggning, exempelvis ett medlemsId.
2. Skapa en datetime-kolumn i din medlemstabell
3. Lägg till en sql-fråga på alla sidor som uppdaterar kolumnen med now() för aktuellt sessionId. Alltså du uppdaterar den post i databasen där medlemsid och sessionid överensstämmer.
4. Bestäm dig för hur länge en medlem ska kunna vara inaktiv för att räknas som online.
5. Hämta ut alla som varit aktiva senare än den tid du bestämt som onlinetid enligt punkt 4.

PikeMedlem sedan nov. 200452 inlägg
#5

aha...
Den uppdaterar tabellen "aktiv" till tiden date("YmdHis"); Men sen för att lista alla som är online använder jag denna kod (som inte fungerar):

<?	
	$tiden_nu = date("YmdHis"); //tiden
	$tiden_efter = $tiden_nu-50; //tiden minus
	include "data.php";
	$linkONnu = mysql_connect("$mysql_host", "$mysql_user", "$mysql_pass");
	$sqlONnu="SELECT * FROM medlemmar WHERE aktiv > '$tidenefter'";
	$result = mysql_db_query("$mysql_db","$sqlONnu");
	while($radONnu=mysql_fetch_array($result)){
?>

vad är det som är fel? Den visar alla medlemmar som någon gång har varit online :S

K@llenMedlem sedan mars 20032 667 inlägg
#6
include "data.php";

    $linkONnu = mysql_connect("$mysql_host", "$mysql_user", "$mysql_pass");

    $sqlONnu="SELECT * FROM medlemmar WHERE aktiv > SUBDATE(NOW(), INTERVAL 50 MINUTE)";

    $result = mysql_db_query("$mysql_db","$sqlONnu");

    while($radONnu=mysql_fetch_array($result)){

Jag satt värdet till 50 minuter. PHPs tid är en sak och MySQLs tid en annan, formaten var antagligen inte lika.

PikeMedlem sedan nov. 200452 inlägg
#7

Tack så mysqlet! :e

255 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
128 ms — hämta forumlista (db)
123 ms — hämta statistik (db)
129 ms — hämta tråd, inlägg och bilagor (db)