2

各ページをロードする前にセッションを開始し、ユーザーがログインしているかどうかを確認する PHP ログイン システムを構築しました。

私の保護されたページには、上部にセッションを開始するインクルードと、ページをロードするかどうかに関する if ステートメントがあります。そして、一番下には、ログインページにリダイレクトするelseステートメントである別のインクルードがあります。これは直接ページにある場合は正常に機能しますが、他の場所から含めると次のエラーが発生します: 解析エラー: 構文エラー、予期しない $end

これがコードです

含む 1:

<?php

session_start();

if ($_SESSION['username'])
{
?>

これは、セッションが存在する場合に読み込まれる保護されたコンテンツです

2 を含める:

<?php
}
else
header ("location: index.php");

?>

これは、ステートメントの中括弧を 2 つの PHP タグに分割したことが原因であると考えられます。これを行った理由は、if ステートメントが true の場合にページ全体をロードするためであり、PHP に残して各行をエコーするのではありません。 HTMLセパレート。

どうすればこれを解決できますか? または、IF/ELSE ステートメントを分割するより良い方法はありますか。

ありがとうダニー

4

3 に答える 3

1

現在、ファイル間の中括弧の開閉はできません。これを行おうとすると、「予期しない $end」構文エラーが発生します。

あなたが何を狙っているのか正確にはわかりませんが、あなたのコメントに基づいて、次のようなことをする必要があります.

任意の名前を付けることができるファイルが 1 つ必要ですが、「allProtectedContent.php」と呼ぶことにします。

あなたは、保護する必要があるファイルが複数あると言っていました(つまり、セッションが存在する場合に実行する必要がある複数のphpファイルを意味すると思います)。そのため、allProtectedContent.php 内に、実行/出力するすべてのファイル ファイルを含めることができます。

次に、メインファイルに次のように記述します。

<?php
if(isset($_SESSION['username']))
{
    include 'allProtectedContent.php';
}
else
{
    header('Location: index.php');
}
?>

したがって、allProtectedContent.php に入力したものは、$_SESSION のユーザー名キーが設定されている場合にのみ実行/出力されます。

allProtectedContent.php の例:

<?php
// verify session
// echo some stuff
// include more files
// execute some functions
// run any php code you want
?>
于 2012-07-14T17:32:38.943 に答える
0

?>HTML を注意深く確認し、意図した場所でタイプミスがないか探します/>

于 2012-07-14T17:13:38.137 に答える
-1

中括弧を使用する代わりに、以下に示すようにコロン表記を使用してみてください。

<?php

session_start();

if ($_SESSION['username']):
?>

...

<?php else: header("location: index.php"); endif;
于 2012-07-14T16:58:55.187 に答える