Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Warning: Cannot modify header information -

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Warning: Cannot modify header information -

    Hallo zusammen,

    ich kann mir einfach grad nicht mehr weiterhelfen.

    Ich rufe auf meiner Homepage das folgende Formular als Iframe auf mit Joomla.


    Code:
    <!-- Der Link von der Datei ist bei den Modulen unter Joomla gesetzt  -->
    <html>
    <head>
    <title>Newsletter</title>
    </head>
    <body>
    
    <form method="post" action="newsletter_user_update.php">
      <p>
      <table>
      <tr>
        <th><input type="radio" name="newsletter" value="news_on">on<br></th>
        <th><input type="radio" name="newsletter" value="news_off">off<br></th>
    	</tr>
        </table> 
      </p>
    	<input type="image" src="newsletter.png" alt="Absenden">
    </form>
    
    </body>
    </html>
    Je nach dem was der Benutzer auswählt wird die Variable an folgendes PHP Formular übergeben.

    PHP-Code:
    <?php
    session_start
    ();
    define('_JEXEC'1);
    define('JPATH_BASE''/hier steht der Orginal Pfad');
    define'DS'DIRECTORY_SEPARATOR);

    require_once(
    JPATH_BASE.DS.'includes'.DS.'defines.php');
    require_once(
    JPATH_BASE.DS.'includes'.DS.'framework.php');

    $mainframe =& JFactory::getApplication('site');
    $mainframe->initialise();

    $user =& JFactory::getUser();
    $userid $user->get('id');
    $usermail $user->get ('email');

    echo 
    $usermail;
    //Muss unbedingt unter ansi gespeichert werden
    //Einbinden der Datenbankverbindung
         
    include("connect_089.php");

    //An oder Abschalten

    $news $_POST['newsletter'];


    //Ändern des Newsletters Status


    if ($news == "news_off" )
      {
            
    mysql_query("UPDATE `jos_users` Set newsletter = '1' WHERE     email = '$usermail'");

            
    //echo "der Newsletter  wurde deaktiviert.";
            
    $info_text "Newsletter wurde deaktiviert.";
            
    //echo "<td>" . $zeile['email'] . "</td>";
            //echo "<td>" . $zeile['newsletter'] . "</td>";
      
    }
      else {
      
    mysql_query("UPDATE `jos_users` Set newsletter = '0' WHERE     email = '$usermail'");
        
            
    //echo "der Newsletter   wurde aktiviert";
            
    $info_text "Newsletter wurde aktiviert";
            
    //echo "<td>" . $zeile['email'] . "</td>";
            //echo "<td>" . $zeile['newsletter'] . "</td>";
        
    }

        
    /* Umlaute */
    $begruessung "Grüss Gott,";
    $begruessung htmlentities($begruessungENT_QUOTES ENT_IGNORE"UTF-8");
    $grussformel "einen schönen Tag wünscht Ihnen,";
    $grussformel htmlentities($grussformelENT_QUOTES ENT_IGNORE"UTF-8");
    $grussformel_1 "Aktuelle Wohnungsinfos uber Facebook:";
    $grussformel_1 htmlentities($grussformel_1ENT_QUOTES ENT_IGNORE"UTF-8");
        
        
    //Versenden der Bestätigungsemail
          
        
    $empfaengerString $usermail;
        
    $subject $info_text;
        
    //echo $info_text;
        
        
        
    include("email.php");

        
    //Weiterleitung auf die Ursprungsseite
        
      
    header('HTTP/1.1 301 Moved Permanently'); 
      
    header('Location: http://www.xxxx.de/mail/newsletter_radio.html'); 
    session_start();      
    echo 
    mysql_error();
     
    ?>
    Wenn ich das Formular das erste mal ausführen passiert gar nichts. Beim Zweiten mal wird der Newsletter versendet und in der Datenbank der Eintrag geändert. Und es kommt folgende Fehlermeldung.

    JAssfalg@gmx.de
    Warning: Cannot modify header information - headers already sent by (output started at /homepages/30/d263677315/htdocs/mail/newsletter_user_update.php:17) in /homepages/30/d263677315/htdocs/mail/newsletter_user_update.php on line 69

    Warning: Cannot modify header information - headers already sent by (output started at /mail/newsletter_user_update.php:17) in /mail/newsletter_user_update.php on line 70
    Was ich versuche ist eigentlich lediglich den angemeldeten Benutzer auszulesen und anschließend seinen Status zu ändern. Das Formular soll aber immer stehen bleiben und nur die Email versendet werden.

    Wäre echt dankbar.

    Lieben Gruß

  • #2
    Du darfst keinen Header setzen nachdem eine Ausgabe erzeugt wurde! Wo du einen Header setzt und wo eine Ausgabe erzeugt wurde, sagt dir die Fehlermeldung. Ansonsten benutze bitte die Forensuche oder eine Suchmaschine deiner Wahl. Das Thema wurde nämlich schon zig mal behandelt.

    VG

    Kommentar


    • #3
      OK. Verstanden. Wie kann ich das Formular einfach wieder aufrufen, das es immer wieder das steht ? Auch nachdem absenden.

      Kommentar


      • #4
        Es liegt wahrscheinlich am iframe das mit dem ich das Formular aufrufe. Wenn ich es ohne das Iframe mache funktioniert es tadellos. Ruf das Formular gerade nur mit einem Link auf.

        Kommentar


        • #5
          Nein, tut es nicht. Lies bitte noch einmal, was BR2012 geschrieben hat.
          Header-Daten werden übrigens auch von session_start() geschrieben (das du auch unnötigerweise zweimal im Code hast).

          FYI: http://www.php.de/wiki-php/index.php...s_already_sent

          Kommentar


          • #6
            ja den zweiten habe ich schon rausgenommen. Mein Script schaut jetzt so aus.

            PHP-Code:
            <?php
            session_start
            ();
            define('_JEXEC'1);
            define('JPATH_BASE''/Pfad');
            define'DS'DIRECTORY_SEPARATOR);

            require_once(
            JPATH_BASE.DS.'includes'.DS.'defines.php');
            require_once(
            JPATH_BASE.DS.'includes'.DS.'framework.php');

            $mainframe =& JFactory::getApplication('site');
            $mainframe->initialise();

            $user =& JFactory::getUser();
            $userid $user->get('id');
            $usermail $user->get ('email');

            echo 
            $usermail;
            //Muss unbedingt unter ansi gespeichert werden
            //Einbinden der Datenbankverbindung

            ?>
            <!-- Der Link von der Datei ist bei den Modulen unter Joomla gesetzt  -->
            <html>
            <head>
            <title>Newsletter</title>
            </head>
            <body>

            <form method="post" action="<?=$_SERVER['PHP_SELF']?>">
              <p>
              <table>
              <tr>
                <th><input type="radio" name="newsletter" value="news_on">on<br></th>
                <th><input type="radio" name="newsletter" value="news_off">off<br></th>
                </tr>
                </table> 
              </p>
                <input type="image" src="newsletter.png" alt="Absenden">
            </form>

            </body>
            </html>




            <?php 
            include("connect_089.php");

            //An oder Abschalten

            $news $_POST['newsletter'];


            //Ändern des Newsletters Status


            if ($news == "news_off" )
              {
                    
            mysql_query("UPDATE `jos_users` Set newsletter = '1' WHERE     email = '$usermail'");

                    
            //echo "der Newsletter wurde deaktiviert.";
                    
            $info_text "Newsletter  wurde deaktiviert.";
                    
            //echo "<td>" . $zeile['email'] . "</td>";
                    //echo "<td>" . $zeile['newsletter'] . "</td>";
              
            }
              else {
              
            mysql_query("UPDATE `jos_users` Set newsletter = '0' WHERE     email = '$usermail'");
                
                    
            //echo "der Newsletter von  aktiviert";
                    
            $info_text "Newsletter von  wurde aktiviert";
                    
            //echo "<td>" . $zeile['email'] . "</td>";
                    //echo "<td>" . $zeile['newsletter'] . "</td>";
                
            }

                
            /* Umlaute */
            $begruessung "Grüss Gott,";
            $begruessung htmlentities($begruessungENT_QUOTES ENT_IGNORE"UTF-8");
            $grussformel "einen schönen Tag wünscht Ihnen,";
            $grussformel htmlentities($grussformelENT_QUOTES ENT_IGNORE"UTF-8");
            $grussformel_1 "Aktuelle Wohnungsinfos uber Facebook:";
            $grussformel_1 htmlentities($grussformel_1ENT_QUOTES ENT_IGNORE"UTF-8");
                
                
            //Versenden der Bestätigungsemail
                  
                
            $empfaengerString $usermail;
                
            $subject $info_text;
                
            //echo $info_text;
                
                
                
            include("email.php");

                
                  
            echo 
            mysql_error();
             
            ?>
            Jetzt muss ich nur noch die übergebenen Variablen besser machen das nicht gleich eine Aktion ausgeführt wird und weiter gehts.

            Kommentar


            • #7
              Header werden immer gesendet, sobald du irgendeine Information an den Browser schickst.



              Das kann HTML Code sein, aber auch ein Sessionstart, denn in beiden Fällen sendest du etwas an den Client zurück.
              Der Client möchte aber gerne das "Format" der Daten kennen, und bekommt dann einen Header mitgeschickt, indem diese Informationen stehen.


              Lösung:
              Deinen header musst du ganz am Anfang, vor der ersten Ausgabe oder dem sessionstart() Aufruf senden.


              Liebe Grüße
              Max

              Kommentar


              • #8
                Zitat von Manko10 Beitrag anzeigen
                Nein, tut es nicht. Lies bitte noch einmal, was BR2012 geschrieben hat.
                Header-Daten werden übrigens auch von session_start() geschrieben (das du auch unnötigerweise zweimal im Code hast).

                FYI: http://www.php.de/wiki-php/index.php...s_already_sent
                Dieser Artikel ist balsam auf meine Seele. Jetzt funktioniert es tadellos.

                Habe mich einfach an die Empfehlung gehalten. Vielleich werde ich es ja mal auch ganz verstehen. Danke

                Kommentar


                • #9
                  Es Sessionstart erzeugt (i.S. von sendet) keinen Header. Dass header-Anweisungen davor stehen müssen ist Quatsch.

                  Kommentar


                  • #10
                    Naja, gesendet werden die Header, sobald das erste Byte der Payload geschrieben wird. Deshalb kann man auch keine Header mehr setzen, wenn bereits ein Output erfolgt ist. Davor kann man bereits gesetzte Header aber auch noch ändern bzw. wieder entfernen, da noch nichts wirklich gesendet wurde.
                    Erzeugt im Sinne von gesetzt werden Header von einem session_start() aber durchaus.
                    Dass sämtliche header()-Aufrufe vor einem session_start() erfolgen müssen, ist aber natürlich Blödsinn.

                    Kommentar

                    Lädt...
                    X