[PHP / Jquery] Log-script voor bezoekers

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • RainerSGF
  • Registratie: Juli 2008
  • Laatst online: 14-09 16:42
Voor een eigen site wil ik een script maken die meteen bij bezoeker-aanvang alle gegevens rond die bezoeker gaat loggen in een mysql-database. Ik dacht daarvoor aan een combinatie van javascript (via jquery) en php.

Ik heb een probleem omtrent een jquery-aanvraag naar een php-pagina (functions.php) die op zich een nieuwe 'bezoeker' aanmaakt. Ik geraak moeiteloos tot aan het functions.php-bestand via een jquery ajax()-aanvraag. Maar éénmaal ik de aanmaak van een nieuwe bezoeker doe (verder in het functions.php -bestand), krijg ik geen respons meer terug volgens gedefinieerd in de aangeroepen functie van de aangemaakte bezoekers-klasse.

Even beter situeren. De verschillende bestanden

index.php : hoofd-pagina waarop bezoeker terecht komt.
bezoeker.js : om in javascript een object 'bezoeker' aan te maken + functie ajax-aanvraag (jquery) te doen
--> ajax-aanvraag wordt succesvol verstuurd naar functions.php
functions.php : allerlei functies, waaronder hier het aanmaken van een nieuwe bezoeker volgens beschreven in class_bezoeker.php
--> een echo vóór de aanmaak hier van een 'bezoeker' lukt en wordt succesvol terug ontvangen door oorspronkelijke ajax-functie (echo-antwoord komt dus goed terug).
--> echter na de aanmaak 'bezoeker' en methode-aanroep (methode 'visitlog') keert geen enkele respons terug uit class_bezoeker.php naar functions.php naar ajax-aanvraag.
class_bezoeker.php

