2009-08-07 10 views
8

私だけ有効なエラー報告とすごいおそらく私が持っているショッカー何千ものでない場合、私はそれをwithoutsetting変数または何を呼び出すのですが、簡単にありますので、彼らがあることを理解し、この何百ものPHP未定義のインデックス通知を取り除くには?

Notice: Undefined index: action in C:\webserver\htdocs\header.inc.php on line 18 

のような通知の数百たとえば、ページに50個の変数があり、これを報告している場合は、そのページを正しくコーディングするための簡単な方法がありますか?

そして私はちょうど私はそれがここに彼らに

を修正するのがベストだと思うそれらを非表示にするという意味ではありませんが、私は(最初ISSETを使用して

if ($_GET['p'] == "account.edit.topfriends" || $_GET['action'] == "newmember" || $_GET['p'] == "account.profile.name") { 
    //some more code here 
} 

答えて

13

私は通常の値を初期化するために、私のスクリプトの先頭にternaryステートメントを使用したいです。


$_GET['p'] = (isset($_GET['p']) ? $_GET['p'] : 'default'); 

おそらくもっと一般的なアプローチを使用できますが、異なる変数が異なるデフォルト値を持つ可能性があるので、その方法は面倒です。

+1

私は実際にこれをページングに使用します。$ page =(!empty($ _ GET ['page']))? $ _GET ['page']:0;私はページ上にあるときにエラーがなくなりますが、ページが設定されていない場合、インデックスエラー – JasonDavis

+0

が表示されます。空とissetの違いがあります。 – rezzif

+0

そしてarray_key_exists()。 –

0

チェック配列要素を掲載、その行の例です。 )または空()。

例えば、

if ((!empty($_GET['p'] && $_GET['p'] == "account.edit.topfriends") || 
    (!empty($_GET['action'] && $_GET['action'] == "newmember")) { 
    //some more code here 
} 
+1

値が0の場合は空となり、未定義の警告を停止する方法を尋ねられた場合は、issetを使用することをお勧めします。 – rezzif

+2

また、あなたはクローズドパレンがありません。 – troelskn

7

あなたがする必要があることが述べられているので、isset()呼び出しで確認してください。配列をたくさん使用していて、元に戻って一連のisset()呼び出しを追加したくない場合は、いつでも関数を使うことができます。ような何か:

function get_index($array, $index) { 
    return isset($array[$index]) ? $array[$index] : null; 
} 

次に、あなたのような何かにあなたのif文を変更することができます:すべてのチェックが行われている場合

if (get_index($_GET, 'p') == "account.edit.topfriends" || get_index($_GET, 'action') == "newmember" || get_index($_GET, 'p') == "account.profile.name") { 
    //some more code here 
} 

あなたは常に機能とハードコードの最初のパラメータをニックスができ$_GETに反対しています$ _GETの中に、私の例ではあなたがいくつかの異なる配列に対してこれをやっていると仮定しています。

この解決法は必ずしも最もエレガントではありませんが、仕事を完了させる必要があります。

+0

おかげさまでこれを試してみるかもしれません – JasonDavis

+2

+1この答えが好きです。彼はボード全体にそれをするオプションを与えます。 1つの追加は、デフォルト値にオプションのパラメーターを追加することです。 関数get_index($ array、$ index、$ default = null){ return isset($ array [$ index])? $ array [$ index]:$ default; } – rezzif

0

GETおよびPOSTの未定義インデックス通知を永遠に削除してください!これを文書の先頭に入れてください...

<?php 
// Get rid of GET and POST undefined index notice forever! Put this in the top of your document... 
class InputData { 
    function get($p) { 
      return isset($_GET[$p]) ? $_GET[$p] : null; 
    } 

    function post($p) { 
      return isset($_POST[$p]) ? $_POST[$p] : null; 
    } 

    function get_post($p) { 
      return $this->get($p) ? $this->get($p) : $this->post($p); 
    } 
} 
$input = new InputData; 

$page = $input->get('p'); // Look in $_GET 
$page = $input->post('p'); // Look in $_POST 
$page = $input->get_post('p'); // Look in both $_GET and $_POST 
?> 
関連する問題