0

手伝っていただけませんか?私のウェブサイトは以下の単純なクッキーを設定していません。他のいくつかのログインスクリプトは機能しますが、これは機能しません。ありがとう

test.php

...

<form action="test2.php" method="post">
        Email: <br />
        <input type="email" name="email" value=""/> <br />
        <input type="submit" name="submit" value="Next"/> 
</form>

...

test2.php

<?php ob_start(); ?>

<?php
// call the header of the page
require('header.html');

// connect to database
require "connect.php";
?>

<?php
    $email = $_POST['email'];

    // set cookie
    $one_hour = time() + 3600;
    $set = setcookie(user_email, $email, $one_hour);

    if($set == TRUE) {
        print '<p> Cookie set</p>';
    } else {
        print '<p> Cookie not set</p>';
    }

// call footer of the page
require('footer.html');
?>

<?php ob_flush(); ?>

上記のスクリプトを実行した後、次のエラーが発生します。

警告:ヘッダー情報を変更できません-16行目の/websites/public_html/test2.phpで(出力は/websites/public_html/test2.php:1で開始されました)によって既に送信されたヘッダー

クッキーが設定されていません

  • PS:私のスクリプトの16行目は「$ set = setcookie(email_noaccount、$ email、$ hr);」です。
4

2 に答える 2

2

上記のコードを次のように変更して試してみてください。require()の後にob_start()を配置してください。

<?php
require "connect.php";
require('header.html');
?>
<?php ob_start(); ?>
于 2012-05-19T12:37:05.347 に答える
0

次のことを行う前に、コンテンツを出力バッファに送信しています。

<?php ob_start(); ?>
  <--- right here
<?php
// call the header of the page
require('header.html');

// connect to database
require "connect.php";
?>
  <--- and right here
<?php
    $email = $_POST['email'];

出力を作成する前にサーバー側の処理(ヘッダーの変更を含む)を実行できるように、出力内の不要な空白を取り除く必要があります。

理想的には、2つを混ぜたくないでしょう。サーバー側の処理は、出力がビルドされる前に実行する必要があります。その後、処理の結果を使用して出力がビルドされ、クライアントに送信されます。

于 2012-05-19T12:35:53.473 に答える