Avatar billede tanzaweb Nybegynder
10. maj 2005 - 13:37 Der er 10 kommentarer og
1 løsning

javascript variabel til php

Hej  Jeg forsøger at lave et lille statistik program til min side, og her vil jeg gerne hente skrærm opløsningen ind og det er så umiddelbart ikke noget problem men hvordan får jeg lige kørt den over i en php variable til at sætte ind i en database.

Jeg har tidliger hørt at da JS jo er client side og PHP serverside så er det lidt specielt, men JS skulle på en eller anden måde køres først og så php på siden blev kørt på en anden måde med en fake gif eller noget? er der nogen der ved mere om det?
Her er starten på scriptet jeg henter ind i siderne via en include

<Script language="JavaScript">
    if (navigator.appName == 'Netscape' && document.layers != null) {
        wid = window.innerWidth;
        hit = window.innerHeight;
    }
    if (document.all != null){
        wid = document.body.clientWidth;
        hit = document.body.clientHeight;
    }
    //document.write('Height '+hit+', Width '+wid);
    </script>

<?PHP
$display = "";
function ConnectDB(){ // connects to database
    $conn = mysql_connect('localhost', 'data', '4321')  or die('Could not connect: ' . mysql_error());
    mysql_select_db('data_com') or die('Could not select database');
    return $conn;
}
function WriteLog(){
    $remoteIP=$_ENV["REMOTE_ADDR"];
    $query="INSERT INTO Data SET Dato_ind=now(), Dato_ud=now(), Ip=\"$remoteIP\" ";
    $results=mysql_query($query);
}
$conn=ConnectDB();
WriteLog();
$conn->close;

?>
Avatar billede Slettet bruger
10. maj 2005 - 13:43 #1
document.write('<img src="fake_gif.php?height='+hit+'&width='+wid+'" border="0">');

På fake_gif.php kan du så lave noget dataopsamling som du nu lyster. Er du rigtig sej returnerer du et GIF-billede med den rigtige header, så er alt som det skal være ;)
Avatar billede tanzaweb Nybegynder
10. maj 2005 - 14:00 #2
Så du mener at fake_gif skulle se nogenlunde således ud

<?PHP
function ConnectDB(){ // connects to database
    $conn = mysql_connect('localhost', 'data', '4321')  or die('Could not connect: ' . mysql_error());
    mysql_select_db('data_com') or die('Could not select database');
    return $conn;
}
function WriteLog(){
    $remoteIP=$_ENV["REMOTE_ADDR"];
    $query="INSERT INTO Data SET Dato_ind=now(), height=\"$height\", Dato_ud=now(), Ip=\"$remoteIP\" ";
    $results=mysql_query($query);
}
$conn=ConnectDB();
WriteLog();
$conn->close;

?>

og at document.write('<img src="fake_gif.php?height='+hit+'&width='+wid+'" border="0">'); er på samme side som :

<Script language="JavaScript">
    if (navigator.appName == 'Netscape' && document.layers != null) {
        wid = window.innerWidth;
        hit = window.innerHeight;
    }
    if (document.all != null){
        wid = document.body.clientWidth;
        hit = document.body.clientHeight;
    }
    //document.write('Height '+hit+', Width '+wid);
    </script>

??????????
Avatar billede Slettet bruger
10. maj 2005 - 14:30 #3
Noget i den stil, men
$query="INSERT INTO Data SET Dato_ind=now(), height=\"$height\", Dato_ud=now(), Ip=\"$remoteIP\" ";
bør nærmere være
$query="INSERT INTO Data SET Dato_ind=NOW(), height=\"" . $_GET['height'] . "\", Dato_ud=now(), Ip=\"" . $remoteIP . "\"";

Iøvrigt er der ingen grund til at bruge $_ENV brug $_SERVER i stedet, $_ENV er en global variabel, med en global variabels risiko for "forurening" fra andre scripts.
Avatar billede Slettet bruger
10. maj 2005 - 14:32 #4
Og ja, document.write skal være lige efter dit andet JS :)
Avatar billede olebole Juniormester
11. maj 2005 - 02:12 #5
<ole>

Hvad vil du bruge det til? Det, du henter i øjeblikket, er vinduets indre dimensioner i det øjeblik siden loades ... ikke skærmopløsningen

