PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   Cookies funktionieren nicht (https://www.php-resource.de/forum/php-developer-forum/105230-cookies-funktionieren-nicht.html)

Ansreng 07-09-2015 15:42

Cookies funktionieren nicht
 
Ich möchte mir die Cookie-Values ausgeben lassen, bekomme aber stets die Notiz:
Notice: Undefined index: cookiedateiname in C:\xampp\htdocs\Mehr.php on line 36

Notice: Undefined index: cookiezeilen in C:\xampp\htdocs\Mehr.php on line 37

Hier ist der Code:

<!DOCTYPE html>
<html>

<header> <title>Textausgabe</title> </header>

<body>

<form action="Mehr.php" method="post">
<?php
$count = 0;
if(!isset($_COOKIE["cookiezeilen"])){
$count2 = 0;
$zeilenMax = 10;
} else{
$count2 = $_COOKIE["cookiezeilen"];
$zeilenMax = $count2 + 10;
}

$file = $_POST['dateiname'];

$file_handle = fopen($file, 'r');

for($count; $count < $zeilenMax; $count++)
{
$line = fgets($file_handle);
echo $line . "<br>";
$count2++;

}

fclose($file_handle);


setcookie("cookiedateiname",$_POST['dateiname'],time() + 30);
setcookie("cookiezeilen",$count2,time() + 30);
$cookie1 = $_COOKIE["cookiedateiname"];
$cookie2 = $_COOKIE["cookiezeilen"];
echo "Dateiname: " . $cookie1 . "<br>";
echo "Zeilenanzahl: " . $cookie2 . "<br>";

?>


<input type="submit" value="Mehr">


</form>

<form action="Start.php" method="post">
<input type="submit" value="Ende">
</form>

</body>


</html>

Gestartet wird es mit Firefox über XAMPP Apache.

h3ll 07-09-2015 19:47

Dann gibts die Cookie-Werte wohl nicht.

Du solltest übrigens das EVA-Prinzip einhalten und Programmlogik nicht mit HTML-Ausgabe vermischen. Befehle wie setcookie() funktionieren nur vor der HTML-Ausgabe.

Ansreng 08-09-2015 11:48

Der dateiname existiert in der Start.php, die davor aufgerufen wird:

<form action="Mehr.php" method="post">

<input type="text" name="dateiname" placeholder="Dateiname">
<input type="submit" value="Generieren">

</form>

wahsaga 08-09-2015 12:44

Die Meldung bezieht sich aber nicht auf einen Index "dateiname", sondern "cookiedateiname".

Du versuchst hier einfach auf Einträge in $_COOKIE zuzugreifen, ohne vorher zu prüfen, ob diese denn existieren. Weiter oben machst du es ja noch korrekt, indem du mit isset vorher prüfst – warum dann weiter unten nicht genauso?

Ansreng 08-09-2015 12:50

Habe es jetzt überprüft mit:

if(isset($_COOKIE['cookiedateiname'])){
echo "Cookie akzeptiert";
} else {
echo "Cookie nicht akzeptiert";
}

Ausgegeben wird "Cookie nicht akzeptiert.

SysOp 08-09-2015 13:39

Schon mal an print_r($_COOKIE); gedacht?

Ansreng 08-09-2015 15:07

Das gibt lediglich "Array ()" aus.

wahsaga 08-09-2015 15:16

Dass gerade eben erste gesetzte Cookies aber erst mit dem nächsten Scriptaufruf in $_COOKIE verfügbar sind, hast du aber berücksichtigt?

Ansreng 08-09-2015 15:20

Bin leider noch recht neu bei PHP.

Mein script sieht momentan so aus:


<!DOCTYPE html>
<html>
<?php
$cookie = $_POST['dateiname'];
setcookie("cookiedateiname", $cookie, time() + 30, '/');
setcookie("cookiezeilen", 10, time() + 30, '/');
$count = 0;
if(!isset($_COOKIE["cookiezeilen"])){
$count2 = 0;
$zeilenMax = 10;
} else{
$count2 = $_COOKIE["cookiezeilen"];
$zeilenMax = $count2 + 10;
}

if(isset($_COOKIE['cookiedateiname'])){
echo "Cookie akzeptiert";
} else {
echo "Cookie nicht akzeptiert";
}
print_r($_COOKIE);
?>
<header>

Ansreng 08-09-2015 15:52

Ich muss Text in ein Feld eingeben und diesen als Cookie speichern. Wenn ich versuche ihn in der ersten PHP-File anzulegen bekommen ich undefined index, wenn ich $_POST benutze.
Und in der zweiten File (in der ich die Cookies auslesen möchte) kann ich sie nicht anlegen, da sie erst mit dem nächsten Skriptaufruf wirksam werden.

Das ist so ziemlich mein Dilemma.

h3ll 08-09-2015 19:52

Befasse dich bitte mit den Grundlagen von HTTP. Das ist eigentlich kein PHP-Problem, sondern ein HTTP-Problem.

1. Client schickt einen HTTP-Request an den Webserver.
2. Das PHP-Script wird vom Webserver ausgeführt. Hier kannst du Cookie-Werte im Header des HTTP-Response setzen.
3. Server schickt HTTP-Response an Client.

4. Client schickt einen HTTP-Request mit den Cookie-Werten an den Webserver.
5. Das PHP-Script wird vom Webserver ausgeführt. Erst an dieser Stelle kann PHP die Cookie-Werte vom HTTP-Request auswerten und sie deinem Script zur Verfügung stellen.

Bitte beachte nochmal meinen Hinweis, dass vor setcookie() und jeder anderer PHP-Funktion, die etwas im HTTP-Header setzt, keine HTML-Ausgabe stattfinden darf, was es bei dir aber tut. setcookie() wird bei dir also so nicht funktioneren, außer beim Server ist zufällig Output-Buffering aktiv, worauf man sich aber nicht verlassen sollte und was so oder so nur ein schmutziger Hack wäre.

Ansreng 08-09-2015 20:15

Ich werde es jetzt damit im Hinterkopf weiter versuchen.

Trotzdem vielen Dank für die Hilfe!


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:47 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG