Cookies funktionieren nicht

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • 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.

  • #2
    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.

    Kommentar


    • #3
      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>

      Kommentar


      • #4
        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?
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Habe es jetzt überprüft mit:

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

          Ausgegeben wird "Cookie nicht akzeptiert.

          Kommentar


          • #6
            Schon mal an print_r($_COOKIE); gedacht?

            Kommentar


            • #7
              Das gibt lediglich "Array ()" aus.

              Kommentar


              • #8
                Dass gerade eben erste gesetzte Cookies aber erst mit dem nächsten Scriptaufruf in $_COOKIE verfügbar sind, hast du aber berücksichtigt?
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  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>

                  Kommentar


                  • #10
                    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.

                    Kommentar


                    • #11
                      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.

                      Kommentar


                      • #12
                        Ich werde es jetzt damit im Hinterkopf weiter versuchen.

                        Trotzdem vielen Dank für die Hilfe!

                        Kommentar

                        Lädt...
                        X