SoulGodMedlem sedan aug. 20051 200 inlägg Jag håller på att bygga ett statistikscript,
och har nu sprungit in i ett lite knivigt problem som jag inte kan komma på en lösning på...
Jag undrar hur jag ska kunna visa hur många som är på sidan JUST NU.
Jag antar man lär lagra det via cookies/sessions på något vis?
Någon som har någon tips / tanke?
The_HulkMedlem sedan juni 20031 837 inlägg Det brukar man nog normalt lagra i en databas.
Det lättaste är nog att lagra session id och tid för senaste sidvisning för varje besökare. Sen får du själv bestämma hur länge en besökare räknas som aktiv på sidan.
Därefter är det bara att ställa en fråga till databasen och fråga hur många som varit inne de senaste X minuterna.
SoulGodMedlem sedan aug. 20051 200 inlägg Okej , när besökaren kommer in på index.php så sparar man sessionid & tid.
Jag tänker lite såhär, om man dessutom sparar IP, så kan man lägga in på sida2.php , sida3.php ( o.s.v ) en mysql update på just den IP-adressen,
vilket då ger en korrekt anvisning även om besökaren klickar sig vidare på sidan?
För annars om jag t.e.x sätter 15 min på en, och kunden klickar runt på flera sidor,
så blir den inte riktigt korrekt.
Eller är det något dumt i det?
The_HulkMedlem sedan juni 20031 837 inlägg Det är samma session id för besökaren så länge den har igång sin webbläsare.
Om du bara går på IP-nummer så kan det bli missvisande om flera besökare kommer från samma IP-nummer. T.ex. skolor, företag m.m. delar oftast på ett IP-nummer ut mot internet.
SoulGodMedlem sedan aug. 20051 200 inlägg Jag tänkte köra både IP & sessionid isåfall,
men jag tänkte inte så långt hur ID'et funka :P
Funderar även på att använda samma tabell för övrig statistik, inte bara för "idag-funktionen".
Så .. frågan är hur lång tid man ska sätta på session för aktiv dock ..
10 min? Eller är det för lång tid?
Vi har ju några filmklipp på sidan, så om man läser allting så är man nog redan där uppe i 10..
Eller va tror ni?
The_HulkMedlem sedan juni 20031 837 inlägg Det är svårt att säga hur lång tid, du kan ju alltid ändra den efterhand om du tycker det är för mycket/lite. Jag personligen skulle nog ta mer än 10min, speciellt om ni har filmklipp.
SoulGodMedlem sedan aug. 20051 200 inlägg Jag har nu gjort så att jag sparar ner en del information i databasen,
och sparar tiden som 11:06 ... date("H:i")
Men jag vet inte hur jag räknar med den?
Alltså , för att få in aktiva just nu, så ska jag ju då ta 11:06 + 15 min .. Hur gör jag det?
The_HulkMedlem sedan juni 20031 837 inlägg du ska dra bort 15min från tiden.
Vad är det för datatyp på fältet där du sparar tiden?
Jag personligen sparar alltid tid som unixtime (int).
då är det bara att skriva:
$time = time() - 900;
$sql = "SELECT COUNT(*) FROM tblSessionLog WHERE log_time > $time";
Finns bättre sätt att skriva sql-sats på men du får ett hum om hur jag tänkter.
SoulGodMedlem sedan aug. 20051 200 inlägg Jag sparade det i varchar(10) genom följande $tid=date("H:i"); ...
Inser nu att det inte blir rätt för 5 öre när jag ska räkna på ditt sätt..
Löste det enkelt med time(); .. ska bara testa på skarp version :P
SoulGodMedlem sedan aug. 20051 200 inlägg Funkade utmärkt.
Har en annan fråga lite fint samtidigt,
jag har ett fält som heter datum i databasen, som fylls i date("Y-m-d") ...
Jag försökte göra en mysql count mot datum som såg ut som följer: date("Y-m")
men den hittade ingenting.. jag vill söka upp år & månad,
för att få fram antal besökare per månad ..
Någon aning? Går det att söka med ett inkomplett date("Y-m"),
eller blir det fel?
The_HulkMedlem sedan juni 20031 837 inlägg Om du sparar fältet som en mer passande datatyp så finns det säkert fina funktioner i mysql som kan hjälpa dig.
T.ex. http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format
Har inte testat men något sådant här kanske kan fungera
$sql = "SELECT * FROM tbl WHERE date_format(datumfält, '%Y%m') = $datum";
om du har det som en varchar kanske detta kan fungera
$sql = "SELECT * FROM tbl WHERE str_to_date(datumfält, '%Y%m') = $datum";
OBS! jag har inte testat något utan tittade bara lite snabbt på google.