php header () fonksiyonu: Herhangi bir yönlendirme yok!

8 Cevap

I have written a very very very simple!! script in php. header redirection not working. 1- encoding : UTF-8 without BOM 2- with adding ob_start() the problem is countiueing. What is wrong in my code;

login.php:

<?php  session_start();
   require_once("funcs.php"); 
   db_connection();
   $username = $_POST['username'];
   $password = $_POST['pwd'];
   $submit = $_POST['login'];
   if($submit){
    if (!filled_out($_POST)) {
                echo "please fill all fields";
            }
     else{
        $query = "SELECT * FROM *** WHERE username ='{$username}' AND password ='{$password}'";
        $result = mysql_query($query);
            if(mysql_num_rows($result) == 1){
                 $found_user = mysql_fetch_array($result);
                 $_SESSION['id']  = $found_user['id'];
                 $_SESSION['username'] = $found_user['username'];
                 $_SESSION['password'] = $found_user['password'];
                 setcookie(session_name(), '', time()+86400, '/');
                 header("Location: tst.php");
                 }
                 else{
                    echo "incorrect username or password";
                 }

           }
      }     


?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<form id="form1" name="form1" method="post" action="">
  <p>
    <label for="username">
      Username:
    </label>
    <input type="text" name="username" id="username" />
  </p>
  <p>
    <label for="textfield">
      Password
    </label>
    <input type="password" name="pwd" id="pwd" />
  </p>
  <p>
    <input name="login" type="submit" id="login" value="Log in" />
  </p>
</form>
</body>
</html>
<?php 

 db_disconnect();

?>

ve tst.php:

<?php session_start();  
  require_once("funcs.php");    
  if (!isset($_SESSION['id'])){
           header("Location : login.php");
         }
 ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<table id="structure">
  <tr>
    <td id="navigation">&nbsp;</td>
    <td id="page"><?php echo "welcome"."". $_SESSION['username']; ?></td>
  </tr>
</table>
</body>
</html>

wthit Oppening tst.php doğrudan, header () doesnot login.php yönlendirmek

8 Cevap

Ben yönlendirme çalışıyor sanırım, ama boş bir değere sahip Session-Cookie üzerine. Yani tst.php yeni ve boş bir oturum oluşturur ve geri login.php yönlendirir.

Deneyin:

// DELETE this line: setcookie(session_name(), '', time()+86400, '/');
header("Location: tst.php?".SID);

Importent: başlık + oturumu her zaman oturumu kaybetme değil SID gerek!

Düzeltilmiş: @ Pekka teşekkürler.

Die eklemeyi deneyin ():

  header("Location: tst.php");
  die();

Bir konum başlık sayfasını değiştirmek için tarayıcı sadece bir istek, çünkü her zaman () bir kalıp eklemek gerekir. Eğer die(), sayfanın geri kalanı hala muhtemelen hassas veriler de dahil olmak üzere tarayıcı ulaşacak yoksa kullanıcı görmek demek değildir.

"Yer" sonra boşluk kaldırarak deneyin:

header("Location: login.php");

Bu yanlış olabilir başka bir şey nokta son derece zor olduğu gibi doğru kod biçimlendirme hakkında benim yorum uyun.

Lütfen açılış <?php etiketleri önce beyaz boşluk edin. Herhangi olup olmadığını burada formatlamaya söylemek zor, ancak kod başlıkları önlenmesi, yürütmeden önce boşluk gönderilecektir. Ayrıca içerdiği dosyaların herhangi kapanış etiketleri sonra boşluk kontrol edin. (Iyi uygulama tamamen kapatma etiketleri ihmal etmektir)

old answer

Sen yönlendirmek için çalışıyor sonra, başlık göndermek hangi setcookie() kullanıyorsunuz. Üstbilgileri gönderildikten kez yönlendiremez. (Üzgünüm, bu yanlış)

başlık sadece bir php fonksiyonu değildir. Gerçekten http başlığının bir bölümünü değiştirir, bu yüzden başlığının bir parçası, daha sonra html verileri, daha sonra başka bir başlık olması imkansız. Herhangi bir html çıkış yapılmadan önce o iş yapmak için, dosyanın başında senin başlık koymak gerekir.

Yönlendirme göreceli ya da mutlak bir URL alabilir. Sorun kolon ÖNCE alanı ile. Bu gibi deneyin:

header("Location: whatever.php");

Yanı sıra diğer yanıtlar gibi, Yer: başlık mutlak bir URL, örnek başlık içermelidir ("Yer: http://example.com/");

Aksi script kalanı yürütülmeye devam edecek - Bir çıkış koymak () ya da başlık fonksiyonu () sonra ölmek gerekir.