# PHP Form mit Cookie und iFrame



## Twister5000 (15. Oktober 2016)

Guten Abend, liebe PCGHler,
ich arbeite derzeit an einem kleinen Website-Projekt.

Ich brauche dafür eine Seite, auf der ein Eingabe-Feld ist, in das man eine URL eingeben kann. Die Eingabe bestätigt man dann eben mit dem "Senden"-Button.
Dazu brauche ich ein Cookie, das die Eingabe abspeichert und so lange gültig ist, bis der Nutzer eine neue URL eingibt und diese abspeichert.
Abschließend brauche ich noch ein iFrame, das mir die eingetragene / im Cookie gespeicherte URL anzeigt, sobald der User die Seite erneut aufruft.
iFrame und Eingabe-Feld befinden sich auf der selben Seite (also in der selben Datei).

Dafür habe ich bisher in der index.php:

```
<html>
<head> ... </head>
<body>

<form action="action.php" method="post">
	<p>URL: <input type="text" name="planurl" /> <input type="submit" /></p>
</form>

<?php $cookie = $_COOKIE["plancookie"]; ?>
<iframe src="$cookie" height="45%" width="86%"></iframe>

</body>
</html>
```


In der action.php steht:

```
<?php
setcookie("plancookie","$_POST['planurl']",0);
header("Location: index.php");
exit();
?>
```


Die Idee dahinter war, dass das Formular, nachdem die URL eingegeben und abgeschickt wurde, zur action.php weiterleitet, das Cookie abspeichert und zurück zur index.php leitet, in der dann das iFrame auch schon die im Cookie stehende URL anzeigen kann.

Ich habe so gut wie keine Vorkenntnisse zu Cookies und wenige zu PHP-Form, die Idee(n) hab ich daher von hier und hier.

Wenn ich das ganze jetzt aber so auf meinen Server lade und aufrufe, bekomme ich (beim Aufruf der action.php) folgende Fehlermeldung:


> Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in /[#verzeichnis#]/action.php on line 2



Ich hoffe ihr könnt mir irgendwie helfen, den/die Fehler zu beseitigen, da ich nicht so ganz weiß, was der Server mir sagen will.
Ich fände es tatsächlich auch wünschenswert und sinnvoller (bei einem so kleinen Code-Schnipsel), wenn man die action.php weglassen könnte, ich weiß nur nicht wie, weil alle meine Versuche fehlgeschlagen sind, wichtig ist es jedoch nicht.

Vielen Dank im Voraus,
Twister5000


----------



## DataDino (15. Oktober 2016)

Moin,

Du hast beim PHP-Script schon einmal einen Flüchtigkeitsfehler gemacht.

Statt:

```
setcookie("plancookie","$_POST['planurl']",0);
```

Musst du:

```
setcookie("plancookie",$_POST['planurl'],0);
```

Aber selbst dann würde ich es nicht so machen.Prüfe die EIngaben immer ab, bevor du sie verarbeitest. Prüfe sie zuerst auf existenz und dann auf Validität. Das PHP Script sorgt im Grunde jetzt nur dafür, das der Nutzer den Wert eines Cookies selbst bestimmen kann.

Außerdem ist mir der Sinn und Zweck der Sache nicht ganz klar. Hat das eine bestimmte Bedeutung? Denn iFrame's sind immer eine unschöne Sache und sollten eher vermieden werden.


----------



## Twister5000 (15. Oktober 2016)

Mit dem Fehler hast du Recht, danke.

Details kann ich leider nicht nennen, da es sich um ein Schulinternes Projekt handelt. Die Nutzer sehen auf der Seite (auf dem später dieses Skript eingebunden werden soll) eine Reihe von Plänen von einem externen Server (in iFrames).
Da die Seite fast ausschließlich mobil genutzt wird, soll dem Nutzer der Umweg über etliche Seiten mit verschiedenen Plänen genommen werden. Das funktioniert soweit eben auch, nur muss der Nutzer noch immer seinen eigenen Plan (der sich ebenfalls auf diesem bzw. einem zweiten externen Server befindet) manuell aufrufen. Da letzterer sehr individuell ist, ist die einzige Lösung den Nutzern die Möglichkeit zu geben, den Wert des Cookies zu bestimmen:


DataDino schrieb:


> Das PHP Script sorgt im Grunde jetzt nur dafür, das der Nutzer den Wert eines Cookies selbst bestimmen kann.


und diesen Wert bei jedem weiteren Besuch auslesen und im darunterliegenden iFrame anzeigen zu lassen.

Wenn ich deine Aussage also richtig verstehe, funktioniert nur das auslesen noch nicht. Was ich soweit auch bestätigen kann, da im iFrame immer noch die 404-Seite angezeigt wird.

Wenn du eine bessere Idee als iFrames hast, darfst du sie gerne mit mir teilen, ich wüsste nur nicht, was das für den Endnutzer für einen Unterschied machen würde.


----------



## DataDino (15. Oktober 2016)

Der Fehler für das falsche Aufrufen ist ebenfalls recht eindeutig. Du schreibst zwar in einem PHP-Block den Wert in die Variable. Allerdings rufst du den Wert außerhalb eines PHP-Blocks ab. Das funktioniert nicht. Richtig wäre es so:

```
<iframe src="<?php echo $cookie; ?>" height="45%" width="86%"></iframe>
```
oder so

```
<iframe src="<?= $cookie; ?>" height="45%" width="86%"></iframe>
```

Es gibt einige Möglichkeiten, wie man das ganze ohne iFrames hinbekommt. iFrames sind ein klassisches Quick-but-very-dirty Werkzeug. Zum einen sorgen sie für Probleme bei mobilen Geräten mit den Touch-Gesten und zum anderen, da du die URL's anscheinend von den Leuten frei einsetzen lassen willst, auch je nach Ausbaustufe deines Scripts zu erheblichen Sicherheitsproblemen. Und wirklich Barrierefrei ist es leider auch nicht.

Und ich sage es nochmal in aller Deutlichkeit! Prüfe mit PHP die einegegebenen Daten ab!!!

Wenn du Fragen bzgl. PHP hast, dann kannste mir gerne ne PN schicken. Denn du scheinst was PHP angeht noch am absoluten Anfang zu stehen und hast selbst bei dieser Kleinigkeit bereits schon unfassbar große fundamentale Fehler gemacht, das du mit so einer Sache schnell Probleme bekommen kannst. Ich will dir wirklich nichts böses. Aber du solltest dich wirklich mit PHP allgemein beschäftigen. Das ist ganz wichtig. Glaube mir!


----------



## Twister5000 (16. Oktober 2016)

Vielen vielen Dank für deine Hilfe!
Ja, ich stehe, was PHP angeht, noch am Anfang, ich habe bisher nur was nötig war in PHP gemacht und das auch größtenteils aus Foren zusammengesucht.
Variablen und Cookies habe ich vorher nie benutzt, wie man vielleicht erkennen konnte.

Die iFrames funktionieren bisher wie sie sollen, das ist, dank des Aufbaus der Seite, kein Problem, deswegen ist Quick-but-very-dirty für dieses Projekt in Ordnung 

Dass die Daten abgeprüft werden war für die Grundfunktionalität erstmal nicht wichtig, aber da werde ich mich auch noch dransetzen.

Danke für das Angebot, mal sehen ob weitere Fragen aufkommen!


----------

