IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Pavel Kreps
Člen
Avatar
Pavel Kreps:4.6.2014 13:22

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
Tvůrce
Avatar
Odpovídá na Pavel Kreps
mkub:4.6.2014 13:38

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
4.6.2014 13:38
Avatar
Pavel Kreps
Člen
Avatar
Odpovídá na Pavel Kreps
Pavel Kreps:4.6.2014 14:07

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 Pavel Kreps
Michal Žůrek - misaz:4.6.2014 14:33

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

 
Nahoru Odpovědět
4.6.2014 14:33
Avatar
Martin
Člen
Avatar
Odpovídá na Pavel Kreps
Martin:4.6.2014 14:35

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
Tvůrce
Avatar
Odpovídá na Martin
mkub:4.6.2014 15:02

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
Tvůrce
Avatar
Odpovídá na Pavel Kreps
mkub:4.6.2014 15:04

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:12.9.2014 10:00

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
Avatar
Odpovídá na trnkto
Michal Štěpánek:12.9.2014 11:59

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:15.9.2014 7:45

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
Avatar
Neaktivní uživatel:2.10.2014 13:28

Co presne pomohlo? resim ten stejny problem

Nahoru Odpovědět
2.10.2014 13:28
Neaktivní uživatelský účet
Avatar
Richard
Člen
Avatar
Odpovídá na trnkto
Richard:2.10.2014 15:42

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
2.10.2014 15:42
$action = $_GET['Life']; | Když dáš mínus, napiš proč!
Avatar
00
Člen
Avatar
00:2.10.2014 16:28

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 Neaktivní uživatel
trnkto:6.10.2014 16:02

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
Avatar
Odpovídá na trnkto
Neaktivní uživatel:6.10.2014 20:32

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
Neaktivní uživatelský účet
Avatar
trnkto
Člen
Avatar
Odpovídá na Neaktivní uživatel
trnkto:8.10.2014 8:34

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

 
Nahoru Odpovědět
8.10.2014 8:34
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.