Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][JavaScript]pobieranie info o rozdzielczości ekranu
Forum PHP.pl > Forum > Przedszkole
cycofiasz
Witam, w jaki sposób mogę pobrać rozdzielczość ekranu użytkownika odwiedzającego mój skrypt php i przekazać ją do zmiennej php?
Wiem że pobieranie takiej info można zrobić w javascript, i potrafię pobrać rozdzielczość dopiero za drugim razem jak odwiedza ją ten sam gość (cookies), ale jak zrobić by od razu javascript przekazał tą wartość do zmiennej $rozdzielczość, bo potem chcę ją zapisać do mysql.
nowotny
Za pomocą javascript odczytujesz tą rozdzielczość a potem przekierowujesz usera na strone np. index.php?x=1024&y=768 a w index.php już sobie spokojnie te wartości obrabiasz...
cycofiasz
A nie znacie jakiegoś lepszego rozwiązania, bez przekierowania? Musi być takowe, skoro w statystykach stat4u widnieją rozdzielczości odwiedzających.
ShadowD
Zawsze możesz pobrać za pomocą Js i ajaxem jakoś wysłać... smile.gif
Shili
Tudzież wygenerować skrypt js za pomocą php zapisując go oczywiście jako php i wysyłając odpowiedni nagłówek.
cycofiasz
Na ten czas onegdaj żadne z rozwiązań nie spełnia moich oczekiwań...

chodzi mi o to: gość wchodzi na moją stronkę, w bazie zapisują się dane o nim (czas, ip, referer itp...) i jednocześnie w tym samym rekordzie jego rozdzielczość.
Nie da się tego tak łatwo zrobić, bo trzeba ją odczytać przez js po stronie przeglądarki, czyli po wykonaniu skryptu...
padły propozycje:
przekierowania url, ale to odpada, bo wygladało by to nieprofesionalnie,
AJAX, za pewne dało by radę, ale nic nie potrafię napisać samemu w ajaxie...
Hazel
Plik http_request.js:

Kod
var request = null;
/* Funkcja opakowująca do skonstruowania obiektu żądania.
Parametry:
 reqType: typ żądania HTTP, na przykład GET lub POST.
 url: adres URL programu serwerowego.
 asynch: czy żądanie będzie wysyłane asynchronicznie, czy też nie
 respHandle: nazwa funkcji, która będzie obsługiwała odpowiedź.
 Każde pięć parametrów przedstawione przez arguments[4] stanowią dane
 żądania POST przeznaczonego do wysłania. */
function httpRequest(reqType,url,asynch,respHandle,optional){
 // Przeglądarki na bazie Mozilli.
 if(window.XMLHttpRequest){
     request = new XMLHttpRequest();
 } else if (window.ActiveXObject){
     request=new ActiveXObject("Msxml2.XMLHTTP");
     if (! request){
         request=new ActiveXObject("Microsoft.XMLHTTP");
     }
 }
 // Bardzo mało prawdopodobne, ale sprawdzamy, czy występują żądania null,
 // jeśli także obiekt ActiveXObject nie został zainicjalizowany.
 if(request) {
     // Jeżeli parametr reqType jest typu POST, wówczas
     // piąty argument funkcji stanowią dane przesyłane metodą POST.
     if(reqType.toLowerCase() != "post") {
         initReq(reqType,url,asynch,respHandle);
     } else {
         // Dane przekazywane metodą POST.
         var args = arguments[4];
         if(args !=null && args.length > 0){
             initReq(reqType,url,asynch,respHandle,args);
         }
     }
 } else {
     alert("Używana przeglądarka nie pozwala na wykorzystanie "+
         "wszystkich funkcji tej aplikacji!");
 }
}

/* Inicjalizacja obiektu żądania, który został już skonstruowany. */
function initReq(reqType,url,bool,respHandle,args){
 try{
     /* Określamy funkcję, która bedzie obsługiwała odpowiedź HTTP */
     request.onreadystatechange=respHandle;
     request.open(reqType,url,bool);
     // Jeżeli parametr reqType jest typu POST, wówczas
     // piąty argument funkcji stanowią dane przesyłane metodą POST.
     if(reqType.toLowerCase() == "post") {
         request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=iso-8859-2");
         request.send(arguments[4]);
     } else {
         request.send(null);
     }
 } catch (errv) {
     alert(
         "W tym momencie aplikacja "+
         "nie może połączyć się z serwerem. "+
         "Proszę spróbować ponownie w ciągu kilku sekund.\n"+
         "Szczegółowe informacje o błędzie: "+errv.message);
 }
}