index.php:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php 
include_once("../ConfigAndFunctions/config.php");
include_once("../ConfigAndFunctions/functions.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <head><?php include("head.inc");?></head>
    <body><?php include("body.inc");?>
    <?php 
    $ip = $_SERVER['REMOTE_ADDR'];      
    ?>
    <script type="text/javascript">var ip = "<?php echo $ip; ?>";  var bezoeker = new bezoeker(ip); bezoeker.visit_log();</script>  
    </body>
</html>


bezoeker.js:
JavaScript:
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
function bezoeker(ip){
    var b = navigator;
    var b_codeName = b.appCodeName;
    var b_appName = b.appName;
    var b_version = b.appVersion;
    var cookies_status = b.cookieEnabled;
    var javaEnabled = b.javaEnabled();
    var b_platform = b.platform;
    var b_userAgent = b.userAgent;
    var b_language = b.language;
    var ipadres = ip;
    
    var s = screen;
    var s_width = s.width;
    var s_height = s.height;
    var s_availWidth = s.availWidth;
    var s_availHeight = s.availHeight;
    var s_colordepth = s.colorDepth;
    var s_pixeldepth = s.pixelDepth;
    this.visit_log = visitlog;
    
    
    function visitlog(){
        alert("ontvangen en wordt nu verstuurd...");
        do_command = "log_visit";       
        dataString = "do=" + do_command + "&ip=" + ip + "&codeName=" + b_codeName + "&appName=" + b_appName + "&version=" + b_version + 
                    "&cookies=" + cookies_status + "&java=" + javaEnabled + "&platform=" + b_platform + "&lang=" + b_language + "&width=" + s_width +
                    "&height=" + s_height + "&avwidth=" + s_availWidth + "&avheight=" + s_availHeight + "&colord=" + s_colordepth + "&pixd=" + s_pixeldepth;
        alert(dataString);
        
        //ajax via jquery om informatie (=dataString) uiteindelijk te kunnen laten opslaan in database      
        $.ajax({type: "POST", url: "../ConfigAndFunctions/functions.php", data: dataString, complete: function(msg){
                alert("ok, " + msg.responseText);       
            }
        });     
    };
}



functions.php:
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
45
46
47
48
49
50
51
52
53
54
55
56
<?php
include_once("config.php");
include_once("../classes/class_bezoeker.php");


function Connect_DB(){
            
        $host       = 'localhost';
        $database   = 'xxx';
        $user       = 'xxx';
        $password   = 'xxx';
    
        if(!$connect = mysqli_connect($host, $user, $password, $database)){
            if(TEST_MODE < 2){
                die ("{$ERRORS['QUERY_ERROR_ADMIN']}
                <br/> Mysqli foutnr: " .  mysqli_errno($connect) .
                "<br/> Mysqli foutmelding: " . mysqli_error($connect));
            } else{
                echo $ERRORS['QUERY_ERROR_USER'];
            }
        } else{
            return $connect;
        }       
    }

//--------------------------------------------------------------------POST-OPVANGING------------------------------------------------------------------------------------//

    if(isset($_POST['do'])){
        $command = $_POST['do'];
        
        switch($command){
            case 'log_visit':
                $ip         = $_POST['ip'];
                $codeName   = $_POST['codeName'];
                $appName    = $_POST['appName'];
                $version    = $_POST['version'];
                $cookies    = $_POST['cookies'];
                $java       = $_POST['java'];
                $platform   = $_POST['platform'];
                $lang       = $_POST['lang'];
                $width      = $_POST['width'];
                $height     = $_POST['height'];
                $avwidth    = $_POST['avwidth'];
                $avheight   = $_POST['avheight'];
                $colord     = $_POST['colord'];
                $pixd       = $_POST['pixd'];
                
                echo "OK"; //deze echo wordt succesvol door ajax-aanvraag terug ontvangen en weergegeven
                $nieuwe_bezoeker = new bezoeker($ip, $codeName, $appName, $version, $cookies, $java, $platform, $lang, $width, $height, $avwidth, $avheight, $colord, $pixd);               
                $welkombericht = $nieuwe_bezoeker->log_visit();
                echo $welkombericht; //wordt niet door ajax-aanvraag ontvangen
                                
                break;
        }
    }
?>


class_bezoeker.php:
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<?php

class bezoeker{
    public $ip;
    public $codeName;
    public $appName;
    public $version;
    public $cookies;
    public $java;
    public $platform;
    public $lang;
    public $width;
    public $height;
    public $avwidth;
    public $avheight;
    public $colord;
    public $pixd;
    
    function __construct($ip, $codeName, $appName, $version, $cookies, $java, $platform, $lang, $width, $height, $avwidth, $avheight, $colord, $pixd){
            $this->ip       =   $ip;
            $this->codeName =   $codeName;
            $this->appName  =   $appName;
            $this->version  =   $version;
            $this->cookies  =   $cookies;
            $this->java     =   $java;
            $this->platform =   $platform;
            $this->lang     =   $lang;
            $this->width    =   $width;
            $this->height   =   $height;
            $this->avwidth  =   $avwidth;
            $this->avheight =   $avheight;
            $this->colord   =   $colord;
            $this->pixd     =   $pixd;
            $this->aanvang  =   $getdate();
            $this->bezoeker =   array($this->ip, $this->aanvang, $this->codeName, $this->appName, $this->version, $this->cookies, $this->java, $this->platform, $this->lang, $this->width, $this->height, $this->avwidth, $this->avheight, $this->colord, $this->pixd);
        }
    
     public function Connect_DB(){
        $host       = 'localhost';
        $database   = 'xxx';
        $user   = 'xxx';
        $password   = 'xxx';
    
        if(!$connect = mysqli_connect($host, $user, $password, $database)){
            if(TEST_MODE < 2){
                die ("{$ERRORS['QUERY_ERROR_ADMIN']}
                <br/> Mysqli foutnr: " .  mysqli_errno($connect) .
                "<br/> Mysqli foutmelding: " . mysqli_error($connect));
            } else{
                echo $ERRORS['QUERY_ERROR_USER'];
            }
        } else{
            return $connect;
        }       
    }

            
    public function log_visit(){                
        $query = "INSERT INTO bezoekers (ipadres, tijdstip, codename, appname, version, java, platform, useragent, language, screenwidth, screenheight, widthmax, heightmax, colordepth, pixeldepth) VALUES ('" . $this->ip . "','" . $this->aanvang . "','" . $this->codeName . "','" . $this->appName . "','" . $this->version . "','" . $this->cookies . "','" . $this->java . "','" . $this->platform . "','" . $this->lang . "','" . $this->width . "','" . $this->height . "','" . $this->avwidth . "','" . $this->avheight . "','" . $this->colord . "','" . $this->pixd . "')";

        if(!mysqli_query(Connect_DB(), $query)){
            echo "NOK";
            exit;
        }
        return "OK, in orde nu!";
        //mysqli_close($database);
    }
        
}
?>


Blijkbaar gaat er dus iets mis in mijn object-aanmaak 'bezoeker' in functions.php of iets in de klasse 'bezoeker' zelf. Verder weet ik niet zeker of mijn aanpak om een bezoeker te loggen op deze manier wel een goede is.

In elk geval, kan bij deze iemand mij verder helpen?

[ Voor 156% gewijzigd door Woy op 26-10-2011 09:05 ]

Systeem - I'm learning, I learn it from a book :)


Acties:
  • 0 Henk 'm!

Verwijderd

$this->aanvang = $getdate();

waar haal je aanvang vandaan?

Acties:
  • 0 Henk 'm!

  • RainerSGF
  • Registratie: Juli 2008
  • Laatst online: 14-09 16:42
Man man man, wat ben ik toch een 'tuuuuuuuuuuut'. :)

