Hallo beste forummers...;

Ik vind niet direct een oplossing voor mijn probleem ondanks verschillende topics die heel nauw aansluiten met hetgeen ik wil doen...

Ik heb dus een login systeempje en als een user inlogd slaat deze de huidige tijd op.

Ik kan dan met een sql query alle namen uit de database halen die bijvoorbeeld de laatste 2 minuten online waren.


bijvoorbeeld

ik log in om precies 18:00 ->> ik sla deze tijd op in kolom tijd

sql query -->> selecteer de gebruiker vanuit database waar tijd > ( huidige tijd - 5 minuten )

$sql = "SELECT naam FROM leden WHERE tijd > DATE_SUB(NOW(),INTERVAL 2 MINUTE)";


Stel ik log uit.....de huidige tijd wordt hier niet gewijzigd....


Ik sluit alles af en morgen start ik de browser weer op om 18:00...en wat zie ik: ik word uit database gehaald omdat de tijd nog altijd op 18:00 staat.

Dus dat klopt niet ... ik blijk ingelogd als is dat niet zo....

Ik moet waarschijnlijk een kleine aanpassing doen aan die string en ene die goed werkt zonder bugs...

iemand een idee

alle hulp is welkom

mvg

Bart

wat ik mij afvraag is of je het veld in de database hebt staan op het type datetime, want anders zou hij je de volgende dag niet ook moeten selecteren.

kun je even de stukjes (exacte) code geven waarmee je de tijd in de database zet?
Je zou het eens met TIMEDIFF kunnen proberen:

SELECT
    naam
FROM
    leden
WHERE
    MINUTE(TIMEDIFF(NOW(), tijd)) <= 2


Dat de tijd nog niet gewijzigd wordt klopt wel. Dat zul je pas merken nadat je na het inloggen refreshed of een andere pagina bezoekt. Dan pas zullen de nieuwe gegevens uit de database zichtbaar zijn.
het veld tijd is het type TIME

als ik inlog:
=======

$sql = "UPDATE `leden` SET `tijd`= NOW() WHERE naam= '$user'";
mysql_query($sql);

ingelogde leden weergeven:
===================

echo "Ingelogde leden:<br>";
if($connectie = mysql_connect("localhost","root","bartadmin")){

$db = mysql_select_db("main_db");

$sql = "SELECT naam FROM leden WHERE tijd > DATE_SUB(NOW(),INTERVAL 5 MINUTE)";

$result = mysql_query($sql);

while($record = mysql_fetch_object($result)){
$naam = $record->naam;

if($naam == "bart"){
echo "<font color=#00FF00>" . $naam . " "."</font><br>";
}else{
echo "<font color=#FFFF00>" . $naam . " "."</font><br>";
}
mysql_close($connectie);
}
Met een TIME() verlies je dus de datum. Gebruik een DATETIME.

En gooi even die gore backtics ` uit je query, die zooi hoort daar niet in thuis!
Welke gore backtics bedoel jij?

zoals frank al zegt, met time kan mysql niet zien op welke dag die gebruiker het laatst is geweest, dus is het logisch dat hij je de volgende dag keurig opnieuw weergeeft.

wat betreft de gore backtics, dit zijn die ` om de namen van de tabel en kolommen. Dit is helemaal niet nodig en phpmyadmin doet het, maar helaas gaan hierdoor veel mensen het overnemen.
ok...zal ik maar beginnen kuisen in mijn code

kun je mij het volgende verklaren?

//dit werkt

$sql = "UPDATE leden SET ingelogd = ingelogd +1 WHERE naam= '$user' ";

//dit werkt niet

$sql = "UPDATE leden SET ingelogd = ingelogd +1 WHERE naam= $user ";
bij je WHERE clause controleer jij of de kolom naam voldoet aan de waarde die in de variabele $user zit.
Regel hierbij is dat de waarde waarop je controleert altijd tussen quotes moet staan, uitzondering hierop is weer dat dit niet hoeft (wel mag) bij cijfers, maar aangezien $user waarschijnlijk geen numerieke waarde is, moet deze tussen quotes.

Daarnaast wil ik je nog een andere tip geven, het is netter om je variabelen buiten de quotes te halen wat inhoudt dat je dan zoiets krijgt:

<?php
"WHERE naam= '".$user."'";
?>

Je ziet dat de variabele dan een andere kleur krijgt dan de query, en zo zie je makkelijk waar de variabelen staan in je script, overigens zou je dit principe ook toe moeten passen bij echo's e.d.
Ik heb dat wel toegepast als ik iemand wil begroeten die ingelogd heeft met $_session


een voorbeeldje uit mijn code

echo "<font color=#FFFF00>" . " " . "Welkom," . " " . $_SESSION['naam'] . "<br></font>";

Ik heb alle `` eruitgehaald en alles werkt nog...bedankt voor de tip...;
Waarschijnlijk zullen er nog wel fouten insluipen...ik ben ook geen programmeur van beroep....maar hetgeen ik nu doe is wel bedoeld voor een toekomstige website dus alles moet zo goed mogelijk in orde zijn

Eigen fout van mij is ook dat ik altijd mijn error reporting hoog zet om de vervelende foutmeldingen niet te zien te krijgen al is dat ook weer een groot nadeel als je je script opbouwt..zo zie je de bugs niet..


Gelukkig had ik nog niet zoveel paginas om aan te passen....

Nog nuttige tips?






Ja, de font tag zou ik niet meer gebruiken. Die raakt steeds meer in onbruik. Los het op met CSS, dan worden je sites beter te onderhouden.

Reageren