Autor Zpráva
stanislav.strnad@gmail.com
Profil
Dobrý den,
předem avizuji, že jsem na tuto problematiku pročetl všechny vlákna, přesto jsem problém nebyl schopný vyřešit (strávil jsem nad řešením několik hodin). Skripty dotčené s tímto jsem uložil bez DOMu v PSPadu, jinak používám celou dobu NetBeansi 8.0. Skript, s kterým mám problém i na něj navazující jsou všechny validní, žádný text před headerem nemám, stejně tak ani žádné mezery. Pokud by někdo znal nějaký ověřený nástroj na hledání bílých znaků (nebo jak se ta pakáž jmenuje :)), sem s ním. Zkoušel jsem někde v diskuzi uvedený http://validator.webylon.info/ a ten mi nic nenašel, osobně jsem řádek po řádku kontroloval ručně. Teď ke skriptu, který mi hází chybovou hlášku

Warning: Cannot modify header information - headers already sent by (output started at /data/web/virtuals/34480/virtual/www/administrace/editace_db_jazyk.php:19) in /data/web/virtuals/34480/virtual/www/administrace/editace_db_jazyk.php on line 58

<?php
require("php/session.php");
?>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8">
        <meta name="description" content="">
        <meta name="robots" content="all,follow">
        <meta name="generator" content="NetBeans IDE 7.4">
        <meta name="author" content="Stanislav Strnad">
        <meta name="description" content="Stránky poskytující informace o vybraných zemích">
        <meta name="keywords" content="země, kultura, zajímavosti, doprava, rozdíly">
        <link rel="stylesheet" type="text/css" href="css/admin-styly.css">
        <title>Editace jazyka | naucsekulture.eu</title>
    </head>
    <body>
        <div class="wrapper">
            <?php
            include_once('php/menu.php');

            function renderForm($id_jazyku, $nazev_jazyku, $error) {
                if ($error != '') {
                    echo '<div style="padding:4px; border:1px solid red; color:red;">' . $error . '</div>';
                }
                ?>

                <div class="vypis">
                    <form class="ramecek" method="POST">
                        <fieldset>
                            <legend>Vypsání jazyků z databáze</legend><br>
                            <div class="obsah">

                                <input type="hidden" name="id_jazyku" value="<?php echo $id_jazyku; ?>"/>
                                <div>
                                    <p><strong>ID:</strong> <?php echo $id_jazyku; ?></p>
                                    <strong>First Name: *</strong> <input type="text" name="nazev_jazyku" value="<?php echo $nazev_jazyku; ?>"/>
                                    <br/>
                                    <p>* Required</p>
                                    <input type="submit" name="submit" value="Submit">
                                </div>
                            </div>
                        </fieldset>
                    </form>
                    <?php
                }

                include('php/connect.php');
                if (isset($_POST['submit'])) {
                    if (is_numeric($_POST['id_jazyku'])) {
                        $id_jazyku = $_POST['id_jazyku'];
                        $nazev_jazyku = mysql_real_escape_string(htmlspecialchars($_POST['nazev_jazyku']));
                        if ($nazev_jazyku == '') {
                            $error = 'ERROR: Prosím, vyplňte všechna povinná pole!';
                            renderForm($id_jazyku, $nazev_jazyku, $error);
                        } else {
                            mysql_query("UPDATE JAZYK SET nazev_jazyku='$nazev_jazyku' WHERE id_jazyku='$id_jazyku'") or die(mysql_error());
                            header("Location: nacitani_db_jazyk.php");
                        }
                    } else {
                        echo 'Error!';
                    }
                } else {
                    if (isset($_GET['id_jazyku']) && is_numeric($_GET['id_jazyku']) && $_GET['id_jazyku'] > 0) {
                        $id_jazyku = $_GET['id_jazyku'];
                        $result = mysql_query("SELECT * FROM JAZYK WHERE id_jazyku=$id_jazyku") or die(mysql_error());
                        $row = mysql_fetch_array($result);
                        if ($row) {
                            $nazev_jazyku = $row['nazev_jazyku'];
                            renderForm($id_jazyku, $nazev_jazyku, '');
                        } else {
                            echo "No results!";
                        }
                    } else {
                        echo 'Error!';
                    }
                }
                ?>
            </div>
            <div style='clear:both'></div>
            <div class="footer">
                Nauč se kultuře © 2013. . . .<b>Stanislav Strnad</b>. . . .Všechna práva vyhrazena
            </div> 
        </div>
    </body>
