# Kniffliges Problem: Javascript Variable an PHP übergeben



## Dustin84 (17. September 2010)

Hallo,

anhand der Browserbreite errechne ich, wie viele Bilder in meinen Bildcontainer platz haben.
Nun muss hier in meiner Abfrage

```
// Auszug vom Ganzen
if (2100 < $BildBreiteGesamt){
```
der Wert 2100 durch die aktuelle Browserbreite ersetzt werden. Dazu habe ich die Breite mit Javascript berechnet und in eine Variable geschrieben. 

Die Frage der Fragen: Wie kann ich die Variable nun in PHP nutzen?

Achja, das ganze muss ohne Seitenreload gehen!

Gruß
D.


----------



## Paspirgilis (17. September 2010)

Mach doch einfach ein

```
location.href = location.href + '&browserwidth=' + calculatedBrowserWidth;
```
Oder Ähnliches.
Zum Beispiel noch nachgucken ob ein fragezeichen ran muss oder ein kaufmännisches Und..
Oder eine Ziehmlich böde idee meiner Meinung nach, du setzt mit Javascript einen Cookie.
Diesen Cookie könntest du dann beim nächsten mal auslesen.
Vorteils hier allerdings du spiecherst damit auch fürs nächste Mal gleich die weite.

MfG
Mark Paspirgilis


----------



## Dustin84 (17. September 2010)

Das will nicht funktionieren.

Habs mit POST probiert:


```
<script type="text/javascript">
var AktuelleBreite = $(document).width();
var FensterBreite = AktuelleBreite * 0.9; // 10% für den Seitenabstand abziehen
document.breite.aktuellebreite.value = FensterBreite;
</script>

<form name="breite" method="post">
  <input type="text" name="aktuellebreite" value="empty">
</form>

<? echo $svariable = $_POST["aktuellebreite"]; ?>
```

Der Wert wird korrekt ins Inputfeld geschrieben aber in der POST Variable steht nichts.


----------



## Paspirgilis (17. September 2010)

Du bist noch nich so lange in PHP  oder?  
Warte ein paar min ich schreib dir dazu n kleines Tutorial  xD
Des wird n bissl dauern..


----------



## Paspirgilis (17. September 2010)

Ganz neben bei es sieht aus als ob du JQuery eingebunden hast. dann solltest du acuh die val() Funktion nutzen für input felder und vielleicht das InputFeld auch mit JQuery dann ansteuern weil du nur dann JQuery funktionen nutzen kannst.
Bei deinem Beispiel wärs das gewesen:

```
$('form[name=breite] input[name=aktuellebreite]').val(FensterBreite);
```
Nun zum PHP:
Du musst dir erstmal klar machen wo PHP läuft.
PHP ist eine Serverseitige Sprache und JavaScript eine Clientseitige Script Sprache.
Das heist wenn du eine Seite aufrufst passiert im Normalfall folgendes:
Der Client spricht per HTTP einen Server an, der Server verarbeitet das und gibt das ergebnis zurück. In dem Fall die PHP-Datei. (Jetzt wurde gerade PHP auf dem Server ausgeführt). Nun gelangt das, von PHP generierte Dokument zum Clienten (Das bist du) dort werden dann CSS und JavaScript z.B. Ausgeführt. Folglich wurde erst das PHP auf dem Server ausgeführt udn dann Viiiiel später (mehrere millisekunden) wurde erst das JavaScript bei dir zuhause (Lokal) ausgeführt. Die mit JavaScript genrierte Variable kann als PHP so niemals erreichen. Du musst das irgendwie dem Server übermitteln.
Gehen wir mal von meinem ersten Vorschlag aus, da der einfacher um zusetzen ist.
Du musst dich entscheiden ob du die breite per GET oder per POST übergeben willst.
2. Musst du dich entscheiden ob du die Variable als aJaX im hintergrund über geben willst über die seite direkt neuladen willst.
Meiner Meinung nach ist es einfacher udn sinnvoller die seite neuzuladen mit einem von JavaScript angehängtem Parameter.

Mal angenommen wir befidnen uns in "index.php";
Dann müsstest du in JS folgenden Code einbauen:

```
var AktuelleBreite = $(document).width();
var FensterBreite = AktuelleBreite * 0.9; // 10% für den Seitenabstand abziehen
location.href = location.href + '?browserwidth=' + FensterBreite
```
somit wird beim nächsten mal die GET Variable $_GET['browserwidth'] verfügbar sein.
Problem: beim nächsten aufruf wird wieder das JS aufgerufen werden und es entsteht eine Recursion.
Also bauen wir folgendes:

```
<?php
if(isset($_COOKIE['browserWidth']){
        $browserWidth = stripslashes(strip_tags($_COOKIE['browserWidth']));
        setcookie('browserWidth', $browserWidth , time()+3600*24*60, '/');
} else {
    if(isset($_GET['browserwidth'])){
        $browserWidth = stripslashes(strip_tags($_GET['browserwidth']));
        setcookie('browserWidth', $browserWidth , time()+3600*24*60, '/');
    } else {
        $browserWidth = false;
    }
}
?>
```
Dieser code sollte auch sicher gegen SQL Injection sein..
Nun müssen wir noch was im JavaScript basteln damit die Recursion verhindert wird:


```
<?php if(!$browserWidth){ ?>
var AktuelleBreite = $(document).width();
var FensterBreite = AktuelleBreite * 0.9; // 10% für den Seitenabstand abziehen
location.href = location.href + '?browserwidth=' + FensterBreite;
<?php } ?>
```

So müsste das Funktionieren, allerdings solltest du der location.href Zeile noch eine Überprüfung versehen ob schon parameter dran hängen..
Falls cih dir damit helfen konnte bitte markier das doch als hilfreich  

MfG
Mark Paspirgilis

PS: Bitte setz bei den PHP-Tags immer das PHP dazu.


----------



## mantronic (9. März 2011)

Ganz recht, mit Ajax klappt es auch:

Weil ich es auch gebraucht habe, habe ich eine Lösung dafür gefunden:
Get client browserwidth in PHP 
Grüße


----------

