1

別のページにリダイレクトして値を渡す必要があるという問題があります。これは簡単で、古いヘッダーの問題があることを除いて、その方法を知っています。ヘッダー情報を変更できません-ヘッダーはすでに送信されています...行17

<?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(); ?>

ヘッダー部分に問題があることを除いて、これはすべて問題ありません。リダイレクトされません。

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()を完全に削除した後、最終的には機能しますが、これは私にはできません。

4

2 に答える 2

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(); ?>
于 2012-04-10T00:40:28.130 に答える
1

この問題が発生している理由は、スクリプトがタグの<?php開閉?>を複数回行っているためです。PHPspacenew 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;
    }
于 2012-04-10T00:42:17.257 に答える