</html>

Pokud jde o includované soubory, uvedu pro jistotu ještě je, podotýkám ovšem, že i když je zakomentuji, chyba se ukazuje pořád, takže v nich to nebude


session.php
<?php

session_start();
header("Cache-control: private");
$logged = $_SESSION['zalogoval'];
$username = $_SESSION['user'];

Skript (menu.php) je dost dlouhý, tak ho případně doplním později, po vložení je mi totiž konec vždy sežrán :)
Chro
Profil
Nemůžeš poslat na výstup HTML kód a poté někde přesměrovat headerem s parametrem location na 58. řádku. Přesměrování musí proběhnout před jakýmkoli výstupem do prohlížeče/posíláním HTTP hlaviček, protože přesměrováním se posílají taky hlavičky. A když už předtím byly nějaké odeslány, ty následující jsou neplatné.
Joker
Profil
stanislav.strnad@gmail.com:
Viz Nejčastější potíže s PHP (FAQ) - headers already sent…
stanislav.strnad@gmail.com
Profil
Chro:
A jak by si teda kod upravil? Přiznám se, že mi to poslední dny už vůbec nemyslí, jak do toho pořád čumím. Děkuji mnohokrát. Tak se mi to povedlo, omlouvám se za zbytečný dotaz a ztrátu vašeho času. Pro ostatní sem zadám, jak jsem kód upravil, aby to fungovalo, třeba to někomu po mě pomůže.

<?php
require("php/session.php");

function renderForm($id_jazyku, $nazev_jazyku, $error) {
    ?>
    <!DOCTYPE html>
    <html>
        <head>
            <meta http-equiv="content-type" content="text/html; charset=utf-8">
            <meta name="description" content="">
            <meta name="robots" content="all,follow">
            <meta name="generator" content="NetBeans IDE 7.4">
            <meta name="author" content="Stanislav Strnad">
            <meta name="description" content="Stránky poskytující informace o vybraných zemích">
            <meta name="keywords" content="země, kultura, zajímavosti, doprava, rozdíly">
            <link rel="stylesheet" type="text/css" href="css/admin-styly.css">
            <title>Editace jazyka | naucsekulture.eu</title>
        </head>
        <body>
            <div class="wrapper">
                <?php
                include_once('php/menu.php');

                if ($error != '') {
                    echo '<div style="padding:4px; border:1px solid red; color:red;">' . $error . '</div>';
                }
                ?>

                <div class="vypis">
                    <form class="ramecek" method="POST">
                        <fieldset>
                            <legend>Vypsání jazyků z databáze</legend><br>
                            <div class="obsah">

                                <input type="hidden" name="id_jazyku" value="<?php echo $id_jazyku; ?>"/>
                                <div>
                                    <p><strong>ID:</strong> <?php echo $id_jazyku; ?></p>
                                    <strong>First Name: *</strong> <input type="text" name="nazev_jazyku" value="<?php echo $nazev_jazyku; ?>"/>
                                    <br/>
                                    <p>* Required</p>
                                    <input type="submit" name="submit" value="Submit">
                                </div>
                            </div>
                        </fieldset>
                    </form>
                    <?php
                }

                include('php/connect.php');
                if (isset($_POST['submit'])) {
                    if (is_numeric($_POST['id_jazyku'])) {
                        $id_jazyku = $_POST['id_jazyku'];
                        $nazev_jazyku = mysql_real_escape_string(htmlspecialchars($_POST['nazev_jazyku']));
                        if ($nazev_jazyku == '') {
                            $error = 'ERROR: Prosím, vyplňte všechna povinná pole!';
                            renderForm($id_jazyku, $nazev_jazyku, $error);
                        } else {
                            mysql_query("UPDATE JAZYK SET nazev_jazyku='$nazev_jazyku' WHERE id_jazyku='$id_jazyku'") or die(mysql_error());
                            header("Location: nacitani_db_jazyk.php");
                        }
                    } else {
                        echo 'Error!';
                    }
                } else {
                    if (isset($_GET['id_jazyku']) && is_numeric($_GET['id_jazyku']) && $_GET['id_jazyku'] > 0) {
                        $id_jazyku = $_GET['id_jazyku'];
                        $result = mysql_query("SELECT * FROM JAZYK WHERE id_jazyku=$id_jazyku") or die(mysql_error());
                        $row = mysql_fetch_array($result);
                        if ($row) {
                            $nazev_jazyku = $row['nazev_jazyku'];
                            renderForm($id_jazyku, $nazev_jazyku, '');
                        } else {
                            echo "No results!";
                        }
                    } else {
                        echo 'Error!';
                    }
                }
                ?>
            </div>
            <div style='clear:both'></div>
            <div class="footer">
                Nauč se kultuře © 2013. . . .<b>Stanislav Strnad</b>. . . .Všechna práva vyhrazena
            </div> 
        </div>
    </body>
