Warning: Cannot modify header information hatası

atm10

Öğrenci
Katılım
14 Temmuz 2012
Mesajlar
51
Reaksiyon puanı
0
Puanları
6
merhaba
header kodu yazınca bu hatayı alıyorum çözüm nedir?
Teşekkürler
 

kizanlik

Asistan
Katılım
25 Mart 2012
Mesajlar
250
Reaksiyon puanı
0
Puanları
0
ASP.NET'te header değiştirmeye çalışıyorsan, aşağıdakileri xRequest.Headers["Connection"] = ... şeklinde değiştiremezsin. Request için kullandığın araç ne ise xRequest.Connection = ... şeklinde değiştirebilirsin (Property ile). Aksi durumda yukarıdaki hatayı alırsın.

Accept
Connection
Content-Length
Content-Type
Expect
Date
Host
If-Modified-Since
Range
Referer
Transfer-Encoding
User-Agent

ASP.NET'ten başka bir platform kullanıyorsan, o platformda da buna benzer bir durum olabilir.
 

atm10

Öğrenci
Katılım
14 Temmuz 2012
Mesajlar
51
Reaksiyon puanı
0
Puanları
6
Arkadaşlar kodun tamamı burada.

Kod:
<?php
ob_start();

include ("Aktarimlar/ayar.php");
include ("fonksiyonlar.php");
Function Anasayfa () {



echo" ÜYE HESABI Burası anasayfa";
}




Function Uye_Kayit (){
tablo_ac();
echo '

<form method="POST" action="index.php?Git=uyehesabi&sayfa=uye_kaydet">
    <div align="center">
    <table border="0" width="85%" cellspacing="0" cellpadding="0">
        <tr>
            <td width="100%" height="1" colspan="3">&nbsp;</td>
        </tr>
        <tr>
            <td width="22%">&nbsp;Kullanıcı Adı</td>
            <td width="9%" align="left">:</td>
            <td width="69%" align="left">
            <input type="text" name="kullanici" size="25"> <font color="#FF0000">
            (*)</font></td>
        </tr>
        <tr>
            <td width="22%">&nbsp;Şifre</td>
            <td width="9%" align="left">:</td>
            <td width="69%" align="left">
            <input type="password" name="sifre" size="25"><font color="#FF0000"> 
            (*)</font></td>
        </tr>
        <tr>
            <td width="22%">&nbsp;Email</td>
            <td width="9%" align="left">:</td>
            <td width="69%" align="left">
            <input type="text" name="email" size="25"> <font color="#FF0000">(*)</font></td>
        </tr>
        <tr>
            <td width="22%">&nbsp;Cinsiyet</td>
            <td width="9%" align="left">:</td>
            <td width="69%" align="left">
            <img border="0" src="Resimler/user-bay.gif" width="22"  height="22"><input type="radio" value="Bay" checked  name="cinsiyet">Bayan&nbsp;
            <img border="0" src="Resimler/user-bayan.gif" width="22"  height="22"><input type="radio" value="bayan" name="cinsiyet"> 
            Bayan</td>
        </tr>
        <tr>
            <td colspan="3">
            &nbsp;</td>
        </tr>
        <tr>
            <td colspan="3">
            <p align="center"><font  color="#800000"><b>Kullanıcı Özel  Bilgileri</b></font></td>
        </tr>
        <tr>
            <td width="22%">&nbsp;</td>
            <td width="9%" align="left">&nbsp;</td>
            <td width="69%" align="left">&nbsp;</td>
        </tr>
        <tr>
            <td width="22%">&nbsp;Adı Soyadı</td>
            <td width="9%" align="left">:</td>
            <td width="69%" align="left">
            <input type="text" name="adsoyad" size="43"></td>
        </tr>
        <tr>
            <td width="22%">&nbsp;Ülke / Şehir</td>
            <td width="9%" align="left">:</td>
            <td width="69%" align="left">
            <input type="text" name="ulke" size="18"> /
            <input type="text" name="sehir" size="19"></td>
        </tr>
        <tr>
            <td width="22%">&nbsp;İmza</td>
            <td width="9%" align="left">:</td>
            <td width="69%" align="left"><textarea rows="8" name="S1" cols="33"></textarea></td>
        </tr>
        <tr>
            <td width="22%">&nbsp;</td>
            <td width="9%">&nbsp;</td>
            <td width="69%"><input type="submit" value="Gönder" name="B1"></td>
        </tr>
        <tr>
            <td width="22%">&nbsp;</td>
            <td width="9%">&nbsp;</td>
            <td width="69%">&nbsp;</td>
        </tr>
        <tr>
            <td width="100%" colspan="3">
            <p align="center"><b>NOT: <font color="#FF0000">(*) </font>
            <font color="#808080">&nbsp;ile Bilirtilen alanlar doldurulmak 
            zorundadır.</font></b></td>
        </tr>
    </table>
    </div>
</form>


';


tablo_kapat ();
}





