4

私はPHPに慣れていないので、これが単純な問題である場合は申し訳ありません...

PHP サイトをあるサーバーから別のサーバーに移動しています。新しいサーバーは IIS 7.0、PHP 5.2.1 で、短いオープン タグが「オン」になっています。元のサーバーがどのようにセットアップされたかはわかりません (コードを受け取っただけです)。

以下は、いずれかのページのコードの最初のセクションです。

<?
ob_start();
session_start();

if($_GET['confirm'] == 13 || $_GET['confirm'] == 14 || $_GET['confirm'] == 15 || $_GET['confirm'] == 16) 
{
    include("test/query/test_query.php");
}
?>

このページを実行すると、次のエラーが常に表示されます。

PHP Notice: Undefined index: 6 行目の [file location].php で確認してください

また、ユーザーは、ホームページ (標準の HTML ページ) からリダイレクトされることによって、このページにアクセスします。適切にナビゲートした場合の完全な URL は次のとおりです。

http://www.[サイト].com/test.php#login

... エラーがスローされる理由がわかりました。私が理解できないのは、このコードが元のサーバーでどのように機能するかということです。構成設定が欠落している可能性はありますか?

*これと同じ問題が、サイト全体の数十の場所で発生しています。これは、問題の 1 つの特定の発生にすぎません。

4

5 に答える 5

28

新しいサーバーはerror_reportingE_ALL に設定されています。表示されているのは通知であり、エラーではありません。試す:

error_reporting(E_ALL ^ E_NOTICE)

エラー報告が E_ALL に設定されている場合、設定されていない配列のメンバーにアクセスするとエラーが発生します。エラー報告レベルを下げたくない場合は、$_GET['var'] をチェックする前に、コードを次のように変更します。

if(isset($_GET['confirm']) && ($_GET['confirm'] == 13 || $_GET['confirm'] == 14 || $_GET['confirm'] == 15 || $_GET['confirm'] == 16)) {

実際に にアクセスする前に isset() への呼び出しを追加すること$_GET['confirm']で、設定されていない配列メンバーにアクセスしていないことを確認できます。( URL がまたは$_GET['confirm']で終わる場合にのみ設定されます)?confirm=...?something...&confirm=...

于 2009-08-31T20:26:05.087 に答える
6

読み取り用にコードを最適化することをお勧めします。

if (isset($_GET['confirm']) && ($_GET['confirm'] >= 13 && $_GET['confirm'] <= 16)) 

私は Josh の提案に完全に同意します。

于 2009-08-31T20:50:09.517 に答える
3

isset()便利な機能です。変数が存在する場合は「true」を返し、存在しない場合は「false」を返します。通常、ユーザーはこれをスーパーグローバルのようなものと組み合わせて使用​​するか、サイトの別のページから送信されているかどう$_GET$_POSTを判断します。これにより、ユーザーのアクセス元とタグ付けされているデータに基づいて、さまざまなアクションを作成できます。また、OPが取得しているように、まだ定義していない変数を使用しようとする際のエラーを防ぎます。したがって、2つの異なる.phpファイルを作成して、ユーザーを間違ったファイルに送信することを心配する代わりに、すべてを1つのページで実行できます。

ジェイ、私はこれらの呼び出しのいくつかのあなたの使用法に注意するでしょう。<?phpよりも機能する可能性が高いです<?。session_start()をブラウザに最初に設定する必要があると聞きました。そうしないと、ヘッダーの問題が発生する可能性があります。そして、はい、使用する前に変数を宣言する必要があります-URL[file].php?confirm=[some number]として入力していない場合、ブレークを許可するように修正しない限り、ページはブレークします。

于 2011-03-22T21:02:57.027 に答える
3

インデックス $_GET['confirm'] がないため、PHP は、未定義のインデックスを見ているという通知をスローします。E_NOTICE新しいサーバーのerror_reporting のどこかにフラグが設定されているため、通知が表示されています。

php マニュアルから、E_NOTICE「実行時の通知。スクリプトがエラーを示す可能性がある何かに遭遇したことを示しますが、スクリプトを実行する通常の過程でも発生する可能性があります。」

気にならなければ通知をオフにしてみるか、問題がある可能性のある場所を追跡するために通知を使用することができます.

投稿したコードの場合、簡単な修正は、条件を次のように変更することです。

if(isset($_GET['confirm']) && <list of OR conditions>)

そうすれば、「確認」インデックスがない場合、PHP は条件の評価を回避します。

于 2009-08-31T20:39:25.217 に答える
2

これは、confirmクエリ文字列変数が設定されていないように見えるためです。次のように確認できます。

ini_set('display_errors', true);
error_reporting(E_ALL);

var_dump($_GET['confirm']);
于 2010-06-19T16:28:09.110 に答える