Laatste 5 bezochte pagina's weergeven
Voor het intranet van mijn werk werd het idee geopperd om voor gebuikers een soort history weer te geven. Als zij de intranetsite bezoeken zij een melding krijgen van bv de laatste 5 pagina's die ze hebben bezocht tijdens hun laatste bezoek.
Ik heb gezocht of dit mogelijk is, maar niet echt iets concreets gevonden. Wellicht met cookies of sessions?
Iemand een idee en wellicht een voorbeeld?
Alvast bedankt!
Als je de laatste 5 wegschrijft in de database en zorgt dat er niet een 6e bijkomt dan heb je je scriptje :)
Bedankt
CREATE TABLE `history` (
`id` int(11) NOT NULL auto_increment,
`ip` varchar(15) NOT NULL default '',
`pagina` varchar(255) NOT NULL default '',
`datum` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) TYPE=MyISAM;
Gebruik de volgende functies:
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?
function ip() {
if(!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
}
elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
for($i = 0; $i < count($ips); $i++) {
$ips[$i] = trim($ips[$i]);
if(!eregi('^(10|172\.16|192\.168)\.', $ips[$i])) {
$ip = $ips[$i];
break;
}
}
}
elseif(!empty($_SERVER['HTTP_VIA'])) {
$ips = explode(',', $_SERVER['HTTP_VIA']);
for($i = 0; $i < count($ips); $i++) {
$ips[$i] = trim($ips[$i]);
if(!eregi ('^(10|172\.16|192\.168)\.', $ips[$i])) {
$ip = $ips[$i];
break;
}
}
}
elseif(!empty($_SERVER['REMOTE_ADDR'])) {
$ip = $_SERVER['REMOTE_ADDR'];
}
else {
$ip = '0.0.0.0';
}
return $ip;
}
function add_page() {
mysql_query("INSERT INTO history VALUES (NULL, '".ip()."', '".$_SERVER['REQUEST_URI']."', NOW())");
}
function show_history($limit = 5) {
$sql_limit = $limit == 'ALL' ? '' : ' LIMIT 0, '.$limit;
$result = mysql_query("SELECT pagina, CONCAT(SUBSTRING(datum, 9, 2), '/', SUBSTRING(datum, 6, 2), '/', SUBSTRING(datum, 1, 4), ' ', SUBSTRING(datum, 12, 8)) AS datum FROM history WHERE ip = '".ip()."' ORDER BY datum DESC".$sql_limit);
while ($row = mysql_fetch_object($result)) {
echo $row->pagina.' ('.$row->datum.')<br>';
}
}
?>
function ip() {
if(!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
}
elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
for($i = 0; $i < count($ips); $i++) {
$ips[$i] = trim($ips[$i]);
if(!eregi('^(10|172\.16|192\.168)\.', $ips[$i])) {
$ip = $ips[$i];
break;
}
}
}
elseif(!empty($_SERVER['HTTP_VIA'])) {
$ips = explode(',', $_SERVER['HTTP_VIA']);
for($i = 0; $i < count($ips); $i++) {
$ips[$i] = trim($ips[$i]);
if(!eregi ('^(10|172\.16|192\.168)\.', $ips[$i])) {
$ip = $ips[$i];
break;
}
}
}
elseif(!empty($_SERVER['REMOTE_ADDR'])) {
$ip = $_SERVER['REMOTE_ADDR'];
}
else {
$ip = '0.0.0.0';
}
return $ip;
}
function add_page() {
mysql_query("INSERT INTO history VALUES (NULL, '".ip()."', '".$_SERVER['REQUEST_URI']."', NOW())");
}
function show_history($limit = 5) {
$sql_limit = $limit == 'ALL' ? '' : ' LIMIT 0, '.$limit;
$result = mysql_query("SELECT pagina, CONCAT(SUBSTRING(datum, 9, 2), '/', SUBSTRING(datum, 6, 2), '/', SUBSTRING(datum, 1, 4), ' ', SUBSTRING(datum, 12, 8)) AS datum FROM history WHERE ip = '".ip()."' ORDER BY datum DESC".$sql_limit);
while ($row = mysql_fetch_object($result)) {
echo $row->pagina.' ('.$row->datum.')<br>';
}
}
?>
De functie ip(); is nogal uitgebreid maar zo gebruik ik hem altijd.. Kan eventueel vervangen worden voor:
De functie ip(); zorgt dus voor het bepalen van het ip-adres..lijkt me logisch. Vervolgens op elke pagina de volgende code invoegen:
Code (php)
1
2
3
4
5
2
3
4
5
<?
$server = mysql_connect('databasehost', 'gebruikersnaam', 'wachtwoord');
$database = mysql_select_db('databasenaam');
add_page();
?>
$server = mysql_connect('databasehost', 'gebruikersnaam', 'wachtwoord');
$database = mysql_select_db('databasenaam');
add_page();
?>
Wat ervoor zorgt dat de pagina als hij bekeken wordt in de database wordt gezet. En op de pagina die de geschiedenis moet weergeven deze code neerplanten:
Code (php)
1
2
3
4
5
2
3
4
5
<?
$server = mysql_connect('databasehost', 'gebruikersnaam', 'wachtwoord');
$database = mysql_select_db('databasenaam');
show_history();
?>
$server = mysql_connect('databasehost', 'gebruikersnaam', 'wachtwoord');
$database = mysql_select_db('databasenaam');
show_history();
?>
Die haalt dus de gegevens op uit de database. Eventueel kan de regel
vervangen worden voor
Of met een ander getal om het aantal weer te geven pagina's te bepalen. Met
wordt de hele geschiedenis weergeven.
Gewijzigd op 09/08/2004 05:11:00 door dutchcamel
Je triggert het spul op IP adres. Wij gebruiken hier DHCP dus de kans dat het ip adres verloopt is vrij groot laat maar zeggen, wat als gevolg zou hebben dat de history niet meer correct weer wordt gegeven?
Hmm, daar had ik ook al even aan zitten denken nadat ik het gepost had.. Anders zou het met cookies moeten.
Als er iemand is die een idee heeft graag :-)
CREATE TABLE `history` (
`id` int(11) NOT NULL auto_increment,
`user` varchar(32) NOT NULL default '',
`pagina` varchar(255) NOT NULL default '',
`datum` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) TYPE=MyISAM;
De volgende functies:
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?
function create_string($length = 32) {
$array = array_merge(range(0, 9), range('a', 'z'), range('A', 'Z'));
$arrayContent = count($array);
$string = '';
for ($i = 1; $i <= $length; $i++) {
$string .= $array[rand(0, $arrayContent - 1)];
}
return $string;
}
function add_page() {
global $hash;
mysql_query("INSERT INTO history VALUES (NULL, '".$hash."', '".$_SERVER['REQUEST_URI']."', NOW())");
}
function show_history($limit = 5) {
global $hash;
$sql_limit = $limit == 'ALL' ? '' : ' LIMIT 0, '.$limit;
$result = mysql_query("SELECT pagina, CONCAT(SUBSTRING(datum, 9, 2), '/', SUBSTRING(datum, 6, 2), '/', SUBSTRING(datum, 1, 4), ' ', SUBSTRING(datum, 12, 8)) AS datum FROM history WHERE user = '".$hash."' ORDER BY datum DESC".$sql_limit);
while ($row = mysql_fetch_object($result)) {
echo $row->pagina.' ('.$row->datum.')<br>';
}
}
?>
function create_string($length = 32) {
$array = array_merge(range(0, 9), range('a', 'z'), range('A', 'Z'));
$arrayContent = count($array);
$string = '';
for ($i = 1; $i <= $length; $i++) {
$string .= $array[rand(0, $arrayContent - 1)];
}
return $string;
}
function add_page() {
global $hash;
mysql_query("INSERT INTO history VALUES (NULL, '".$hash."', '".$_SERVER['REQUEST_URI']."', NOW())");
}
function show_history($limit = 5) {
global $hash;
$sql_limit = $limit == 'ALL' ? '' : ' LIMIT 0, '.$limit;
$result = mysql_query("SELECT pagina, CONCAT(SUBSTRING(datum, 9, 2), '/', SUBSTRING(datum, 6, 2), '/', SUBSTRING(datum, 1, 4), ' ', SUBSTRING(datum, 12, 8)) AS datum FROM history WHERE user = '".$hash."' ORDER BY datum DESC".$sql_limit);
while ($row = mysql_fetch_object($result)) {
echo $row->pagina.' ('.$row->datum.')<br>';
}
}
?>
Boven elke pagina die meegeteld moet worden het stukje:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?
$hash = isset($_COOKIE['user']) ? $_COOKIE['user'] : create_string();
setcookie('user', $hash, time() + 31536000, '/', $_SERVER['SERVER_NAME']);
$server = mysql_connect('databasehost', 'gebruikersnaam', 'wachtwoord');
$database = mysql_select_db('databasenaam');
add_page();
?>
$hash = isset($_COOKIE['user']) ? $_COOKIE['user'] : create_string();
setcookie('user', $hash, time() + 31536000, '/', $_SERVER['SERVER_NAME']);
$server = mysql_connect('databasehost', 'gebruikersnaam', 'wachtwoord');
$database = mysql_select_db('databasenaam');
add_page();
?>
En de pagina die de geschiedenis moet laten zien wordt dan:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?
$hash = isset($_COOKIE['user']) ? $_COOKIE['user'] : create_string();
setcookie('user', $hash, time() + 31536000, '/', $_SERVER['SERVER_NAME']);
$server = mysql_connect('databasehost', 'gebruikersnaam', 'wachtwoord');
$database = mysql_select_db('databasenaam');
show_history();
?>
$hash = isset($_COOKIE['user']) ? $_COOKIE['user'] : create_string();
setcookie('user', $hash, time() + 31536000, '/', $_SERVER['SERVER_NAME']);
$server = mysql_connect('databasehost', 'gebruikersnaam', 'wachtwoord');
$database = mysql_select_db('databasenaam');
show_history();
?>
Het stukje show_history(); werkt weer zoals bij het vorige script. Nu wordt ipv het ip adres gekeken of er een cookie bestaat met daarin 'user'. Als die bestaat gebruikt hij die, anders wordt er een cookie geplant. De reeks van 32 tekens in het cookie wordt in de database gezet zoals het ip.. Werkt dus bijna hetzelfde.
De 31536000 die bij de regel setcookie(); staat zorgt ervoor dat het cookie een jaar blijft staan vanaf de laatste keer dat er een pagina bezocht is die meegeteld wordt. Kan dus veranderd worden als je dat leuk vindt.
Thanx! Denk dat ik er wel uit kom.