Function Uye_Kaydet(){

$kullanici         =Kod_Temizle($_POST["kullanici"])         ;
$sifre            =$_POST["sifre"]              ;
$adsoyad        =Kod_Temizle($_POST["adsoyad"])             ;
$ulke            =Kod_Temizle($_POST["ulke"])             ;
$sehir            =Kod_Temizle($_POST["sehir"])             ;
$email            =Kod_Temizle($_POST["email"])             ;
$cinsiyet        =$_POST["cinsiyet"]                        ;
$imza            =İcerik_Temizle($_POST["imza"])             ;


if(($kullanici=="") or ($sifre=="") or ($email=="")){    

    echo "<script>
    alert(\"Lütfen Boş Alan Bırakmayın\")
    </script>";

    echo "<br><center>Yönlendiriliyorsunuz <BR>Lütfen Bekleyin</center><br>";
    header("Refresh: 2; url=index.php");
    
    }else{
}
}
$sayfa = $_GET["sayfa"];

switch ($sayfa) {



        default                :                     Anasayfa ()            ;             Break     ;
        case ("uye_kaydi")    :                     Uye_Kayit ()        ;            Break    ;
        case ("uye_kaydet")    :                     Uye_Kaydet ()        ;            Break    ;
        
    
}



?>
 

orcnd

Dekan
Katılım
13 Ekim 2008
Mesajlar
6,394
Reaksiyon puanı
255
Puanları
243
dosya kodlamasını utf-8 with bom olarak seçmişseniz onda kaynaklanıyor olabilir. utf-8 without bom olarak kaydetmeniz gerekli
 

atm10

Öğrenci
Katılım
14 Temmuz 2012
Mesajlar
51
Reaksiyon puanı
0
Puanları
6
frontpage 2003 editorü kullanıyorum.Bunda dediğiniz ayarları nasıl yapabilirim.
 

Turab Garip

Dekan
Emektar
Katılım
30 Mayıs 2007
Mesajlar
6,902
Reaksiyon puanı
181
Puanları
1,243
Kodun "tamamı"na gerek yok. Bu hatayı, headerlar gönderildikten sonra bir header göndermeye veya değiştirmeye çalıştığınızda alırsınız. Bu ne demek?

Herhangi bir istemci (tarayıcı), sizin sayfanızı çağırdığında, sayfanız önce kod başlıklarını (header) gönderir. Bunlar, sayfanın adı, başlığı, kaç KB olduğu, en son ne zaman güncellendiği, önbelleğe alınıp alınamayacağı, sayfa taşındıysa yeni yerini, bulunamadıysa hata kodunu vb bilgilerdir. Sunucu bunları gönderdikten sonra, sayfanın içeriğini göndermeye başlar.

Fakat bunlar bir defa sunucu tarafından ziyaretçinin tarayıcısına gönderildikten sonra; sunucu bunlara müdahale edemez, çünkü kendisinden çıkışmış ve ziyaretçinin bilgisayarına girmiştir. O yüzden de bu işlemi yapmaya çalıştığınızda böyle bir hata verir.

Dediğim gibi, sunucu başka şekilde çalışmaya ayarlanmamışsa, ilk önce headerları, sonra da içeriği gönderir. Dolayısıyla script ilk çıktıyı gönderdiği andan itibaren headerler değiştirilemez. Öyleyse yapabileceğiniz iki şey var:


1- Tüm headerları doğru bir şekilde ayarlamadan çıktı göndermeyin. (echo)
2- Ya da çıktı gönderirken tarayıcıya gitmeden önce sunucu önbelleğinde beklemesini sağlayacaksınız. Bu da, scriptin başında ob_start() fonksiyonunu çağırmakla yapılabilir.
 

uma350

Profesör
Katılım
15 Ocak 2010
Mesajlar
4,409
Reaksiyon puanı
70
Puanları
0
Türkekip çalışması bu sanırım değil mi ?

Şu şekilde bir denermisin ?Kodun sonuna eklemen gerekiyor

Kod:
<?php  ob_flush(); ?>
 

Turab Garip

Dekan
Emektar
Katılım
30 Mayıs 2007
Mesajlar
6,902
Reaksiyon puanı
181
Puanları
1,243
Eğer sunucu ayarları bozulmamışsa, genellikle flush etmeye gerek kalmaz. Yani script durduğunda tüm çıktı toplamı tek seferde tarayıcıya gönderilir. Eğer sunucu, çıktıları otomatik göndermeye ayarlanmamışsa, yani ayarları değiştirilmişse ve özel bir uygulamaya ihtiyaç yoksa, scriptin sonunda ob_end_flush(); kullanmak daha doğru olacaktır.
 

kizanlik

Asistan
Katılım
25 Mart 2012
Mesajlar
250
Reaksiyon puanı
0
Puanları
0
[MENTION=280833]atm10[/MENTION]

Formuna baktım. Self submit yapıyor. Uye_Kaydet() fonksiyonu içerisinde header("Refresh: 2; url=index.php"); kullanmışsın.

Problem şundan kaynaklanıyor:

Form dolduruluyor.
Buton tıklanıyor.
Bilgi tekrar kendisine geliyor
Bilgi kontrol ediliyor.
Eksiklik varsa, tekrar kendisine yönlendirilmek isteniyor.
(Hata burada)

PHP programcısı değilim ama bu evrensel kuraldır. Render edilmiş sayfanın headerı değiştirilemez.

Sayfada mesaj verdirmek istiyorsan mesaj.php gibi bir sayfaya yönlendirmek ve o sayfada header("Refresh: 2; url=index.php"); kullanarak tekrar geri dönmesini sağlamak olabilir.

PHP programcıları daya iyi bilir. En üstte UYGUN bir yerde if(($kullanici=="") or ($sifre=="") or ($email=="")) ile kontrolü yaparak da header değişikliği yapabilirsin diye düşünüyorum. Burada önemli bir nokta var. Sayfa ilk yüklendiğinde de bu bilgiler boş olacağından (ASP.NET'te oldugu gibi IsPostBack var mı bilemiyorum) sayfanın post yapıp yapmadığının kontrol edilmesi gerekir.
 

Turab Garip

Dekan
Emektar
Katılım
30 Mayıs 2007
Mesajlar
6,902
Reaksiyon puanı
181
Puanları
1,243
Sayfayı header ile form kontrolü için o şekilde yönlendirmek çok yanlış olur; doğru sonuç da vermez.
 

atm10

Öğrenci
Katılım
14 Temmuz 2012
Mesajlar
51
Reaksiyon puanı
0
Puanları
6
header("Refresh:2; url=index.php?Git=uyehesabi&sayfa=uye_kaydi");
Yaptığımda da olmuyır.

Şimdi ben bu işte biraz yeniyim diyebilirim.
Ben şimdi ne yapmam lazım
 

hizircan

Öğrenci
Katılım
11 Ekim 2011
Mesajlar
7
Reaksiyon puanı
0
Puanları
0
Arkadaşım scripti başka bir hosta taşı problem hostunun php versiyonundan ya da global registery ayarlarından kaynaklanıyor.
 
Üst