Database: 2 punten erbij ipv 1 punt
Dit is hoe de database eruit zag als ik al een paar keer op de pagina ben geweest.
Code (php)
1
2
2
ip -- visits -- lastvisit -- mobile -- pc
192.168.48.5 -- 2 -- Sunday 30 October 2011 10:27:35 -- 0 -- 2
192.168.48.5 -- 2 -- Sunday 30 October 2011 10:27:35 -- 0 -- 2
Maar na de tweede keer komen er meteen 2 punten bij bij de visits en pc:
Code (php)
1
2
2
ip -- visits -- lastvisit -- mobile -- pc
192.168.48.5 -- 4 -- Sunday 30 October 2011 10:30:22 -- 0 -- 4
192.168.48.5 -- 4 -- Sunday 30 October 2011 10:30:22 -- 0 -- 4
Wat doe ik fout?
Ik gebruik onderstaand onderstaand PHP script.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function firstVisit()
{
$ip = $_SERVER['REMOTE_ADDR'];
$time = date('l d F Y H:i:s');
// Checken of ze er al zijn geweest
$query = "SELECT * FROM ip WHERE ip='" . $ip . "'";
$result = mysql_query($query) or die(mysql_error());
if (mysql_num_rows($result) == 0)
{
// Nog niet geweest dus invoegen
$query2 = "insert into ip (ip, visits, lastvisit, pc)values('" . mysql_escape_string($ip) . "','1','" . $time . "', '1')";
mysql_query($query2) or die(mysql_error());
return true;
}
else
{
// Als ze er al wel zijn geweest updaten
$row = mysql_fetch_array($result);
$visits = $row['visits'] + 1;
$pc = $row['pc'] + 1;
$query3 = "UPDATE ip SET visits='" . $visits . "', lastvisit='" . $time . "', pc='" . $pc . "' WHERE ip='" . $ip . "'";
mysql_query($query3) or die(mysql_error());
return false;
}
}
{
$ip = $_SERVER['REMOTE_ADDR'];
$time = date('l d F Y H:i:s');
// Checken of ze er al zijn geweest
$query = "SELECT * FROM ip WHERE ip='" . $ip . "'";
$result = mysql_query($query) or die(mysql_error());
if (mysql_num_rows($result) == 0)
{
// Nog niet geweest dus invoegen
$query2 = "insert into ip (ip, visits, lastvisit, pc)values('" . mysql_escape_string($ip) . "','1','" . $time . "', '1')";
mysql_query($query2) or die(mysql_error());
return true;
}
else
{
// Als ze er al wel zijn geweest updaten
$row = mysql_fetch_array($result);
$visits = $row['visits'] + 1;
$pc = $row['pc'] + 1;
$query3 = "UPDATE ip SET visits='" . $visits . "', lastvisit='" . $time . "', pc='" . $pc . "' WHERE ip='" . $ip . "'";
mysql_query($query3) or die(mysql_error());
return false;
}
}
Waarschijnlijk wordt de query twee keer uitgevoerd, maar ik zou niet weten hoe. Als ik de query echo staat er dit:
Code (php)
1
UPDATE ip SET visits='24', lastvisit='Sunday 30 October 2011 10:53:01', pc='24' WHERE ip='192.168.48.5'
Maar als ik dan de volgende keer kijk, zegt hij dit:
Code (php)
1
UPDATE ip SET visits='26', lastvisit='Sunday 30 October 2011 10:54:36', pc='26' WHERE ip='192.168.48.5'
Maar het wordt maar 1 keer geëchoed.
Gewijzigd op 30/10/2011 10:54:53 door Koen Vlaswinkel
Bump
Laat SQL optellen.
$query3 = "UPDATE ip SET visits=visits+1, lastvisit=NOW(), pc=pc+1 WHERE ip='" . $ip . "'";
Ik heb er expres geen DATETIME veld van gemaakt, omdat ik het alleen maar leesbaar hoef te maken. Ik wil alleen de resultaten analyseren, ik hoef er verder niets mee te doen.
Gewijzigd op 31/10/2011 15:12:33 door - SanThe -
Maar als ik de query laat echoën staat de query niet twee keer in de pagina, ook niet als ik in de broncode kijk in mijn browser.
Magic Harry Potter in de buurt?
Ik weet het dan niet meer in ieder geval.
Koen V op 31/10/2011 13:59:02:
Ik heb er expres geen DATETIME veld van gemaakt, omdat ik het alleen maar leesbaar hoef te maken. Ik wil alleen de resultaten analyseren, ik hoef er verder niets mee te doen.
Ook met DATETIME kan je het leesbaar maken. DATE_FORMAT().
- SanThe - op 31/10/2011 15:20:42:
Je roept het 1 keer aan en hij wordt 2 keer uitgevoerd?
Magic Harry Potter in de buurt?
Ik weet het dan niet meer in ieder geval.
Magic Harry Potter in de buurt?
Ik weet het dan niet meer in ieder geval.
Ik doe eens een gooi. Is het echt niet zo dat de functie dubbel aangeroepen wordt? Ga eens debuggen door elke stap te echo-en...
Gewijzigd op 31/10/2011 15:34:02 door - Ariën -
- SanThe - op 31/10/2011 15:05:17:
Je zal dan wel twee keer de function aanroepen lijkt mij.
Laat je niet niet PHP én MySQL de boel optellen, zodat je steeds 2 hits hebt per view?
Laat eens zien welke code je nu hebt, na onze aangedragen tips?