Echt bedankt. Probleem opgelost. Op deze code meermaals zitten kijken (en eclipse die ook geen enkele fout aangaf) en nooit gezien.

Systeem - I'm learning, I learn it from a book :)


Acties:
  • 0 Henk 'm!

Verwijderd

haha, kan gebeuren met lange stukken code ^_^

Acties:
  • 0 Henk 'm!

  • X_lawl_X
  • Registratie: September 2009
  • Laatst online: 14-09 18:06
* X_lawl_X veranderd user agent naar;DROP TABLE users

Je weet dat je vatbaar bent voor SQL Injectie?

offtopic:
En dat Java != JavaScript? En dat je Connect_DB method niet in je bezoeker class thuishoort?

[ Voor 16% gewijzigd door X_lawl_X op 25-10-2011 23:30 ]


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Persoonlijk zou ik (als je het toch zelf maakt) het in 2'en hakken.

In php zet je de basis voor een log-actie op en begin je te loggen. Hierna vul je die gegevens aan via jquery omdat je niet alle gegevens via php binnenkrijgt.

Met enkel jquery ed heb je de kans dat je mensen mist die geen javascript aan hebben staan (of iets als noscript gebruiken en jouw site nog niet gewhitelist hebben)
Met enkel php mis je weer gegevens die je enkel via javascript binnen kan krijgen (resolutie ed)

Externe partijen (google analytics) ed hebben altijd het risico om mishits te hebben (vanwege bijv blokkade van de google-domeinen oid) dus dan is de acceptatiegraad voor wat meer mishits iets groter, zij gaan immers per definitie nooit 100% halen, dan kan je maar beter wat je wel binnenhaalt zo mooi mogelijk maken.

Met een eigen logging op een eigen server kan je wel 100% bereiken (alles loopt immers via jouw php). Hooguit krijg je niet de additionele info, maar dat zegt ook weer iets.

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Blijkbaar gaat er dus iets mis in mijn object-aanmaak 'bezoeker' in functions.php of iets in de klasse 'bezoeker' zelf. Verder weet ik niet zeker of mijn aanpak om een bezoeker te loggen op deze manier wel een goede is.

In elk geval, kan bij deze iemand mij verder helpen?
Modbreak:Ik had je code weggehaald aangezien je hier veel te weinig informatie geeft over wat er nu mis gaat, en je daar veel te veel code bij geeft. We zien graag alleen relevante code, en dat betekend dat je dus eerst zelf zult moeten debuggen om te achterhalen waar het mis gaat.

Ik heb je code terug geplaatst om het topic compleet te houden, en het blijkbaar al opgelost is. Maar let er in het vervolg beter op dat je alleen relevante code plaatst

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”

Pagina: 1