Diskuze: Chyba: Warning: Cannot modify header information - headers already sent by....
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 10 zpráv z 10.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
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.
Možná pomůže zobrazení zdrojového kódu, koukni se, jestli máš před varováním nějaký text nebo znak.
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>
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#kontakt
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>';
Zkoušel jsem to a stále mi to vypisuje chybu.. :/ zkusím si s tím ještě pohrát...
Když jsem to zkoušel na zkušebním webhostingu tak mi to funguje, ale na ostrém ne. divné :/
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.
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().
Zobrazeno 10 zpráv z 10.