# Javascript an PHP Variable übergeben



## deintag85 (15. Mai 2009)

Hallo,
ich suche schon mehrere Stunden und finde keine Lösung. Ich habe eine PHP-Datei die bestimmte Werte über einen Besucher ermittelt. Unter anderem die Auflösung des Besuchers. Dies wird mit PHP ermittelt, z.B. mit Hilfe von


```
$screen = '<script type="text/javascript" language="JavaScript1.2">
		  <!--
		  document.write(screen.width + "x" + screen.height);
		  //-->
		  </script>';
```

Nur funktioniert es nicht. Ich weiss auch warum ;-) JS ist Clientseitig und PHP Serverseitig. OK.

Ich hab dann einiges gelesen darüber dass man ein <IMG> erzeugen kann und ihm $_GET-Variablen zuordnen kann.

Beispiel:

```
<script language="JavaScript"> 
var ref=documentReferer; 
var depth=window.screen.colorDepth; 
var res=window.screen.width+"x"+window.screen.height;
document.write("<img src='counter.php?depth="+depth+"&res="+res+"&ref="+ref+"' border='0' width='1' height='1'>"); 
</script>
```

Das funktioniert aber auch irgendwie nicht, bzw. weiss ich nicht richtig was damit anzufangen. Er erstellt kein Bild und auf die GET Variablen lässt sich auch nicht zugreifen.

Wie bekomme ich die Werte denn in eine PHP-Variable um sie anschließend z.B. in eine Datenbank abzuspeichern? Was ist die einfachste Methode?

Ich möchte einen Counter-Service programmieren, welches möglichst einfach funktionieren soll indem man einen Code wie z.B.

```
<a href="counter service"><img src="counter.php"></a>
```
auf seiner Homepage einbindet.

LG


----------



## deintag85 (15. Mai 2009)

Ha!
ich hab es


```
<SCRIPT LANGUAGE="JavaScript1.2">
<!--

var width = screen.width;
var height = screen.height;
if(location.search.indexOf("?res") == -1) {
  location = location.href + "?res=" + width + "x" + height;   // Die Bildschirmbreite ist nun für PHP in der Variablen $width verfügbar.
}

//-->
</SCRIPT>
```

Die Seite öffnet sich ein zweites Mal und ich kann die Variablen eintragen. Problem ist nur dass der Referer dann verfälscht wird. Den trag ich dann sofort beim ersten Mal ein und beim zweiten öffnen trage ich nur die Auflösung ein. Juhuuu ^^


----------



## kuddeldaddeldu (15. Mai 2009)

Hi,

schön, dass Du es selbst gelöst hast. Poste das nächste Mal aber bitte im richtigen Forum, ich kann keinen Zusammenhang mit ASP erkennen. 

LG


----------



## deintag85 (16. Mai 2009)

Ja Sorry. Hab es zu spät gemerkt =)

Hab aber dennoch nochmal ein Problemchen. Kann ich statt mit GET Variablen das auch mit POST machen? Es stört ein wenig dass oben in der Leiste auf einmal irgendwelche GET-Anweisungen auftauchen. Das würde die User meines Counters nur irritieren und stören. Hmmm. Wenn nicht mit POST dann irgendwas was man versteckt im Hintergrund machen kann.

LG


----------



## Parantatatam (16. Mai 2009)

Per POST-Methode würde es gehen und dann noch per Cookies. Mit der POST-Methode könnte ich mir folgendes vorstellen: es gibt die Methode submit() in JavaScript mit der man ein Formular abschicken kann. Erstelle also ein Formular mit einem oder zwei Feldern vom Typ hidden und speichere da deinen Wert für width und height ab. Danach per submit() senden. Dann prüfst du über PHP ob die Werte angekommen sind. Wenn ja, dann kannst du das in etwa so lösen:

```
<?php
// Wenn Daten verfügbar sind: $reload = 1; ansonsten: $reload = 0
$reload = (isset($_POST['width']) && isset($_POST['height'])) ? 1 : 0;
?>
<script type="javascript">
// ...
var reload = <?php echo $reload; ?>;
if(reload == 0)
 {
  // ...
 }
// ...
</script>
```


----------



## StupidBoy (16. Mai 2009)

Schreib doch einen xhr (xmlHttpRequest) und übergibt mittels POST was Du so übergeben willst, das ist meiner Meinung nach die sauberste Methode um Daten im Hintergrund an den Server zu senden.

PS: Funktioniert nicht domainübergreifend.

Sieht dann zum Beispiel so aus:


```
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
	<meta http-equiv="content-type" content="text/html; charset=utf-8" />
	<title>Untitled 2</title>
	<script type="text/javascript">
        // <![CDATA[
            //xhr erstellen
            var xmlHttp = null;
            if (window.XMLHttpRequest) {
              xmlHttp = new XMLHttpRequest();
            } else if (window.ActiveXObject) {
              try {
                xmlHttp = 
                  new ActiveXObject("Msxml2.XMLHTTP");
              } catch (ex) {
                try {
                  xmlHttp = 
                   new ActiveXObject("Microsoft.XMLHTTP");
                } catch (ex) {
                }
              }
            }
           //Funktion zur Anzeige der Daten
            function Output() {
              if (xmlHttp.readyState == 4) {
                var ele = document.getElementById("output");
                ele.innerHTML = xmlHttp.responseText;
              }
            }
            window.onload = function() {
              // Übergabemethode, Ziel des Aufrufs
              xmlHttp.open("POST", "test.php");
              xmlHttp.onreadystatechange = Output;
              xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
              //Zwo Parameter die mittels POST übergeben werden
              xmlHttp.send("a=0815&b=4711");
            }
        // ]]>
    </script>
</head>
<body>
    <div>
        <span id="output">bla...</span>
    </div>
</body>
</html>
```


```
//Serverseitige Verarbeitung der Daten
  if (isset($_POST['a']) && isset($_POST['b'])) {
    echo $_POST['a'] . ' vs. ' . $_POST['b'];
  }
```


----------



## Sven Mintel (16. Mai 2009)

Ich würde trotz aller genannten Varianten wohl doch das im 1. Posting erwähnte <img> nehmen...und per <noscript> liessen sich so auch User mit deaktivierten JS zählen.

Wozu benötigst du dort überhaupt den Reload, willst du irgendwelche Ergebnisse des Zählens beim Clienten ausgeben?


----------

