Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][JavaScript]pobieranie info o rozdzielczości ekranu
cycofiasz
post 29.07.2008, 16:15:19
Post #1





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

Ostrzeżenie: (0%)
-----


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.

Ten post edytował cycofiasz 29.07.2008, 16:32:46
Go to the top of the page
+Quote Post
nowotny
post 29.07.2008, 16:22:55
Post #2





Grupa: Zarejestrowani
Postów: 875
Pomógł: 122
Dołączył: 2.02.2008

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
cycofiasz
post 29.07.2008, 16:34:43
Post #3





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

Ostrzeżenie: (0%)
-----


A nie znacie jakiegoś lepszego rozwiązania, bez przekierowania? Musi być takowe, skoro w statystykach stat4u widnieją rozdzielczości odwiedzających.
Go to the top of the page
+Quote Post
ShadowD
post 29.07.2008, 16:39:17
Post #4





Grupa: Zarejestrowani
Postów: 1 333
Pomógł: 137
Dołączył: 25.03.2008
Skąd: jesteś??

Ostrzeżenie: (0%)
-----


Zawsze możesz pobrać za pomocą Js i ajaxem jakoś wysłać... smile.gif


--------------------
Mój blog - o wszystkim i niczym ale zazwyczaj związane z informatyką! ;-)
Githube

Usługi spawalnicze i monterskie | Park linowy Lublin i Okunince
Go to the top of the page
+Quote Post
Shili
post 29.07.2008, 16:49:32
Post #5





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

Ostrzeżenie: (0%)
-----


Tudzież wygenerować skrypt js za pomocą php zapisując go oczywiście jako php i wysyłając odpowiedni nagłówek.
Go to the top of the page
+Quote Post
cycofiasz
post 29.07.2008, 17:00:59
Post #6





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
Hazel
post 29.07.2008, 17:44:13
Post #7





Grupa: Zarejestrowani
Postów: 492
Pomógł: 33
Dołączył: 16.08.2007
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Hazel 29.07.2008, 17:53:43


--------------------
Go to the top of the page
+Quote Post
cycofiasz
post 29.07.2008, 18:35:49
Post #8





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Hazel
post 29.07.2008, 18:41:37
Post #9





Grupa: Zarejestrowani
Postów: 492
Pomógł: 33
Dołączył: 16.08.2007
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Ś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.

Ten post edytował Hazel 29.07.2008, 18:43:20


--------------------
Go to the top of the page
+Quote Post
cycofiasz
post 29.07.2008, 20:29:34
Post #10





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
Hazel
post 29.07.2008, 20:40:08
Post #11





Grupa: Zarejestrowani
Postów: 492
Pomógł: 33
Dołączył: 16.08.2007
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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ż.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 3.07.2025 - 13:55