2012-04-10 74 views
1

我有一個問題,我需要重定向到另一個頁面,並傳遞一個值,這很容易,我知道該怎麼辦,除了那些舊的標題問題:無法修改標頭信息 - 標頭已經發送...第17行PHP重定向到另一個頁面並傳遞值?

<?php include('m_a2_functions.php'); ?> 
<?php global_header(LOGIN); ?> 
<?php login(); ?> 
<?php 
if(isset($_POST['submit'])) 
{ 
    connect(); 
    $username = $_POST['username']; 
    $password = $_POST['password']; 

    $query = "SELECT password from users where username = '$username'"; 
    $result = mysql_query($query) or die ("There was an error executing the query $query:<br/>".mysql_error()); 
    $row = mysql_fetch_array($result); 
    $encrypted_pass = $row[0]; 

    if (crypt($password, $encrypted_pass) == $encrypted_pass) { 
     $flag = "y"; 
     header('Location: m_a2_view.php?flag=y'); 
    } 

} 
?> 
<?php validation(); ?> 
<?php page_footer(); ?> 

這樣很好,除了頭部有問題。它不會重定向。 IN的functions.php

全局頭功能

<?php function global_header($page_title){ ?> 
<?php echo '<?xml version="1.0" encoding="UTF-8"?>'; ?> <- LINE 17 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US"> 
    <head> 
     <title><?php echo "MARK - " . $page_title; ?></title> 
     <link rel="stylesheet" href="style.css" /> 
    </head> 
    <body> 
    <div id="container"> 
    <div id="logo"></div> 
<?php } ?> 

LINE 17

<?php echo '<?xml version="1.0" encoding="UTF-8"?>'; ?> 

我知道這是什麼原因造成的。它在我的頁面開始時加載global_header,然後不能重定向到另一個頁面。不久,當我提交,我的網頁應該重定向,但它不能!

即使我開始移除東西,它也不起作用。它將在完全擺脫global_header()後開始工作,這是我無法做到的。

+0

呼叫之前,把你的重定向'global_header()' – Jrod 2012-04-10 00:40:20

+0

使用輸出緩衝http://php.net/manual/en/book.outcontrol.php – 2012-04-10 00:40:33

回答

1

你有此問題的原因是因爲你的腳本是多個打開的<?php和關閉?>PHP標籤,該標籤具有space以及它們之間new line ...的

更換

<?php include('m_a2_functions.php'); ?> 
<?php global_header(LOGIN); ?> 
<?php login(); ?> 
<?php 

隨着

<?php 
include('m_a2_functions.php'); 
//global_header(LOGIN); 
//login(); 

腳本

include ('m_a2_functions.php'); 
    if (isset ($_POST ['submit'])) { 
     connect(); 
     $username = $_POST ['username']; 
     $password = $_POST ['password']; 

     $query = "SELECT password from users where username = '$username'"; 
     $result = mysql_query ($query) or die ("There was an error executing the query $query:<br/>" . mysql_error()); 
     $row = mysql_fetch_array ($result); 
     $encrypted_pass = $row [0]; 

     if (crypt ($password, $encrypted_pass) == $encrypted_pass) { 
      $flag = "y"; 
      header ('Location: m_a2_view.php?flag=y'); 
     } 

    } else { 
     echo global_header ("LOGIN"); 
     login(); 
    } 

    validation(); 
    page_footer(); 

    function global_header($page_title) { 
     $content = '<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US"> 
    <head> 
     <title><?php echo "MARK - ' . $page_title . '</title> 
     <link rel="stylesheet" href="style.css" /> 
    </head> 
    <body> 
    <div id="container"> 
    <div id="logo"></div>'; 

     return $content; 
    } 
+0

不,先生,那不是錯誤! 'global_header();'已經發送了頭信息,所以我不能再使用'header();'發送它們! – eveo 2012-04-10 00:44:09

+0

即使你刪除全局頭..你仍然會得到相同的錯誤.....試試看看..我會更新我的答案,我認爲是最有效的方法 – Baba 2012-04-10 00:46:46

+0

不,之前做過用戶minitech給出了一個非常乾淨和最佳的解決方案 – eveo 2012-04-10 00:52:39

2

錯誤是由重定向之前已經有輸出引起的。你能做的就是緩衝所述輸出,如果你真的想保持對事物的與編碼風格的順序:

<?php ob_start(); ?> 
<?php include('m_a2_functions.php'); ?> 
<?php global_header(LOGIN); ?> 
<?php login(); ?> 
<?php 
if(isset($_POST['submit'])) 
{ 
    connect(); 
    $username = $_POST['username']; 
    $password = $_POST['password']; 

    $query = "SELECT password from users where username = '$username'"; 
    $result = mysql_query($query) or die ("There was an error executing the query $query:<br/>".mysql_error()); 
    $row = mysql_fetch_array($result); 
    $encrypted_pass = $row[0]; 

    if (crypt($password, $encrypted_pass) == $encrypted_pass) { 
     $flag = "y"; 
     header('Location: m_a2_view.php?flag=y'); 
     ob_end_clean(); // Discard the buffer 
    } else { 
     ob_end_flush(); // Display the contents of the buffer 
    } 
} 
?> 
<?php validation(); ?> 
<?php page_footer(); ?> 
相關問題