Laatste 5 bezochte pagina's weergeven

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

06/08/2004 12:24:00
Quote Anchor link
Hallo,

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!
 
PHP hulp

PHP hulp

27/11/2024 07:26:22
 
B a s
Beheerder

B a s

06/08/2004 12:34:00
Quote Anchor link
ehm.. misschien kun je iets doen met $_SERVER['HTTP_REFERER'] ? ;) Dat geeft de laatst bezochte pagina aan..

Als je de laatste 5 wegschrijft in de database en zorgt dat er niet een 6e bijkomt dan heb je je scriptje :)
 

06/08/2004 12:38:00
Quote Anchor link
Ja ik had $_SERVER['HTTP_REFERER'] inmiddels al gevonden. Zal eens kijken of ik iets met de database kan.

Bedankt
 
Dutchcamel

dutchcamel

09/08/2004 05:07:00
Quote Anchor link
Maak een tabel aan:

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?
function ip() {
    return $_SERVER['REMOTE_ADDR'];
}

?>


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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?
$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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?
$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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
show_history();
?>


vervangen worden voor

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
show_history(10);
?>


Of met een ander getal om het aantal weer te geven pagina's te bepalen. Met

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
show_history('ALL');
?>


wordt de hele geschiedenis weergeven.
Gewijzigd op 09/08/2004 05:11:00 door dutchcamel
 

09/08/2004 08:34:00
Quote Anchor link
Ok hier ga ik eens mee aan de slag. Ik ben niet zo'n php freak.

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?
 
Dutchcamel

dutchcamel

09/08/2004 13:53:00
Quote Anchor link
Hmm, daar had ik ook al even aan zitten denken nadat ik het gepost had.. Anders zou het met cookies moeten.
 

09/08/2004 13:59:00
Quote Anchor link
Dat denk ik ook ja. Met cookies. Kijken hoe we dat gaan aanpakken.

Als er iemand is die een idee heeft graag :-)
 
Dutchcamel

dutchcamel

09/08/2004 14:42:00
Quote Anchor link
Ongeveer hetzelfde script als wat ik al had maar wat anders...Deze tabel:

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)
PHP script in nieuw venster Selecteer het PHP script
1
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>';
    }
}

?>


Boven elke pagina die meegeteld moet worden het stukje:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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();
?>


En de pagina die de geschiedenis moet laten zien wordt dan:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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();
?>


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.
 

09/08/2004 14:44:00
Quote Anchor link
Ok dan! Bedankt. Hier was ik naar opzoek.

Thanx! Denk dat ik er wel uit kom.
 



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.