rare bug met tijden in database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bdm

bdm

19/01/2007 18:59:00
Quote Anchor link
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
 
PHP hulp

PHP hulp

19/11/2024 07:35:14
 
Stefan van Iwaarden

Stefan van Iwaarden

19/01/2007 19:09:00
Quote Anchor link
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?
 
Joren de Wit

Joren de Wit

19/01/2007 19:10:00
Quote Anchor link
Je zou het eens met TIMEDIFF kunnen proberen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
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.
 
Bdm

bdm

19/01/2007 19:16:00
Quote Anchor link
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);
}
 
Frank -

Frank -

19/01/2007 19:40:00
Quote Anchor link
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!
 
Bdm

bdm

19/01/2007 19:47:00
Quote Anchor link
Welke gore backtics bedoel jij?
 
Stefan van Iwaarden

Stefan van Iwaarden

19/01/2007 19:51:00
Quote Anchor link
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.
 
Bdm

bdm

19/01/2007 20:06:00
Quote Anchor link
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 ";
 
Stefan van Iwaarden

Stefan van Iwaarden

19/01/2007 20:16:00
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?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.
Gewijzigd op 01/01/1970 01:00:00 door Stefan van Iwaarden
 
Bdm

bdm

19/01/2007 20:31:00
Quote Anchor link
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?
 
Jan Koehoorn

Jan Koehoorn

19/01/2007 20:34:00
Quote Anchor link
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.
 
Frank -

Frank -

19/01/2007 20:46:00
Quote Anchor link
Quote:
om de vervelende foutmeldingen niet te zien
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.

Gebruik ALTIJD error_reporting(E_ALL); ! Het is de enige manier om netjes te (leren) scripten.
 
Bdm

bdm

19/01/2007 22:50:00
Quote Anchor link
een pagina verversen met

echo "<meta http-equiv=\"refresh\" content=\"0\">";

is dat goed?
 
Jan Koehoorn

Jan Koehoorn

19/01/2007 22:57:00
Quote Anchor link
Ik vrees, als je geen url opgeeft en een waarde van 0 voor de tijd, dat de pagina zichzelf oneindig gaat refreshen.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.