Kayıt olduktan sonra kullanıcı yönlendirme Problem ise

7 Cevap php

Ben basit bir web sitesi oluşturma. Benim durum böyledir. Bir kullanıcı Kayıttan sonra, ben bir ana sayfası (kayıt başarılı olursa) 3 saniye dedikten sonra kullanıcıyı yönlendirmek istiyorum. Ben şimdi var kod aşağıdaki gibidir

$query = "INSERT INTO Privileges VALUES('$user','$password1','$role')";

$result = mysql_query($query, $dbcon) 
 or die('Registration Failed: ' . mysql_error());
print 'Thanks for Registering , You will be redirected shortly';

ob_start();

echo "Test";

header("Location: http://www.php.net");

ob_flush()

I get the error message Warning: Cannot modify header information - headers already sent by (output started at/home/srinivasa/public_html/ThanksForRegistering.php:27) in /home/srinivasa /public_html/ThanksForRegistering.php on line 35.

Şimdi ne yapmam gerekiyor?

7 Cevap

Yeni başlayanlar için, echo "Test"; kaldırmak ve print deyimi ve bize ne bildirin.

Sayfa istemciye gönderilmeden önce tüm değerlendirilir alır gibi, PHP bu yapamam. Ne yapabilirim 3 saniye geçtikten sonra yönlendirmeyi yapar çıkışı bazı JavaScript.

O (emin değilim o yüzden çok iyi PHP bilmiyorum ne ob_start ve ob_flush do) bu gibi bir şey olacaktır:

$query = "INSERT INTO Privileges VALUES('$user','$password1','$role')";

$result = mysql_query($query, $dbcon) 
 or die('Registration Failed: ' . mysql_error());
print 'Thanks for Registering , You will be redirected shortly';
print '<script type="text/javascript">'
print 'setTimeout(function() { window.location = "http://www.php.net"; }, 3000);'
print '</script>'

ob_start();
ob_flush();

3 saniye sonra kullanıcıyı yönlendirmek için, iki seçeneğiniz vardır.

İlk olarak, header işlev kaldırmak.

Sonra da Javascript kullanabilirsiniz:

<script type="text/javascript">
    setTimeout('function() {window.location = "http://example.com";}',3000);
</script>

Veya baş bölümünde bir meta yenileme etiketi:

<meta http-equiv="refresh" content="3;url=http://example.com/" />

Yalnız PHP ile bunu yapamam.

Ben 'neden yönlendiriyorsunuz?' Soru sanırım. Onlar kayıt VE hala onlara mesaj bir dostu "kayıt için Teşekkürler" vermek zorunda önce istedikleri sayfa üzerinde kullanıcıya göndermek istiyorsanız, bir $_SESSION değişken içine başarı mesajı koyarak ve yankılanan düşünebilirsiniz Hedef sayfadaki dışarı.

Gibi bir şey:

//process registration
if($success) {
  $_SESSION['reg_success']="You're one of us now!";
  header("Location: http://www.php.net"); 
  exit;
}
//otherwise have another go at registering

Yapamazsınız echo 'test' veya text / html içeriği ardından, tarayıcıya gönderilen için metin bir başlık gönderirseniz ... bir yönlendirme başlığı ayarlamak sonra tarayıcıya diğer bilgileri yazdırabilirsiniz.

Olmayan başlığı içerik gönderildikten sonra yönlendirmek için tek yolu javascript üzerinden. Eğer yönlendirmek önce istemci bir şey söylemek istiyorsanız, size 2 şey 1 yapabilirsiniz.

1) yeniden yönlendirme yapmak, sonra 3 saniye için sayacaktır sayfasında javascript gönderin

2) aynı sayfayı yenilemek için bir şey yankılanan önce yenileme header () set ve yenileme olur yönlendirmek.

<?php

//  refresh / redirect to an internal web page
//  ------------------------------------------
header( 'refresh: 5; url=/webdsn/' );
echo '<h1>You will be re-directed in 5 seconds...</h1>';

From a quick google search at this location: http://www.desilva.biz/php/phprefresh.html

Ekranda metin yazdırılır emin olun, böylece yerine javascript kullanın.

Sen bir seçenek olarak yöntemini here kullanabilirsiniz.

Nedense javascript tarayıcıda işe yaramazsa onları tıklamanız için bir bağlantı eklemek için emin olun.

Senin sorunun header'ınıza değiştirmeye çalışmadan önce çıktı yaratılmış olmasıdır. Bu gibi bir kod yeniden düzenleyerek deneyin.

$query = "INSERT INTO Privileges VALUES('$user','$password1','$role')";

ob_start();

$result = mysql_query($query, $dbcon) 
 or die('Registration Failed: ' . mysql_error());
print 'Thanks for Registering , You will be redirected shortly';


echo "Test";

header("Location: http://www.php.net");

ob_flush();

Bu başlık hata mesajı düzeltilir, ama javascript veya meta etiketleri ile yönlendirme düşeni yapmak için gönderilen diğer çözümlerden birini kullanmak zorunda olacak