Diskuze: problem s header

PHP PHP problem s header American English version English version

Avatar
molek
Člen
Avatar
molek:

Zdravím, měl bych otázku.
Dle místního seriálu se učím PHP a dle článků:
9. díl - Vylepšení kontaktního formuláře
10. díl - Skládání v PHP
jsem napsal stránky a snažím se formulář do nich vložit, ale
jak je jasno z článku použitá část kódu:

header('Location: mailform.php?us­pech=ano');

mi hodí chybu: headers already sent...

PHP kód s odkazem na podstránku s formulářem vkládám do části section,
takže je mi jasné, že takto to nepůjde, ale nevím, jak jinak to ošetřit.
Předem díky za odpověď.

 
Odpovědět 4.6.2014 13:22
Avatar
mkub
Redaktor
Avatar
Odpovídá na molek
mkub:

header musi byt vlozeny uplne na zaciatku stranky a pred nim nesmie byt ani prazdny riadok, ako ani HTML kod...
cezi takto:

<?php
header (...)

PHP KOD

?>
HTML kod

kazde jedno vypisanie do stranky zabezpeci poslanie hlavicky a to sposobi vygenerovanie chyby, ze uz je header pouzity

 
Nahoru Odpovědět  +2 4.6.2014 13:38
Avatar
molek
Člen
Avatar
Odpovídá na molek
molek:

Tomu rozumím, já nevím, jak udělat, aby ve formuláři při špatném
zadání byly zachovány hodnoty v kolonkách.
Dle článku je to řešené přesměrováním pomocí header. Jenže to
použít nemůžu viz tvoje odpověď. Tak se ptám, jak to vyřešit jinak...

 
Nahoru Odpovědět 4.6.2014 14:07
Avatar
Odpovídá na molek
Michal Žůrek (misaz):

prostě ten řádek s header přesuneš úplně na začátek toho php soubor.

Nahoru Odpovědět  +1 4.6.2014 14:33
Nesnáším {}, proto se jim vyhýbám.
Avatar
Martin
Člen
Avatar
Odpovídá na molek
Martin:

odeslání header je v článků z důvodu aby nedocházelo k následnému znovuodeslání formuláře při reloadu stránky. Při odeslání header se vyčistí $_POST.

pokud chceš aby při špatně vyplněném formuláři zůstal formulář předvyplněn tak na stránce kde zpracováváš výstup z formuláře použij podmínku
if ($odesláno) { // odesláno, uloženo do databáze a pod.
header('Location: index.php'); // přesměruj se kam potebuješ dál
}
else {
header('Location: index.php?jme­no=$prijmeni='); // nebo se vrať na stránku z formulářam a přes $_GET si předej obsah.

Pokud nechčeš předávat obsah zpět přes $_GET tak můžeš použít $_SESSION
}

Nahoru Odpovědět 4.6.2014 14:35
Je jedno co děláš, ale záleží jak dobře to umíš prodat.
Avatar
mkub
Redaktor
Avatar
Odpovídá na Martin
mkub:

tuto podmienku by som dal uplne na zaciatok stranky, lebo inak, ak by sa vygeneroval pred nou vystup do stranky, tak funkcia header() ti vyhlasi presne tuto chybu

 
Nahoru Odpovědět 4.6.2014 15:02
Avatar
mkub
Redaktor
Avatar
Odpovídá na molek
mkub:

jednoducho praca s funkciou header() patri uplne na zaciatok suboru, ked este nie je vkladanie vystupu do stranky

 
Nahoru Odpovědět 4.6.2014 15:04
Avatar
trnkto
Člen
Avatar
trnkto:

