Ankündigung

Einklappen
Keine Ankündigung bisher.

Cookies im Affenformular

Einklappen

Neue Werbung 2019

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

  • Cookies im Affenformular

    Hi
    Ich steh gerade etwas auf dem Schlauch.
    Ich habe ein einfaches Affenformular, das ist etwa so aufgebaut:

    <?php
    //der ganze PHP Code
    setcookie("cookiename","cookieinhalt",$zeit);
    ?>
    <!--hier steht das Formular in HTML-->

    Das Problem liegt darin, dass der Cookie nicht gesetzt wird. Da der selbe Code in einer 'leeren' Datei, also nur die eine Funktion, funktioniert, schätz ich mal, dass der Cokkie nur deshalb nicht gesetzt wird, weil vorher eine Ausgabe an der Browser erfolgt ist.
    HTML gehört halt auch zur Ausgabe, aber es steht ja in der Datei weiter hinten...

    Was muss ich also an dem ganzen Kram ändern, damit es klappt?


  • #2
    Fängt Dein Skript mit
    PHP-Code:
    <?php
    error_reporting
    (E_ALL);
    ini_set('display_errors'1);
    an? Wenn nicht, zum Debuggen reinschreiben.

    Kommentar


    • #3
      Hab es soeben mit dem 2 Zeilen getestet, leider ohne Ergebnis.
      ini_set() wurde von meinem Hoster deaktiviert und error_reporting() hat auch nichts gefunden

      Kommentar


      • #4
        Dann installiere Dir doch zum Beispiel XAMPP und teste lokal.

        Kommentar


        • #5
          Auch das bringt leider nichts, hier funktionieren zwar beide Funktionen, aber es wird kein Cookie gesetzt und eine Fehlermeldung bekomme ich auch nicht.
          Wie gesagt, wahrscheinlich liegt es an einer Ausgabe an den Browser, die zu zeitig kommt...
          Im PHP Code sind die echo-Aufrufe aber zu 100% so in if-Abfragen eingebettet, dass sie nicht zum Einsatz kommen, mit Ausnahme der Erfolgsmeldung, die aber erst nach der Cokkie-Funktiuon aufgerufen wird.
          Kann also theoretisch nur am HTML liegen...

          Kommentar


          • #6
            Wenn PHP den Cookie nicht an den Browser senden kann, wird eine Warnung ausgegeben.
            Dadurch, dass Du display_errors in auf On setzen kannst, siehst Du sie vermutlich nicht.
            PHP-Code:
            <?php
            error_reporting
            (E_ALL);
            ini_set('display_errors'0);

            function 
            myErrorHandler($errno$errstr$errfile$errline)
            {
              echo 
            "<pre>myErrorHandler($errno, "htmlspecialchars($errstr), ", $errfile$errline)</pre>\n";
              
            flush();
              return 
            false;
            }
            set_error_handler("myErrorHandler");
            echo 
            $uff;

            ...
            der restliche Code...
            Schreib das einfach mal an den Anfang Deines Codes.
            Die Variable $uff ist nicht definiert, also wirst Du deshalb erstmal eine Warnung erhalten. Wenn das funktioniert (Du bekommst die Warnung angezeigt), entferne die Zeile echo $uff; und teste nochmal. Bekommst Du Fehler-/Warnmeldungen?

            Kommentar


            • #7
              Jo, jetzt habe ich eine Fehlermeldung erhalten:

              Warning: Cannot modify header information - headers already sent by (output started at D:\XAMPP\htdocs\homepage\hp\index.php:16) in D:\XAMPP\htdocs\homepage\includes\cookie_fns.php on line 6

              Also wie vermutet ist schon ne Ausgabe erfolgt..anscheinend in der index.php. Nur wie kann ich soetwas umgehen?

              Kommentar


              • #8
                Ganz einfach: In dem Du nichts ausgibst vor setcookie().
                Warum wird in index.php Zeile 16 schon etwas ausgegeben, bevor cookie_fns.php Zeile 6 ausgeführt wird?

                Kommentar


                • #9
                  in der index.php steht in der Zeile 16 nur ein Meta-Tag, aber es stimmt schon, das ganze Layout wird aufgebaut bevor der Cokkie gesetzt wird.
                  Nur ich weiß nicht, wie ich es realisieren kann, dass der Cookie eher gesetzt wird, weil:
                  Der Cookie ist Inhalt eines Anti-Spam-Tools, der Besucher darf nur einen Gästebuch-Eintrag pro Tag verfassen. Das hab ich mit ner IP-Sperre geregelt, aber das gibts immer noch ein paar Möchtegern-Spammer, die da des öftern einen Sinnlos-Eintrag verfassen.
                  Also wird das Formular abgeschickt, es werden die Eingaben geprüft und geprüft, ob Die IP bzw. de rRechner per Cookie gesperrt ist. Wenn nicht, wird der Eintrag in eine Datenbank geschrieben und der Cookie soll gesetzt werden.
                  Ich weiß also nicht, wie ich den Cookie woanders setzen könnte, weil er ja nur nach dem Abschicken eines Formulars gesetzt wird.

                  Kommentar


                  • #10
                    Ob Du nun
                    PHP-Code:
                    <form method="post"...>
                    ...
                      <input type="submit" name="xyz" />
                    </form>
                    <?php
                    if(isset($_POST['xyz'])) {
                      
                    doSomething();
                    }
                    oder
                    PHP-Code:
                    <?php
                    if(isset($_POST['xyz'])) {
                      
                    doSomething();
                    }
                    ?>
                    <form method="post"...>
                    ...
                      <input type="submit" name="xyz" />
                    </form>
                    hast, ist PHP völlig egal. Das Skript wird eh bei jedem Request von Anfang bis Ende ausgeführt.

                    Kommentar


                    • #11
                      Danke für die Info, nur löst das leider nicht mein Problem

                      Kommentar


                      • #12
                        Zitat von binäri Beitrag anzeigen
                        Also wird das Formular abgeschickt, es werden die Eingaben geprüft und geprüft, ob Die IP bzw. de rRechner per Cookie gesperrt ist. Wenn nicht, wird der Eintrag in eine Datenbank geschrieben und der Cookie soll gesetzt werden.
                        Mach all das, bevor irgendetwas ausgegeben wird.

                        Kommentar


                        • #13
                          Da brauch ich doch noch eine Hilfe.
                          Es ist für mich kein Problem, die einzelne Seite (mit dem Formular) nach dem Cookie-Setzen anzuzeigen, aber mir fehlt die Idee, wie ich es umsetzen kann, die gesamte Homepage später auszugeben.
                          Sieht ungefähr so aus:
                          Code:
                          <!--Navi-->
                          <div id="main">
                          <?php
                           include($_GET['site'] . '.php');
                           //site ist identisch dem Dateinamen der Datei, die in der Div angezeigt werden soll
                          ?>
                          </div>
                          <!--Footer-->
                          Als action ist index.php?site=DieZutreffendeSeite angegeben. Folglich wird die index.php mit den ganzen Div Boxen zuerstausgegeben, und wie gesagt, um das zu umgehen fehlt mir die Idee.
                          Bzw. hab ich eine Idee: Die Ausgabe von Div Boxen könnte in eigene Funktionen gepackt werden.
                          Code:
                          function seite_ausgeben {
                          echo "<div></div>";
                          //und so weiter...
                          }
                          Dann füge ich in die Index.php eine if-Abfrage ein, ob das Script ausgeführt wurde und starte dann die Seite_Ausgeben Funktion.
                          Allerdings halte ich das ganze für ziemlich umständlich.
                          Gibt's da ne andere Möglichkeit?

                          Kommentar


                          • #14
                            ganz oben in deine index.php einfach if($_GET['site']=="bla") einbauen? oder ganz oben diesen code includen?

                            Kommentar


                            • #15
                              Sorry, das versteh ich irgendwie nicht

                              PHP Code am Angang der Daei:
                              Code:
                              <?php
                              if($_GET['site']=='DieMitDemCookie') {
                              setcookie();
                              }
                              ?>
                              <html>
                              </html>
                              Soweit ist's klar, aber was meinst du mit 'ganz oben diesen code includen'? Den ganzen PHP Code? Das wäre halt notwendig, da vorher noch ne ganze Reihe Fehlerüberprüfungen durchgeführt werden sollten.

                              Anderer Lösungsansatz:
                              Ich kanns grad nicht ausprobieren, da ich weder Zeit noch nen PHP-fähigen Webserver hab. Gänge es, das Setzen des Cookies in eine Funktion zu packen, in der auch gleichzeitig ne Fehlerüberprüfung stattfindet?
                              Ungefähr so:
                              Code:
                              function CookieSetzen () {
                              if(allesok) {
                              setcookie();
                              } else {
                              die('Fehler');
                              }
                              }
                              Die ganze Funktion wird mit der if-Abfrage, die du gepostet hast, aufgerufen.
                              Code:
                              if($_GET['site']=='DieMitDemCookie') {
                              CookieSetzen();
                              }

                              Kommentar

                              Lädt...
                              X