2011-03-09 10 views
2

私はこのよう呼び出される必要があります編集ページを作成していますチェック:ユーザー入力

users.php?action=edit&id=5 

これは私のコードは、このためです:あなたはそれは長いですご覧のよう

} elseif (isset($_GET['action']) && $_GET['action'] == 'edit' && isset($_GET['id']) && is_numeric($_GET['id']) && $_GET['id'] > 0) { 

を。まず、issetによるチェックが必要です。私はあなたがそれを残すことができることを知っているが、その方法では、エラー報告が 'E_ALL'に設定されているときにPHPの通知を受けるだろう。

スクリプトを短くするために関数を作成することはできますが、スクリプトのさまざまな場所にそれぞれ異なる情報が必要なので、あまりにも多くの関数を作成する必要があります。

このコードを短くする方法はありますか?

ありがとうございます!

答えて

4

アクションとIDの両方がおそらくスクリプトの先頭に設定される可能性があるので、

$action = !empty($_GET['action'])?$_GET['action']:false; 
$id = !empty($_GET['id'])?$_GET['id']:false; 

switch ($action) { 
    case 'edit': 
      if ($id !== false) { 
       //processing here 
      } 
    break; 
    default: 
      echo 'No known action was passed through'; 
} 

初期変数宣言は、参考として短縮if/elseあるternary演算子を使用します。


追加情報

のelseif/else文/場合、私はそれを読んでする方がはるかに簡単です、あなたのようにほぼあなたのロジックを考える必要がないことを考えると、非常識に並置として、この方法を好みます多くの場合、エラーが発生しにくくなります。

0

あなたはキーの配列を受け取る関数記述することができます。そして、上記のあなたのラインは次のようになり

function check_get_params($keys) { 
    foreach ($keys as $key) { 
    if (! isset($_GET[$key])) { 
     return false; 
    } 
    } 
    return true; 
} 

を:

としてきれいになり
} elseif (check_get_params(array('action', 'id')) && $_GET['action'] == 'edit' && is_numeric($_GET['id'])) { 

} elseif (check_get_params(array('action', 'id'))) { 
    if ($_GET['action'] == 'edit' && is_numeric($_GET['id'])) { 
+0

彼はどんな機能を望んでいないと述べた... – Shoe

+0

@Charlie彼は「言ったが、そのようにIあまりに多くの関数を作成する必要があります " - これは、引数の異なる複数の場所で使用できる関数の1つです。 – Skilldrick

0

私は最初のパラメータをチェックします:

$action = (isset($_GET['action']) && !empty($_GET['action'])) ? $_GET['action'] : false; 
$id = (isset($_GET['id']) && !empty($_GET['id'])) ? $_GET['id'] : false; 
settype($id, 'int'); // "123" became 123(int) 

をそして一緒に行く:

} elseif ($action && $id && $action == 'edit' && $id > 0) { 
    // here we are 
}