Plik script.js:

Kod
var url="ajax.php";

var str="x=" + screen.width + "&y=" + screen.height;

httpRequest("POST",url,true,handleResponse,str);

function handleResponse(){
 try{
     if(request.readyState == 4){
         if(request.status == 200){
  alert(request.responseText);
         } else {
             // Wartość właściwości request.status wynosi 503,
             // jeżeli aplikacja jest niedostępna, oraz
             // wartość 500, jeśli aplikacja zawiera błąd.
             alert(
                 "Wystąpił problem z komunikacją między obiektem XMLHttpRequest, "+
                 "a programem serwera.");
         }
     }// Koniec zewnętrznej pętli if.
 } catch (err) {
     alert("Serwer nie jest dostępny "+
         "dla tej aplikacji. Proszę wkrótce spróbować"+
         " ponownie. \nBłąd: "+err.message);

 }
}


Plik index.php:
  1. // coś tam coś tam
  2. ?>
  3. <script type="text/javascript" src="http_request.js"></script>
  4. <script type="text/javascript" src="script.js"></script>
  5. <?php




Plik ajax.php:

  1. <?php
  2. // połączenie z bazą, zmienne $_POST['x'] i $_POST['y'] wskazują na wielkość ekranu, zapisujesz je w bazie, to już umiesz zrobić
  3. ?>


Pisane z palca, więc mogą być błędy, chociaż nie powinny wystąpić.
Użyłem kodu napisanego przez autorów książki `80 sposobów na AJAX`, wszelkie prawa zapewne zastrzeżone.

Przekierowanie rzeczywiście nie jest najlepszym sposobem, najlepsze wydaje się użycie właśnie obiektu żądania, nie da się tego zrobić w inny sposób. Nie można z JS przekazać zmiennej do PHP bez użycia XMLHttpRequest, albo bez przekierowywania. No a w PHP nie odczytasz nijak właściwości ekranu, bo to działa po stronie serwera - więc to jedyna opcja. Mam nadzieję, ze trochę Ci się rozjaśni po tym kodzie, są tam komentarze w pliku http_request.js (nie moje, ale są), wiec powinieneś zrozumieć, jak to działa.
cycofiasz
Utworzyłem takie pliki jak napisałeś, w ajax.php zamiast bazy danych dałem zapis do pliku, zapis działa, ale skrypt ajax.php nie otrzymuje żadnych zmiennych POST.

Zapodam tu te pliki
Kod
http://www.speedyshare.com/921477604.html
Hazel
Ściągnałem tę paczkę, ale staraj się tak nie robić na forum, bo nie każdy chce ściągac nieznaną zawartość do siebie na komputer.



Pierwsze co mi się rzuciło w oczy:

Kod
var str='x=' + screen.width + '&y=' + screen.height;


Zwróć uwagę na apostrofy (mogą być cudzysłowy), bo w tamtym pliku script.js tego nie masz. Pod tym umieść linijkę alert(str); odpal to i zobacz co Ci wyświetli, to bedzie zawartość zmiennej str.

edit:
Kod
var url='ajax.php';

Ten sam błąd. Więcej nie widzę, powinno zapisywać. A jak nie to sprawdzaj alertem zawartość poszczególnych zmiennych i do czegoś dojdziesz.
cycofiasz
Pozmieniałem to co zauważyłeś, ale nadal fiasko. Nie znam się na js i ajaxie, więc nie za bardzo wiem co jest źle w kodzie...
Hazel
Napisałem Ci co masz zrobić, debugowanie kodu JS polega na wstawianie alertów w różnych miejscach i patrzeniu co wyświetlają.

Nie mogę Ci bardziej pomóc, bo błędów składni raczej więcej tam nie ma, więc polega to na tym, że coś jest nie tak z komunikacją przeglądarka-serwer pewnie. Uruchom konsolę błędów (FF lub Opera) i już.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.