# JavaScript Variable an PHP übergeben?



## redlama (1. November 2004)

Moin!

Wie kann ich eine Variable aus JavaScript an PHP übergeben?
Ich habe mir via JavaScript die Bildschirmauflösung des Users geholt (zumindest die Höhe).
Jetzt will ich diesen Wert an PHP übergeben, da ich mit dem Wert etwas berechnen will.
Kann mir da einer weiter helfen?
Hier mein momentaner JavaScript Code:

```
<script type='text/javascript'>
<!--
   document.write(screen.height);
//-->
</script>
```

redlama


----------



## andreassin (1. November 2004)

versuch es mal damit:

<script type='text/javascript'>
<!--
   var y = document.write(screen.height);
window.location.href = "deine_datei.php?hoehe=" + y;

//-->
</script>


----------



## redlama (1. November 2004)

Gibt es sowas auch für den Fall, dass ich den PHP Code in der selben Datei stehen habe wie den JavaScript Code? 

redlama


----------



## Gumbo (1. November 2004)

Du könntest es wie folgt versuchen:
	
	
	



```
<script type="text/javascript">
	function init() {
		var parameters = 'width=' + screen.width + '&height=' + screen.height;
		var head = document.getElementsByTagName('head');
		var newScript = document.createElement('script');
		newScript.setAttribute('type', 'text/javascript');
		newScript.setAttribute('src', 'javascript.php?' + parameters);
		head[0].appendChild(newScript);
	}
	onload = init();
</script>
```
javascript.php:
	
	
	



```
<?php

	header('Content-Type: text/javascript');

	echo 'onload = alert("Bildschirmauflösung: '.$_GET['width'].' x '.$_GET['height'].'");';
	[…]
?>
```

Ist möglicherweise etwas kompliziert, funktioniert aber.


----------



## redlama (1. November 2004)