/mvh
</bole>
Avatar billede tanzaweb Nybegynder
11. maj 2005 - 06:53 #6
Ja, det var godt nok skærmopløsningen jeg skulle have
Avatar billede olebole Juniormester
11. maj 2005 - 15:29 #7
Skærm bredden får du med screen.width og højden med screen.height

Sådan set kan det være hip som hap, for der er jo ikke rigtig noget at bruge det til, med mindre man hendler med skærmrensemidler og gerne vil have en idé om, hvormange kvadratmeter skærm, der er på markedet  :)
Avatar billede tanzaweb Nybegynder
18. maj 2005 - 19:43 #8
el barto send lige et svar, har ikke brugt det men vil prøve en af dagene
Avatar billede tanzaweb Nybegynder
19. maj 2005 - 21:07 #9
kan man gøre det sådan her el_barto
hvor det er på samme side men at javascriptet køre først?

function WriteLog(){
?>
<Script language="JavaScript">
    if (navigator.appName == 'Netscape' && document.layers != null) {
        wid = window.innerWidth;
        hit = window.innerHeight;
    }
    if (document.all != null){
        wid = document.body.clientWidth;
        hit = document.body.clientHeight;
    }
    document.write('<img src="statInsert_2_test.php?height='+hit+'&width='+wid+'" border="0">');
    </script>

<?php

    $kundeNr = kundenr;
    $pageName= pageName;
    $host = $_SERVER["HTTP_HOST"];    //outputs sitename.com etc
    $remoteIP=$_SERVER["REMOTE_ADDR"];
    $agent = $_SERVER["HTTP_USER_AGENT"];
    $query="INSERT INTO Data SET Dato_ind=now(), Kundenr=\"$kundeNr\", Host=\"$host\", Display=\"" . $_GET['height'] . "\", Side_vist=\"$pageName\", Browser=\"$agent\", Dato_ud=now(), Ip=\"$remoteIP\" ";
    $results=mysql_query($query);
}
WriteLog();
$db->close;


eller har i et andet forslag uden at bruge en reload eller er der en anden måde at gøre det på, så man kan nøjes med at at lave et tage på en side?

Jeg bruger dette i øjeblikket:
Hvor statInsert_2_test.php indeholder indeholder ovenståenden
<?php
define ("pageName", "Test side forside");
include_once ("statInsert_2_test.php");
?>
Avatar billede tanzaweb Nybegynder
19. maj 2005 - 21:08 #10
og helst med en screen.width og screen.height sat sammen til screen.width x screen.height
Avatar billede tanzaweb Nybegynder
19. maj 2005 - 21:50 #11
Jeg har ændret den lidt og prøvet at lave dette script istedet

Så dette er det jeg bruger nu, som et stk java script:
<Script language="JavaScript">
    var kundeNr = "46927471";
    var pageName = "Test side forside";
    var res = window.screen.width + "x" + window.screen.height;
    document.write('<img src="statInsert_2_test.php?Display=' + res +'&kundeNr=' + kundeNr + '&pageName' + pagename +'" border="0">');
    </script>

Og denne side er statInsert_2_test.php

function WriteLog(){

    $kundeNr = kundenr;
    $pageName= pageName;
    $host = $_SERVER["HTTP_HOST"];    //outputs sitename.com etc
    $remoteIP=$_SERVER["REMOTE_ADDR"];
    $agent = $_SERVER["HTTP_USER_AGENT"];
    $query="INSERT INTO Data SET Dato_ind=now(), Kundenr=\"$kundeNr\", Host=\"$host\", Display=\"" . $_GET['Display'] . "\", Side_vist=\"$pageName\", Browser=\"$agent\", Dato_ud=now(), Ip=\"$remoteIP\" ";
    $results=mysql_query($query);
}
WriteLog();
$db->close;

Men er der ikke nogen måde så man kan lave denne del <Script language="JavaScript">
    var kundeNr = "46927471";
    var pageName = "Test side forside";
    var res = window.screen.width + "x" + window.screen.height;
    document.write('<img src="statInsert_2_test.php?Display=' + res +'&kundeNr=' + kundeNr + '&pageName' + pagename +'" border="0">');
    </script>
som et delvist php script så at hvis brugeren ikke bruger javascript så tager den de andre elementer med over.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester