Detektere skjermstørrelse og browserstørrelse

kongen

kongemedlem
Hvordan kan man finne skjermstørrelse og browserstørrelse for å putte i php variabler?

$screenhight
$screenwidth
$browserhight
$browserwidth

Hvis man flipper skjermen på nettbrettet så må variablene oppdatere seg?
 

xdex

Medlem
PHP er server-side, ikke klient, du må derfor bruke javascript. Du kan sende informasjon via ajax (XmlHttpRequest) til php, dersom det er ønskelig.

Eksempel

Kode:
var sWidth = window.screen.width,
    sHeight = window.screen.height;
 

kongen

kongemedlem
Formålet er å legge til skjermstørrelsen sammen med bestillingsinformasjonen i databasen.

Jeg har denne koden i en fil, screen.php:

PHP:
$.ajax({
type: "POST",
url: "bestilling.php",
data: {
width : $(window).width(),
height : $(window).height(),
screen_width : screen.width,
screen_height: screen.height
}
});

I bestilling.php så har jeg:

PHP:
include (screen.php);
$screenhight = 'width';
$screenwidth = 'height';
$browserhight = 'screen_width';
$browserwidth = 'screen_height';

Men det ser ikke ut til å virke.
 

xdex

Medlem
Du kan jo se på dette eksempelet

Kode:
$.ajax({
    type: "POST",
    url: "test.php",
    data: { 'dataString': dataString },
    cache: false,
    success: function()
        {
            alert("Test Submitted");
        }
    });

Kode:
<?php
    $string = $_POST['dataString']; 
    echo $string;
?>
 

kongen

kongemedlem
Jeg får det fortsatt ikke til. Men er fremgangsmåten riktig?

På toppen i php filen som putter data i databasen, så er det <script src til .js-fil>-opplegg. I .js-filen så er det noe ajax-opplegg som poster skjermstørrelse i en variabel til php-filen, og php-filen får derfor den nødvendige verdien før det puttes data i databasen.
 

adeneo

Medlem
Du må nesten prøve deg frem med noe enkelt inntil du får de rette verdiene osv.

Dersom du skal poste tilbake til samme fil, må du sjekke at det er ajax forespørselen du mottar, og så avbryte med die() når du har gjort det du skal.

Prøv noe sånt som dette og se hva som skjer

PHP:
<?php

    if( ! empty($_SERVER['HTTP_X_REQUESTED_WITH']) &&
          strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' // ajax forespørsel
      ) {
        
        // sett inn i databasen
        
        $window_height = $_POST['window_height'];
        $window_width  = $_POST['window_width'];
        $screen_height = $_POST['screen_height'];
        $screen_width  = $_POST['screen_width'];
        
        // sender kun dataene tilbake til $.ajax for å sjekke at alt virker
        die(json_encode($_POST));
    }


?><!DOCTYPE html>
    <head>
        <title>ajax testing</title>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
        <script type="text/javascript">
            $(function() {
                $.ajax({
                    url  : window.location.href,
                    type : 'POST',
                    data : {
                        window_height : window.outerHeight,
                        window_width  : window.outerWidth,
                        screen_height : screen.height,
                        screen_width  : screen.width
                    }
                }).done(function(data) {
                    console.log(data); // dataene du postet ovenfor skal nå komme opp
                                       // som JSON i konsollen din hvis alt virker
                });
            });
        </script>
    </head>
    <body>
        
    </body>
</html>
 

kongen

kongemedlem
Takk for all hjelp, men jeg får det enda ikke til. Jeg får ikke frem skjermstørrelsen uten å måtte bruke en redirect.
 

adeneo

Medlem
Jeg har testet koden ovenfor, og den fungerer som den skal.
Hva er det som ikke fungerer, og du må være litt mer spesifikk enn "virker ikke".

Nå sender selvfølgelig bare den kodesnutten dataene til serveren, og så tilbake til nettleseren, og printer de ut i konsollen, slik at dersom du kan se dataene i konsollen på nettleseren din, så virker det.
Hva du gjør videre med dataene må du selv finne ut av, koden ovenfor er kun en test for å se at de rette dataene sendes til serveren med ajax, og det kreves selvfølgelig at du bruker en webserver (wamp, lamp, easyphp e.l.) for at det skal virke ?
 
Topp