Also entweder bin ich zu blöd :-( oder das funktioniert nicht, ...

redlama :suspekt:


----------



## Gumbo (1. November 2004)

Oh, ich merke gerade, dass du an der ensprechenden Position einen Text einfügen möchtest. Dazu sollte folgendes benutzt werden:
	
	
	



```
<script type="text/javascript" id="javascript">
	function init() {
		var parameters = 'width=' + screen.width + '&height=' + screen.height;
		var thisElem = document.getElementById('javascript');
		var newScript = document.createElement('script');
		newScript.setAttribute('type', 'text/javascript');
		newScript.setAttribute('src', 'javascript.php?' + parameters);
		thisElem.parentNode.insertBefore(newScript, thisElem);
	}
	onload = init();
</script>
```


----------



## Gumbo (1. November 2004)

Hm, wie es aussieht klappt es doch nicht, da das JavaScript-Konstrukt document.write() das bestehende Dokument überschreibt.


----------



## redlama (1. November 2004)

Also document.write() habe ich nur genutzt, um mir den Wert im Browser anzeigen zu lassen (so zum Test, ob's überhaupt funktioniert).
Ich will einfach nur den Wert von screen.height in der selben Datei an den PHP Code weiterleiten.

redlama


----------



## Gumbo (1. November 2004)

Oh, achso, dazu sind beide Vorschläge fähig.


----------



## redlama (1. November 2004)

Kannst Du mal bitte auf die Seite und in meinen Quelltext schauen wo der Fehler liegt?
Hier der Link: Testseite
Und hier der Quelltext:
	
	
	



```
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
  <head>
    <title>Testseite</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link rel="stylesheet" type="text/css" href="test2.css" />
    <script type="text/javascript">
      function init()
      {
        var parameter = '&height=' + screen.height;
        var head = document.getElementsByTagName('head');
        var newScript = document.createElement('script');
        newScript.setAttribute('type', 'text/javascript');
        newScript.setAttribute('src', 'test2.php?' + parameter);
        head[0].appendChild(newScript);
      }
      onload = init();
    </script>
  </head>
  <body>
    <?php
      header('Content-Type: text/javascript');
      echo 'onload = alert("Bildschirmaufl&ouml;sung: '.$_GET['height'].'");';
    ?>
  </body>
</html>
```

redlama


----------



## Gumbo (1. November 2004)

Wozu benötigst du denn die übergebenen Parameter?


----------



## redlama (1. November 2004)

Ich will mit der Höhe, die ich auslese die Höhe eines Div's berechnen.
Warum? Ist das relevant für die Funktionalität?

redlama


----------



## Verion (1. November 2004)

ehm.. ich weiß ja nicht, ob das die beste Lösung ist, aber würde es nicht auch gehen in js die höhe bestimmen, dann per document.formularname.hiddenfeldname.value = höhe; das an ein hiddenfeld zu übergeben und das dann in php mit $_GET['hiddenfeldname'] abzufragen? *g*
natürlich dann erst nach einem erneuten seitenaufruf....


----------



## redlama (1. November 2004)

Na ja, ich dachte ich könnte die Höhe auslesen, dann mit PHP die Höhe des Div's bestimmen und dann die entsprechende Seite mit der Div Höhe laden.
Also je weniger Schritt ich tun muss, desto besser wäre es, denn es müssen noch ein paar Grafiken geladen werden und die Geschwindigkeit der Seite wächst sicher nicht, wenn ich noch zwischen ein paar Seiten hin und her springe, bevor etwas angezeigt wird, oder? 

redlama


----------



## Gumbo (1. November 2004)

Wenn du ‚bloß‘ die Höhe eines Elementes bestimmen möchtest, brauchst du den Wert doch nicht an ein weiteren Script zu übergeben.
	
	
	



```
onload = new Function("document.getElementById('element_identifikator').style.height = wert");
```
Ach übrigens: Ich hoffe du kennst meine Haltung solchen Aktionen gegenüber.


----------



## redlama (1. November 2004)

Also erstens: Ich werde aus Deinem JavaScript Code nicht schlau. Das kommt wahrscheinlich daher, dass ich von JavaScript soviel Ahnung habe, wie Schweine vom Kühemelken!





			
				Gumbo hat gesagt.:
			
		

> Wenn du ‚bloß‘ die Höhe eines Elementes bestimmen möchtest, brauchst du den Wert doch nicht an ein weiteren Script zu übergeben.
> 
> 
> 
> ...


Ganz ehrlich, dass sind für mich böhmische Dörfer! :-(


			
				Gumbo hat gesagt.:
			
		

> Ach übrigens: Ich hoffe du kennst meine Haltung solchen Aktionen gegenüber.


Und zweitens: Ich vermute mal, Du findest sowas Sch.... (sorry für diesen Kraftausdruck)!
Nun ja, ich eigentlich auch, aber es geht nur darum, den Hintergrund auf unseren Seiten mit 100% Höhe hinzubekommen.

redlama


----------



## Gumbo (1. November 2004)

Schon mal an eine alternative CSS-Lösung gedacht?


----------



## redlama (1. November 2004)

Ja, habe ich!
Und ich habe es auch schon mehrfach getestet, aber: siehe hier.
Schau Dir das mal im IE um dann (so Du hoffentlich hast) im Netscape, Mozilla oder Firefox an (und mach die Seitenhöhe mal im Firefox (o. ä.) kleiner und scroll dann runter.

redlama :suspekt:


----------



## Verion (1. November 2004)

redlama hat gesagt.:
			
		

> Na ja, ich dachte ich könnte die Höhe auslesen, dann mit PHP die Höhe des Div's bestimmen und dann die entsprechende Seite mit der Div Höhe laden.
> Also je weniger Schritt ich tun muss, desto besser wäre es, denn es müssen noch ein paar Grafiken geladen werden und die Geschwindigkeit der Seite wächst sicher nicht, wenn ich noch zwischen ein paar Seiten hin und her springe, bevor etwas angezeigt wird, oder?
> 
> redlama


hmm.. Also so weit ich weiß geht das nur mit erneutem Seitenaufruf, oder nicht? da PHP ja schon abgelaufen ist, wenn js beginnt....


----------



## Gumbo (1. November 2004)

Wo ist das Problem:
	
	
	



```
html,
body {
	margin: 0;
	text-align: center;
}
#Main {
	width: 772px;
	margin: 0 auto;
	text-align: left;
	background: #fff url(images/hg-test.gif) repeat-y 0 0;
}
#Head {
	height: 80px;
}
#Navi {
	float: left;
	width: 152px;
}
#Content {
	width: 512px;
	margin-left: 160px;
}
```
Übrigens würde ich die Breite genau auf 800px setzen, da bei einer Bildschirmauflösung von 800x600 immer noch die Bildlaufleiste und der Fensterrand beachtet werden muss. Ich persönlich benutze gerne 772px.


----------



## redlama (1. November 2004)

Das Problem ist, dass dann der Hintergrund nicht mehr über die gesamte Fensterhöhe angezeigt wird, wenn die Größe des Browserfensters maximiert ist.

redlama


----------



## Gumbo (1. November 2004)

Oh, stimmt. Dann passe die Hintergrundgrafik an de Breite an und weise sie dem body bzw. html-Element zu.


----------



## redlama (2. November 2004)

Wie soll ich denn die Hintergrundgrafik an die Breite anpassen?
Und was ist dann mit der Zentrierung, wenn jemand sein Browserfenster in der Breit verkleinert? Dann verschiebt sich das Hintergrundbild doch auch, ...
Oder wie meintest Du das? 

redlama


----------

