Vánoční nadílka Vánoční nadílka
Vánoční akce! Daruj lepší budoucnost blízkým nebo sobě. Až +50 % zdarma na dárkové poukazy. Více informací

Diskuze: Chyba: Warning: Cannot modify header information - headers already sent by....

PHP PHP Chyba: Warning: Cannot modify header information - headers already sent by.... American English version English version

Aktivity (1)
Avatar
torhanmichal
Člen
Avatar
torhanmichal:6. září 17:37

Zdravím vás potřeboval bych poradit. Mám stejný kontaktní formulář, jako zde na ITnetwork v 8 lekci. Po odeslaní dat z formuláře se mi vypíše tato chybová hláška: Warning: Cannot modify header information - headers already sent by.... pages/contact.php on line 22. Jedná se o tuto část (v místě header)

if ($success)
           {
            $hlaska = 'Email byl úspěšně odeslán, brzy vám odpovíme.';
            header('Location: #kontakt&success=yes');
            exit;
           }

Díval jsem se na nějaké fóra, a kódováni jsem změnil na UTF bez BOM. Ale výsledek pořad stejný. Budu rád za každou radu děkuji.

Zkusil jsem: ...

Chci docílit: ...

 
Odpovědět 6. září 17:37
Avatar
Šimon Rataj
Člen
Avatar
Šimon Rataj:6. září 20:07

Tato hláška většinou znamená, že jsi zkoušel odeslat odeslat hlavičku po nějakém textovém výstupu. Podívej se, jestli nemáš na začátku nějaké echo/print nebo např. mezeru před <?php.

 
Nahoru Odpovědět 6. září 20:07
Avatar
Šimon Rataj
Člen
Avatar
Šimon Rataj:6. září 20:08

Možná pomůže zobrazení zdrojového kódu, koukni se, jestli máš před varováním nějaký text nebo znak.

 
Nahoru Odpovědět 6. září 20:08
Avatar
torhanmichal
Člen
Avatar
Odpovídá na Šimon Rataj
torhanmichal:6. září 20:54

Index:

<!DOCTYPE html>
<html lang="cs-cz">
        <head>
            <!-- Global site tag (gtag.js) - Google Analytics -->
            <script async src="https://www.googletagmanager.com/gtag/js?id=UA-125348496-1"></script>
            <script src="js/gtag.js"></script>
            <meta charset="utf-8" />
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <meta name="robots" content="index,follow" />
            <link rel="shortcut icon" href="images/db.ico" />
            <link rel="stylesheet" href="css/styl.css" type="text/css" />
            <link rel="stylesheet" href="css/menu.css" type="text/css" />
            <link rel="stylesheet" href="css/cookies.css" type="text/css" />
            <link rel="stylesheet" type="text/css" href="css/FontAwesome/css/font-awesome.min.css">
            <script src="js/jquery.smooth-scroll.min.js"></script>
            <script src="js/jquery-1.7.2.min.js"></script>
            <script src="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.0.3/cookieconsent.min.js"></script>
            <script>window.addEventListener("load", function(){window.cookieconsent.initialise({"palette": {"popup": {"background": "#262b31","text": "#ffffff"},"button": {"background": "transparent","text": "#ffffff","border": "#FFFFFF;;"}},"content": {"message": "Tento web používá k poskytování služeb a analýze\nnávštěvnosti soubory cookies. Používáním tohoto webu s tím souhlasíte.\n\n","dismiss": "OK","link": "Víc informací","href": "index.php?page=cookies"}})});</script>
            <title></title>
        </head>

        <body>
            <header>
                <div id="logo"><h1><a href="index.php?=domu"><img src="images/dibacoin.png" alt="Diba Coin"></a></h1></div>
            </header>
            <div class="cistic"></div>
            <nav id="navigation">
                            <div class="menu__wrapper">
                                <button id="tlacitko-telefon" class="menu__TelefonTlacitko"><i class="fa fa-bars"></i></button>
                                <div class="menu__pc-telefon--overeni"></div> <!-- ověřovací div viz: menu.js.. -->
                                <div class="menu__telefon">
                                    <?php require_once('pages/menu.php');?>  <!-- načte navigační menu.-->
                                </div>
                            </div>
                        </nav>
                    <div class="cistic"></div>
               <article>
                    <div id="centrovac">
                        <section>
                            <?php require('pages/slideshow.php');?>
                            <div class="cistic"></div>
                            <?php
                                if (isset($_GET['page']))
                                    $stranka = $_GET['page'];
                                else
                                    $stranka = 'uvod';
                                if (preg_match('/^[a-z0-9]+$/', $stranka))
                                {
                                    $vlozeno = include('pages/' . $stranka . '.php');
                                    if (!$vlozeno)
                                    echo('Podstránka nenalezena');
                                }
                                else
                                    echo('Neplatný parametr.');
                            ?>
                        </section>
                    </div>
                </article>
                <div class="cistic"></div>

                <footer>
                    <?php require('pages/contact.php');?>
                    <?php require_once('pages/footer.php');?>
                </footer>
   </body>
   <script type="text/javascript" src="js/menu.js"></script>
   <script type="text/javascript" src="js/slideshow.js"></script>
</html>

v patičce mám ten kontaktní formulář který načítám -

