# POST Variablen bei automatischer Weiterleitung mitgeben



## TheGreenDragon (27. Juli 2009)

Hallo,

ich habe folgende automatische Weiterleitung in meinem Skript:

```
if( isset( $_POST['button'] ) ) {
 
	$url = $_POST['editViewURL'];
	header("Location: ".$url);
}
```

wie kann ich damit Variablen mittels POST weitergeben?


----------



## ZodiacXP (27. Juli 2009)

Hallo.
Das Thema war schon einige male und es ist lösbar über Sessions oder Cookies, je nach Nutzen etc.


----------



## TheGreenDragon (27. Juli 2009)

Hi,

mit Cookies habe ich nicht viel am Hut und Session denk ich auch nicht... [ja ich weiß was ihr denkt .. der kann ja gar nichts ^^]

habe Folgendes gefunden verstehe ich aber noch nicht ganz.


```
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "GET / HTTP/1.1\r\n";
    $out .= "Host: www.example.com\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}
```

Mein Plan ist die Weiterleitung und dann gleich drauf mit diesem fsockopen die POST Parameter hinter schmeißen. Das müsste doch Funktionieren dass ich auf der gewünschten Seite ein isst( $_POST[...] ) abfragen kann oder?

Beste Grüße


----------



## ZodiacXP (27. Juli 2009)

Mit fsockopen hast du keine echte Weiterleitung, sondern rufst deine Seite im Script auf, liest sie aus und gibst sie wieder. Dein Server würde also gleich doppelte Arbeit haben. Sicherlich ein Weg, aber denke an die Performance.

Sessions sind einfach:
http://tut.php-quake.net/de/sessions.html

Seite 1:

```
session_start();
$_SESSION["merks"] = "dir";
```

Seite 2:

```
session_start();
echo $_SESSION["merks"]
```

Ausgabe Seite 2:

```
dir
```


----------



## TheGreenDragon (28. Juli 2009)

Hallo,

also ich habe es mal mit Session probiert. Jedoch wird mir angezeigt:
Notice: Undefined index: bedingung in ....

Meine Situation:
Seite 1 - hat Button
Seite 2 - hat die Weiterleitung
Seite 3 - den auszuführenden Code

So nun könnte man denken, ruf mit dem Button von Seite 1 doch gleich Seite 3 auf. Problem: Egal welche URL für das action im form steht wird immer auf Seite 2 weitergeleitet automatisch und k.A. wieso ... siehe Diskussion http://www.tutorials.de/forum/php/344098-situationen-wo-ein-submit-nicht-funktioniert.html

Alle Seiten sind jeweils PHP-Dateien. 
Seite 1 includet zu beginn Seite 3.
Wie es aussieht wird Seite 2 auch irgendwo mit Seite 1 includet, weil wenn ich session_start() in Seite 2 und in Seite 3 schreibe sagt er mir:
Notice: A session had already been started - ignoring session_start()
also habe ich es wieder aus Seite 3 raus genommen.

Hoffe ihr konntet folgen... ich glaube besser kann ich es nicht erklären.

Aufruf-Reinfolge: Seite 1 -> Seite 2 -> Seite 3


So nun bisschen Code:
Seite 1:

```
<?php
include_once 'seite3.php';
...
<form action="'.$url.'" method="POST">
								<input type="'.$typeVar.'" class="button" name="buttonName" value="Anlegen" />
								<input type="hidden" name="editViewURL" value='.$url.' />
							</form>
...
?>
```

Seite 2:

```
<?php
session_start();

if( isset( $_POST['buttonName'] ) ) {
 
	$url = $_POST['editViewURL'];
	header("Location: ".$url);
	$_SESSION["bedingung"] = 1;
}
...
?>
```
funktioniert auch wunderbar buttonName und editViewURL werden problemlos ausgelesen und die weiterleitung zu Seite 3 passiert auch

Seite 3:

```
<?php
if( isset( $_POST['buttonName'] ) || $_SESSION["bedingung"] == 1 ) {
...
}
...
?>
```
Nun sagt er mir aber bei jedem Aufruf von Seite 1, welche ja Seite 3 includet folgendes: 
Notice: Undefined index: bedingung

nur wenn ich eben auf den button klicke und er auf Seite 3 springt geht die meldung weg, was ja irgendwie klar ist da er ja von Seite 2 auf Seite 3 spring und die if Bedingung in Seite 2 zu traf und nun er die Variable kennt.
Also habe ich Seite 2 um eine Variablendeklaration erweitert:

```
<?php
session_start();
$_SESSION["bedingung"] = 0;
...
```

nun spuckt er keine "Notice: Undefined index: bedingung" jedoch wird der if Block von Seite 3 nie ausgeführt, da kann ich Button drücken wie oft ich will. Es hängt sicherlich damit zusammen das alle Seiten includet werden und das Seite 2 vor Seite 1 und 3 includet werden. Also einfach:

1. Browser suft auf Seite 1 (alles Seiten werden zu diesem Zeitpunkt includet)
2. Seite 2 wird aufgerufen (wieder alles includet)
3. Seite 2 leitet auf Seite 3 weiter (wieder alles includet UND die Bedingung von Seite 2 $_SESSION["bedingung"] = 0; wird WIE IMMER gesetzt)
4. Somit ist es egal ob ich im if Block von Seite 2 den Wert umstelle, beim Aufruf von Seite 3 wird sie eh wieder umgestellt weil sie neu includet wird und Deklaration passiert -.-