</html>
Micruss
Profil
Prostě nejdřív php kód potom html... jak tam máš echo tak to dej do proměnný nějaký já to dal např. o $err ... mrkni snad to bdue fungovat

<?php
require("php/session.php");


                include('php/connect.php');
                if (isset($_POST['submit'])) {
                    if (is_numeric($_POST['id_jazyku'])) {
                        $id_jazyku = $_POST['id_jazyku'];
                        $nazev_jazyku = mysql_real_escape_string(htmlspecialchars($_POST['nazev_jazyku']));
                        if ($nazev_jazyku == '') {
                            $error = 'ERROR: Prosím, vyplňte všechna povinná pole!';
                            renderForm($id_jazyku, $nazev_jazyku, $error);
                        } else {
                            mysql_query("UPDATE JAZYK SET nazev_jazyku='$nazev_jazyku' WHERE id_jazyku='$id_jazyku'") or die(mysql_error());
                            header("Location: nacitani_db_jazyk.php");
                        }
                    } else {
                        $err = 'Error!';
                    }
                } else {
                    if (isset($_GET['id_jazyku']) && is_numeric($_GET['id_jazyku']) && $_GET['id_jazyku'] > 0) {
                        $id_jazyku = $_GET['id_jazyku'];
                        $result = mysql_query("SELECT * FROM JAZYK WHERE id_jazyku=$id_jazyku") or die(mysql_error());
                        $row = mysql_fetch_array($result);
                        if ($row) {
                            $nazev_jazyku = $row['nazev_jazyku'];
                            renderForm($id_jazyku, $nazev_jazyku, '');
                        } else {
                            $err = "No results!";
                        }
                    } else {
                        $err = 'Error!';
                    }
                }

?>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8">
        <meta name="description" content="">
        <meta name="robots" content="all,follow">
        <meta name="generator" content="NetBeans IDE 7.4">
        <meta name="author" content="Stanislav Strnad">
        <meta name="description" content="Stránky poskytující informace o vybraných zemích">
        <meta name="keywords" content="země, kultura, zajímavosti, doprava, rozdíly">
        <link rel="stylesheet" type="text/css" href="css/admin-styly.css">
        <title>Editace jazyka | naucsekulture.eu</title>
    </head>
    <body>
        <div class="wrapper">
            <?php
            include_once('php/menu.php');
             if(isset($err)) echo $err;
            function renderForm($id_jazyku, $nazev_jazyku, $error) {
                if ($error != '') {
                    echo '<div style="padding:4px; border:1px solid red; color:red;">' . $error . '</div>';
        
                <div class="vypis">
                    <form class="ramecek" method="POST">
                        <fieldset>
                            <legend>Vypsání jazyků z databáze</legend><br>
                            <div class="obsah">
 
                                <input type="hidden" name="id_jazyku" value="<?php echo $id_jazyku; ?>"/>
                                <div>
                                    <p><strong>ID:</strong> <?php echo $id_jazyku; ?></p>
                                    <strong>First Name: *</strong> <input type="text" name="nazev_jazyku" value="<?php echo $nazev_jazyku; ?>"/>
                                    <br/>
                                    <p>* Required</p>
                                    <input type="submit" name="submit" value="Submit">
                                </div>
                            </div>
                        </fieldset>
                    </form>
                    <?php
                }               ?>
            </div>
            <div style='clear:both'></div>
            <div class="footer">
                Nauč se kultuře © 2013. . . .<b>Stanislav Strnad</b>. . . .Všechna práva vyhrazena
            </div> 
        </div>
    </body>
</html>


EDIT: ještě si uprav tu funkci... sem na to zapomněl, to zvládneš už

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: