Header nem tud írni, ha volt már kimenet
hi!
a problemam az ,hogy a header meghivasakor hiba jelentkezik, mert van valami a kimeneten es nem tud ra irni!
ezt meg lehet szuntetni, vagy mit lehet kezdeni a dologgal?
ennek a problemanak a megoldasa erdekel, ha van
elore is koszi
zsomi
ui bocs ha megint hulyeseg.
■ a problemam az ,hogy a header meghivasakor hiba jelentkezik, mert van valami a kimeneten es nem tud ra irni!
ezt meg lehet szuntetni, vagy mit lehet kezdeni a dologgal?
ennek a problemanak a megoldasa erdekel, ha van
elore is koszi
zsomi
ui bocs ha megint hulyeseg.
Re: header azaz az output-ot torolnem de hogyan
Robi
Re: header azaz az output-ot torolnem de hogyan
például ez így tökéletesen müködik:
similar problem...
Nekem is hasonló a problémám, de én annyira amatőr vagyok, hogy baromira nem is értem a problémát, illetve, hogy ez miért ilyen körülményes...
A történet a következő:
van egy index.php file-om a megfelelő header-rel. Ebben a fileban van egy pár include, többek között egy törzs (nevezzük body.php-nek), amiben pl a felhasználó autentikációt is meg akarom csinálni. Tehát egy formot mindenképpet ki kell iratnom. Amikor a user ráklikkel az ok gombra, akkor (mivel baromi amatőr vagyok, és nem tudok jobb megoldást egyenlőre), azt csinálom, hogy beolvastatom az index.php-t megint (ezen az oldalon van egyébként a login form is), itt ugye includolja a body.php-t, amely "tudja", hogy már megnyomtam az OK gombot, ezért beincludol egy login.php-t. Ez pedig lellenőrzi egy MySQL adatbázisban, hogy a megadott felhasználó létezik e vagy sem. Ha létezik, beállít egy sütit, amit a későbbiekben szeretnék használni. Namost itt jön a már jól ismert hiba, ugye ekkor már egy csomó minden van az outputon. Egyszerűen lehetetlenség szerintem minden sütit létrehozni az első kiiratás előtt. Persze lévén, hogy baromi amatőr vagyok, könnyen lehet, hogy az egész lényegét félreértettem, bár elég sokat keresgettem a googliban. Nincs más megoldás csak az ob_start()? Hogy szokás ezt a sütis dolgot megoldani?
Előre is köszi mindenkinek, aki meg tudja, de legalábbis megpróbálj megértetni velem ezt, a számotokra biztos baromi egyszerű dolgot! :)
---G---
Egy scriptet ált. elég egyszer futtatni - szvsz túlbonyolíto
A beléptetést végezd az index.php-d legelején: ha van elküldött űrlapadat, akkor annak segítségével ellenőrizheted az adatbázisban a usert (SQL injectionre figyelj!).
Innentől mehet a kiíratás, és átirányítanod sem kell.
Ha nincs űrlapadatod, vagy hibás volt a belépés, akkor ugye megint kirakod a belépési űrlapot.
Klasszikus átirányításos eset a fórum: bejegyzés elküldése után a script feldolgozza azt, majd ad egy átirányító headert, és meghívja a megjelenítést végző script(részlet)nek.
hmmm :)
Köszi a gyors választ!
Igen, az biztos, hogy túlbonyolítom, de ezen felül még mindig nem egészen értem a lényeget. Így néz ki az index.php nagyjából:
<html>
<head>
...
</head>
<body>
<?php
include("body.php");
...
?>
</body>
</html>
A body.php-ben van sokminden, de a lényeg az, hogy beléptetni nem feltétlenül kell ugye a usert. Tehát ezt csak akkor hívom meg, ha szükséges, amit viszont még az index.php elején nem tudok eldönteni. Tehát midenképpen lesznek kiiratásaim mielőtt a cookie-kat beállítom.
Talán segítene ha el tudnád röviden mondani, mit is értesz itt átirányítás alatt, illetvi mi is számít kiiratásnak? Nyilván én vagyok hozzá a hülye, de amit eddig triviálisnak hittem, az ellentmond ennek, hogy nem irathatok ki semmit, mielőtt beállítok egy cookie-t.
...
rossz a körmenet
...
Átirányításos és nem átirányításos megoldás
Ha mégis ragaszkodsz az egyetlen index.php-hez, akkor az alábbiak szerint építsd fel:
- űrlapelküldés ellenőrzése
- űrlapadatok feldolgozása, beléptetés, sütiküldés, ha kell
- html fej
- html törzs, benne index.php include, mely ellenőrzi, hogy meg kell-e még jeleníteni a beléptető űrlapot
- html "láb"
A HTML és PHP "kódegységeket" nagyjából rugalmasan pakolgathatod ide-oda.
Remélem, mindaddig nem kerül fel élesbe a lap, míg az alapvető megoldásokkal ekkora küzdelem van.
Read The Friendly Manual
http://www.php.net/manual/en/function.header.php
...
Note: As of PHP 4, you can use output buffering to get around this problem, with the overhead of all of your output to the browser being buffered in the server until you send it. You can do this by calling ob_start() and ob_end_flush() in your script, or setting the output_buffering configuration directive on in your php.ini or server configuration files.
Pici magyarabbul:
Figyelj arra, hogy a header() függvényt megelőzően nem lehet semmilyen output
...
Megjegyzés: A PHP 4 óta pufferelt outputot is használhatsz, hogy megkerüld a problémát azon az áron, hogy minden, a böngészőnek küldött adatod pufferelve lesz a szerveren amég el nem küldöd. Ezt az ob_start() és ob_end_flush() funkciók meghívásával érheted el, vagy ha engedélyezed az output_buffering konfigurációs direktívát a php.ini fájlodban vagy a szerver konfigurációs állományaiban (itt .htaccessre gondolnak).
Amúgy output: megemlítik, hogy az output az nem csak echo meg print, hanem akár egy üres sor, vagy egy ENTER a ?> után egy include fájlban, vagy egyáltalán bármi, ami a php tageken kívül van.
Hihetetlen, hogy egy ilyen buta kérdés mennyi embert megmozgat, az én magaröptű fórumszárnyalásaimra meg senki sem kíváncsi... :-/
...
A többieknek meg köszi a segítséget, azt hiszem, nagyjából sikerült megérteni a lényeget.Azt azonban hozzátenném, hogy nem egy szál index.php-ből áll az oldal, és az index.php is modulokból tevődik össze. Ilyen pl a beléptető modul is. Nah, de mind1, ezekkel nyilván lesz még problémám, hiszem még most tanulgatom a php-t.
Mégeccer köszi a segítséget azoknak, akik érdemben is képesek voltak hozzászólni a "buta kérdésemhez"!
Mea Culpa
...
A többieknek meg köszi a segítséget, azt hiszem, nagyjából sikerült megérteni a lényeget.Azt azonban hozzátenném, hogy nem egy szál index.php-ből áll az oldal, és az index.php is modulokból tevődik össze. Ilyen pl a beléptető modul is. Nah, de mind1, ezekkel nyilván lesz még problémám, hiszem még most tanulgatom a php-t.
Mégeccer köszi a segítséget azoknak, akik érdemben is képesek voltak hozzászólni a "buta kérdésemhez"!