Lösungsvorschläge?.... *gleich vorm heulkrampf*


----------



## Chumper (28. Juli 2009)

Du musst die Zuweisungen der Sessions immer vor dem header machen, da er dort ja weiterleitet.

Also sollte das

```
$url = $_POST['editViewURL'];
    header("Location: ".$url);
```
ganz am Ende deiner Datei stehen, dann klappt das auch.

Auch solltest du beachten, dass du vor dem session_start() nichts ausgibst, also mit echo o.ä.,
da dort auch die Fehlermeldung herrühren kann.

Wegen dem Problem mit dem Include:

Guck nach dem Referrer, wenn da Seite 2 drin steht, wird 

```
$_SESSION["bedingung"] = 0;
```
nicht gesetzt.


----------



## TheGreenDragon (28. Juli 2009)

Chumper hat gesagt.:


> Du musst die Zuweisungen der Sessions immer vor dem header machen, da er dort ja weiterleitet.
> 
> Also sollte das
> 
> ...



verstehe ich irgendwie nicht :suspekt:



Chumper hat gesagt.:


> Guck nach dem Referrer, wenn da Seite 2 drin steht, wird
> 
> ```
> $_SESSION["bedingung"] = 0;
> ...



Also ich habe mir nach Klick auf den Button den Referer ausgeben, die angezeigte Seite 3 kommt definitiv von Seite 2, und da alles neu includet wird beim Seitenaufruf wird 
	
	
	



```
$_SESSION["bedingung"] = 0;
```
 ausgeführt ... meinst du doch ? Ich hab sie auch auf Seite 3 ausgelesen mit var_dump() ist immer 0. Sollte aber nach dem Klicken von Button zu 1 werden.
Zu Erinnerung Seite 2 sieht so bei mir nun aus:

```
<?php
session_start();
$_SESSION["bedingung"] = 0;
if( isset( $_POST['buttonName'] ) ) {
	
	$referer = $_SERVER['HTTP_REFERER'];
	echo "Steht im index: $referer <br />";                              // diese echo bekomme ich nie zu Gesicht weil er ja gleich weiterleitet
	
	$url = $_POST['editViewURL'];
	header("Location: ".$url);
	$_SESSION["bedingung"] = 1;
```



Edit:


Chumper hat gesagt.:


> Du musst die Zuweisungen der Sessions immer vor dem header machen, da er dort ja weiterleitet.
> 
> Also sollte das
> 
> ...


ach du meinst, dass das dann so aus sehen soll.

```
$url = $_POST['editViewURL'];
$_SESSION["bedingung"] = 1;
    header("Location: ".$url);
```
ändert aber auch nichts. Ist weiterhin 0 bei Seite 3


Also entweder ich lass die Deklaration $_SESSION["bedingung"] = 0; raus dann habe ich das Problem, dass beim manuellen Aufruf von Seite 3 die Fehlermeldung: Variable nicht definiert ist oder ich schreib sie rein dann wird aber jeder Seitenaufruf ob manuell oder durch weiterleitung die Variable 0 sein wegen dem include Mechanismus *wieder heulkrampf*


----------



## Dr Dau (28. Juli 2009)

Hallo!



GreenDragon hat gesagt.:


> ```
> <?php
> session_start();
> $_SESSION["bedingung"] = 0;
> ...


Du startest hier zuerst die Session.
Dann legst Du eine Sessionvariable an und füllst sie mit dem Wert 0.
Dann überprüfst Du ob das Formular gesendet wurde.
Dann leitest Du per Header weiter.
Und erst jetzt, nach dem Du schon weiter geleitet hast, setzt Du den Wert für die Sessionvariable auf 1.
Das kann nicht klappen. 
Du musst den Wert VOR der Weiterleitung setzen. 

Gruss Dr Dau

[edit]
*hmpf* Irgendwie formatiert der Editor den Code immer wieder um. 
[/edit]

[edit 2]
So, nun aber..... Dein Nick ist zum zitieren nicht kompatibel mit der Forensoftware. 
[/edit 2]


----------



## Dr Dau (28. Juli 2009)

GreenDragon hat gesagt.:


> Also entweder ich lass die Deklaration $_SESSION["bedingung"] = 0; raus dann habe ich das Problem, dass beim manuellen Aufruf von Seite 3 die Fehlermeldung: Variable nicht definiert ist.....


Dann prüfe ob die Sessionvariable existiert (isset()).


----------



## TheGreenDragon (28. Juli 2009)

LOL

die Deklaration auf Seite 2 weglassen nur im IF-Block eben die Session Variable auf 1 setzen und dann auf Seite 3 prüfen ob die Session Variable existiert. Fein, denk das geht!

Hab ja vorher auf Seite 3 gleich geprüft ob sie gleich 1 ist aber nicht ob sie überhaupt existiert ^^ kein Wunder also wieso ich eine Fehlermeldung bekommen habe 

Ich denk ich lass es jetzt erstmal so, auch wenn ich mit diesem Session Sache nicht viel am Hut habe. Hauptsache es läuft erstmal! Danke!


----------

