rare bug met tijden in database
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
kun je even de stukjes (exacte) code geven waarmee je de tijd in de database zet?
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.
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);
}
En gooi even die gore backtics ` uit je query, die zooi hoort daar niet in thuis!
Welke gore backtics bedoel jij?
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.
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 ";
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:
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.
Gewijzigd op 01/01/1970 01:00:00 door Stefan van Iwaarden
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.
Quote:
Vervelende foutmeldingen bestaan niet en je kunt eenvoudiger je ogen sluiten. Daar bereik je hetzelfde resultaat mee, maar er bestaat een kans die iemand anders je dan even helpt met de bug die in jouw systeem zit.om de vervelende foutmeldingen niet te zien
Gebruik ALTIJD error_reporting(E_ALL); ! Het is de enige manier om netjes te (leren) scripten.
echo "<meta http-equiv=\"refresh\" content=\"0\">";
is dat goed?
Ik vrees, als je geen url opgeeft en een waarde van 0 voor de tijd, dat de pagina zichzelf oneindig gaat refreshen.