TOT DESPRE: headers already sent by (output started at C:\

Secţiune dedicată începatorilor.

Moderatori: Moderatori, Start Moderator

papaleon
Average Member
Mesaje: 87
Membru din: Dum Dec 27, 2015 11:26 pm

TOT DESPRE: headers already sent by (output started at C:\

Mesajde papaleon » Vin Mar 10, 2017 4:58 pm

SAL ! Scuze ca revin cu acest subiect . Va rog scoateti-ma din "zona crepusculara " ....
Am studiat tot ce am gasit si in engleza si aici, dar nu am reusit sa-i dau de capat ...
Am o pagina index.html in care apelez un cod form_login.php sub forma unui banner si un alt cod
autentificare.php plasat in pagina intr-un table, sub forma ...(schematic !)

<html><title>index</title>
.......
<body>
linia 39 <div ...><?php require("form_login.php")?></div>
<table ........>
......... aici sunt taguri html care formeaza continutul paginii
.........dupa verificare la LOGIN, trec mai departe la AUTENTIFICARE, daca nu e logat...
<tr>
linia 125 <td><?php require("autentificare.php")?></td>
</tr>
.........
</table>
</body>
</html>
La rulare, afiseaza corect formularul login, in capul paginii, iar la introducerea unui username, daca nu e logat, nu mi se mai afiseaza
si formularul din autentificare.php ci in locul lui imi baga mesajul:
Warning: Cannot modify header information - headers already sent by (output started at C:\wamp\www\....\index.html:125) in C:\wamp\www\......\autentificare.php on line 36

codul form_login.php:
<?php
if(!isset($_POST['op'])){
echo"<div id=\"login\">
<form name=\"LoginForm\" action=\"$_SERVER[PHP_SELF]\" method=\"POST\">
..................................
</form>
</div>";
}else if($_POST['op'] == "add"){
//se verifica completarea campurilor si se introduc datele in tabel
if(($_POST['username'] == "")){
header("location:$_SERVER[PHP_SELF]");
exit;
}
?>
iar la autentificare.php:
<?php
if(!isset($_POST['op'])){
echo"<form name=\"Autentificare\" action=\"$_SERVER[PHP_SELF]\" method=\"POST\">
..................................
</form>";
}else if($_POST['op'] == "add")
//se verifica completarea campurilor si se introduc datele in tabel
if(!isset($_POST['name']) || !isset($_POST['username'])){
header("location:$_SERVER[PHP_SELF]");
}else{
...................... coduri php de verificare si insertie date de la formular
...........
?>
Am inteles care e problema, dar cum pot face sa mearga ?!? ...Am incercat si cu modificare in php.ini si cu aliminarea spatiilor si a
inchiderii ?> codurilor dar nu merge ... Oare nu este posibil sa folosesc in aceeasi pagina mai multe request ?!?....
ROG CINE MA POATE AJUTA>>> SUNT IN " ZONA CREPUSCULARA " ... IN NICI UN TUTORIAL SA FORUM NU AM GASIT O SITUATIE SIMILARA .
Eventual explicatii mai detaliate prin email ...raman indatorat !!!



takedown
Average Member
Mesaje: 153
Membru din: Joi Feb 07, 2013 8:50 pm
Contact:

Re: TOT DESPRE: headers already sent by (output started at C:\

Mesajde takedown » Vin Mar 10, 2017 6:59 pm

In primul rand, tu folosesti PHP intr-un fisier ce are extensia .html ( index.html )? Daca folosesti PHP intr-un fisier, sfatul meu este sa pui extensia .php astfel incat codul php sa poata fi interpretat.Ca sa intelegi aceasta problema trebuie sa stii si cateva ceva despre protocolul HTTP, fiind protocolul ( un set de reguli ) ce il folosim atunci cand accesam resurse ( documente HTML, fisiere CSS, Javacrript, imagini, rezultatul executarii unui script ( PHP ) pe web.

Protocolul HTTP foloseste modelul client - server, clientul trimite un mesaj text de tip cerere catre server.Server-ul primeste cererea si trimite un mesaj de tip raspuns catre client.Clientul poate fi navigatorul web ( chrome, firefox etc ), server-ul fiind un program instalat pe un pc in retea.

Citeste http://stackoverflow.com/questions/8028957/how-to-fix-headers-already-sent-error-in-php si poate vei intelege despre ce este vorba.

Sfatul meu, regandeste tot ce ai facut tu acolo, tine cont de sfaturile mele:

    Intr-un fisier ce are doar PHP, omite tag-ul de inchidere al codului PHP ?>
    Nu face output la HTML cu echo sau prin alta cale, scrie codul HTML separat de codul PHP
    Este bine sa pui codul HTML in alte fisiere si sa incluzi aceste fisierele cu PHP
    Foloseste PHP in HTML doar atunci cand vrei sa faci echo la o valoare/variabila, atunci cand vrei sa folosesti structuri de control if/elseif/else sau structuri iterative precum foreach.

Aceasta problema apare atunci cand scrii meta informatii la raspunsul HTTP dupa ce ai trimis corpul raspunsului HTTP ( cod HTML etc ) si implicit tot raspunsul.Aceste meta informatii se mai numesc HEADERS si se scriu inainte de corpul mesajului, sunt folosite pentru a oferi mai multe detalii despre corpul mesajului HTTP sau desprere mesaj in sine ) d-aia iti zic, citeste cate ceva despre acest protocol si vei intelege ce si cum.

In PHP, functii precum session_start() si header() sunt folosite pentru a scrie aceste meta informatii.

Acesta este un exemplu unde mai intai facem output si apoi scriem meta informatiile la raspunsul HTTP.

Cod: Selectaţi tot

<?php

echo 'Acesta text face parte din corpul mesajului HTTP';

//folosind aceasta functie adaugam meta informatii mesajului HTTP, care, apropo, este raspunsul trimis catre client ( browser )
header('Location: http://google.ro');


Codul acesta nu va afisa acea eroare, dar nu este corect ceea ce am facut.

In autentificare.php, pe randul 36, probabil scrii un HEADER folosind functia header(), desi tu deja ai facut OUTPUT la ceva pe ecran.

Lectia pe care trebuie sa o inveti, folosesti functii precum header() inainte sa faci OUTPUT la ceva!!

papaleon
Average Member
Mesaje: 87
Membru din: Dum Dec 27, 2015 11:26 pm

Re: TOT DESPRE: headers already sent by (output started at C:\

Mesajde papaleon » Vin Mar 10, 2017 8:26 pm

OK, TKS ! takedown ... am inteles ca nu merge asa cum doream eu.


Înapoi la “PHP Incepători”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 83 vizitatori