<?php
mb_internal_encoding("UTF-8");
    $hlaska = '';
    if (isset($_GET['success']))
        $hlaska = 'Email byl úspěšně odeslán, brzy vám odpovíme.';
    if ($_POST) // V poli _POST něco je, odeslal se formulář
    {
        if (isset($_POST['jmeno']) && $_POST['jmeno'] &&
            isset($_POST['email']) && $_POST['email'] &&
            isset($_POST['zprava']) && $_POST['zprava'] &&
            isset($_POST['rok']) && $_POST['rok'] == date('Y'))
        {
            $hlavicka = 'From:' . $_POST['email'];
            $hlavicka .= "\nMIME-Version: 1.0\n";
            $hlavicka .= "Content-Type: text/html; charset=\"utf-8\"\n";
            $adresa = '[email protected]';
            $predmet = 'Zpráva z Dibacoinu';
            $success = mb_send_mail($adresa, $predmet, $_POST['zprava'], $hlavicka);
            if ($success)
            {
             $hlaska = 'Email byl úspěšně odeslán, brzy vám odpovíme.';
             header('Location: #kontakt&success=yes');
             exit;
            }
            else
                $hlaska = 'Email se nepodařilo odeslat. Zkontrolujte adresu.';
        }
        else
            $hlaska = 'Formulář není správně vypněn!';
    }
    ?>
        <?php
            if ($hlaska)
                echo('');
            $jmeno = (isset($_POST['jmeno'])) ? $_POST['jmeno'] : '';
            $email = (isset($_POST['email'])) ? $_POST['email'] : '';
            $zprava = (isset($_POST['zprava'])) ? $_POST['zprava'] : '';
        ?>


        <form method="POST">
            <table class="diskuse-formular">
                <p id="kontakt"> Kontaktní Formulář</p>
                <tr>
                    <td>Jméno a Příjmení:</td>
                    <td><input name="jmeno" type="text" class="pole" value="<?= htmlspecialchars($jmeno) ?>"/></td>
                </tr>
                <tr>
                    <td>Váš email:</td>
                    <td><input name="email" type="email" class="pole" value="<?= htmlspecialchars($email) ?>"/></td>
                </tr>
                <tr>
                    <td>Aktuální rok:</td>
                    <td><input name="rok" type="number" class="pole" /></td>
                </tr>
                <tr>
                    <td>Zpráva:</td>
                    <td><textarea name="zprava" class="textarea"><?= htmlspecialchars($zprava) ?></textarea></td>
                </tr>
                <tr>
                    <td></td>
                    <td><input type="submit" value="Odeslat" class="sender" /></td>
                </tr>
            </table>
        </form>
        <p class="hlaska_contact"><?= htmlspecialchars($hlaska) ?></p>
 
Nahoru Odpovědět 6. září 20:54
Avatar
Šimon Rataj
Člen
Avatar
Šimon Rataj:6. září 21:02

Abys předešel této chybě, musíš dát celou podmínku if($_POST) na zažátek index.php (ještě před <!DOCTYPE) nebo použít přesměrovávání javascriptem. Také mám pocit, že máš v přesměrovávání špatnou adresu, mělo by to být: ?success=yes#kon­takt
Jestli chceš přesměrovávat javascriptem, můžeš nahradit Header tímto:

print '<script type="text/javascript">window.location.replace("?success=yes#kontakt");</script>';
 
Nahoru Odpovědět 6. září 21:02
Avatar
torhanmichal
Člen
Avatar
Odpovídá na Šimon Rataj
torhanmichal:6. září 21:30

Zkoušel jsem to a stále mi to vypisuje chybu.. :/ zkusím si s tím ještě pohrát...

 
Nahoru Odpovědět 6. září 21:30
Avatar
torhanmichal
Člen
Avatar
Odpovídá na Šimon Rataj
torhanmichal:6. září 21:34

Každopádně děkuji ;)

 
Nahoru Odpovědět 6. září 21:34
Avatar
torhanmichal
Člen
Avatar
Odpovídá na Šimon Rataj
torhanmichal:6. září 21:37

Když jsem to zkoušel na zkušebním webhostingu tak mi to funguje, ale na ostrém ne. divné :/

 
Nahoru Odpovědět 6. září 21:37
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:7. září 7:37

Mas tam spoustu chyb, ale to resit nechci.
Zpracovani php bys mel delat pred jakymkolich echo nebo html tagem. A az mas vse pripravene, natahane v promenych, pak teprve zacnes vypisovat html a echo te promene.
Nebo muzes zkusit dat pred vsechen html, php kod ob_start();. To mozna vyresi tu hlasku, ale nevyresi pozdejsi dalsi problemy.

 
Nahoru Odpovědět 7. září 7:37
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:7. září 7:40

Totiz, ty mas nastaveny hosting tak, ze, pokud se objevi v kodu jakekoliv echo nebo html kod, tak cely ten kousicek kodu okamzite odesila uzivateli. A aby to mohl odeslat, musi uzavrit header. Kdyz chce poslat dalsi cast, odesila to se stejnou header. Pokud by byla jina, jedna se o jiny soubor, stranku. Takze, kdyz tam mas html kod a nekde uprostred si delas php kod, tak to uz je pozde menit header().

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 7. září 7:40
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.