1

重複の可能性:
PHP 5.3 ではエラー メッセージが表示されない
ヘッダーは PHP によって既に送信されている

main.php ファイルがあります。ヘッダー、ボディ、フッターのパーツをロードします。体の部分は柔軟です。私のインデックスページでは、サイトがアクティブなページを決定するので、メインファイルでは、アクティブなページの body メソッドが機能します。ログインページでユーザーを確認し、有効な場合は別のページにリダイレクトしたい。この場合、問題が発生します。

index.php:

if(isset($_GET["page"]))
{

    $jsPages.="\n\t<script src='pages/".$_GET["page"]."/resources/".$_GET['page'].".js' type='text/javascript' charset='utf-8'></script>";
    $cssPages.="\n\t<link rel='stylesheet' href='pages/".$_GET['page']."/resources/".$_GET['page'].".css' type='text/css' media='screen' title='no title' charset='utf-8'/>";
    include("pages/". $_GET["page"] ."/_index.php");
}
include("template/$Template/_index.php");

_index.php(メイン)

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head>
</head>
<body">
        <div ><?php userpanel(); ?></div>                   
    <div id="header"><?php pageHeader(); ?></div>
    <div id="horiz-menu" class="splitmenu"><?php horizmenu();?></div>
    <div id="sub-menu"></div>
    <?php body();?>
    <div id="bottom-menu"></div>
    <div id="footer"><?php footer();?></div>
</body>
</html>
<?php 

login.php:

<?php
function body(){

  if ($_SERVER["REQUEST_METHOD"] == "POST")
  {
  if (!$_POST["username"] || !$_POST["password"])
        {
        die("You need to provide a username and password.");
        }

  // username and password sent from Form 
$myusername=addslashes($_POST['username']); 
$mypassword=addslashes($_POST['password']); 

$sql="SELECT id FROM members WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);
$row=mysql_fetch_array($result);
$count=mysql_num_rows($result);

// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1)
{
session_register("myusername");
$_SESSION['login_user']=$myusername;
header("location: pages/welcome/_index.php");
exit();
}
else 
{
$error="Your Login Name or Password is invalid";
}
}
?>
<form action="" method="post">
<label>UserName :</label>
<input type="text" name="username"/><br />
<label>Password :</label>
<input type="password" name="password"/><br/>
<input type="submit" value=" Submit "/><br />
</form>
<?php }

私はそれを検索しましたが、答えが見つかりませんでした。どうすれば修正できますか、または何が問題なのですか?

4

4 に答える 4

1

すでにクライアントにデータを送信した後は、ヘッダーを使用できません。他のものを送信する前に、小切手をページの一番上に置く必要があります。

から: http://php.net/manual/en/function.header.php

実際の出力が送信される前に、通常の HTML タグ、ファイル内の空白行、または PHP から header() を呼び出す必要があることに注意してください。

于 2012-12-16T15:58:56.080 に答える
1

header() は、HTML がページにレンダリングされる前にのみ呼び出す必要があります。

于 2012-12-16T15:57:51.147 に答える
1

また、これに注意することもできます。このスクリプトは、最新の PHP から削除された関数に依存しています。この Web ページの大きな赤い警告ラベルを参照してください。

http://php.net/manual/en/function.session-register.php

この記事が読めるかもしれません。これは、PHP クライアント認証に使用される一般的な設計パターンの一部を示しています。

http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/A_2391-PHP-login-logout-and-easy-access-control.html

宜しくお願いします、〜レイ

于 2012-12-16T16:07:57.220 に答える
0

ob_start()PHP スクリプトの先頭に追加できます。これにより、ブラウザー出力ストリームの作成を既に開始している場合でも、header() を発行できます。また、スクリプトの最後で呼び出しが 1 回だけ行われるため、ブラウザー出力を送信するための繰り返し呼び出しが回避されるため、スクリプトが高速になります。

于 2012-12-16T16:04:19.637 に答える