Ahoj, chtěl bych s zeptat, jestli existuje nějaká jiná možnost jak přesměrovat na jinou stránku, když nelze použít header? Mám stránku, do které se mi načítá stránka formulář (http://www.itnetwork.cz/…dani-stranek). A potřebuji nakonec přidat přesměrování na stránku s výpisem dat.
idaálně

$edit = mssql_query('UPDATE tabulka SET Nazev = "' . $nazev . '", ICO = "' . $ico . '", DIC = "' . $dic . '", Adresa = "' . $adresa . '", Telefon = "' . $telefon . '", Email = "' . $email . '" WHERE ID_Dodavatel = ' . $_POST['id_dodavatel'] . '');
                                if($edit)
                                {
                                        $hlaska = ('Editováno');
                                        header('Location: http://www.neco.cz/formular/uvod.php?strana=test2');
                                        exit();
                                }
Nahoru Odpovědět 12.9.2014 10:00
Nechci být nejlepší, abych se od těch nejlepších mohl učit
Avatar
Odpovídá na trnkto
Michal Štěpánek:

Nevím, jak se to dělá dnes, ale dříve jsem používal toto:

echo "<meta http-equiv='Refresh' content='0;URL=..'>";
Nahoru Odpovědět 12.9.2014 11:59
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
trnkto
Člen
Avatar
Odpovídá na Michal Štěpánek
trnkto:

Díky moc. Pomohlo to. Ani nedokážu vysvětlit přoč jsem se tomu chtěl vyhnout. Nenapadlo mě, že to bude fungovat. Ještě jednou dík 8-)

Nahoru Odpovědět 15.9.2014 7:45
Nechci být nejlepší, abych se od těch nejlepších mohl učit
Avatar
tomesm
Člen
Avatar
tomesm:

Co presne pomohlo? resim ten stejny problem

 
Nahoru Odpovědět 2.10.2014 13:28
Avatar
Richard
Člen
Avatar
Odpovídá na trnkto
Richard:

A proč nepoužít header?
Běžná praxe je ta, že na začátku php skriptu se nejdřív zpracují akce (uložení, smazání, cokoliv..) přes ify a pokud je třeba headery, tedy pokud některá z těch podmínek platí, provede se kód, pošle hlavička na přesměrování a zavolá se exit();.

Používání html refreshe je krajně nevhodné.

Další alternativou, jak obejít nefunkčnost header() kvůli předchozímu výstupu je output buffering.

Nahoru Odpovědět  +1 2.10.2014 15:42
$action = $_GET['Life']; | Když dáš mínus, napiš proč!
Avatar
00
Člen
Avatar
00:

Output Buffering - Jestli si to dobře pamatuji, začíná PHP soubor

ob_start();// Spusit

a končí

ob_end_flush(); // Odeslat a vypnout buffer

pozn. To je jen postup, který dovoluje "odesílat" hlavičku i po vypsání textu.

Omlouvám se za případné chyby, moc to nepoužívám.

 
Nahoru Odpovědět 2.10.2014 16:28
Avatar
trnkto
Člen
Avatar
Odpovídá na tomesm
trnkto:

pomohl mi meta refresh. Už jsem asi někdě četl, že to neni vhodné jak píše Richard. Dokud jsem měl stránku čistou a vykonávali se nejdříve scripty a poté až výpis, header fungoval. Po tom co jsem stránku začal vlkádat do hlavní stránky pomocí http://www.itnetwork.cz/…dani-stranek
už header nefungoval.

Editováno 6.10.2014 16:03
Nahoru Odpovědět 6.10.2014 16:02
Nechci být nejlepší, abych se od těch nejlepších mohl učit
Avatar
tomesm
Člen
Avatar
Odpovídá na trnkto
tomesm:

Ano, preste stejny problem jsem mel, kdyz jsem v tutorialu na clanek sestavovan istranek pomoci php :) Ale jde to elegantne vyresit objekty, viz clanek "Jednoduchy redakcni system v PHP (MVC). Ja se prokousal serialem o objektovem programovani v PHP a ted delam ten redakcnci system a tam se presne tohle resi pomoci objektu, takze az se k tomu prokouses, zadnej metarefresh potrebovat nebudes ;)

 
Nahoru Odpovědět 6.10.2014 20:32
Avatar
trnkto
Člen
Avatar
Odpovídá na tomesm
trnkto:

Dík, pomalu se k tomu dostávám :)

Nahoru Odpovědět 8.10.2014 8:34
Nechci být nejlepší, abych se od těch nejlepších mohl učit
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 16 zpráv z 16.