2016-04-13 7 views
0

私のプロジェクトでは、POSTとセッション変数を使用して、それぞれが次に使用する情報を提供する一連のページを扱っています。簡単な例:複数の変数宣言を効率的にチェックする方法は?

Page 1:入力名 - >ページ2表示名;誕生日を尋ねる - > 3ページの表示名と生年月日。

ユーザーがページ3に直接行くと、名前や生年月日が入力されていないというメッセージを表示して、もう一度やり直す必要があります。現在、私はまだそうしています。例では、十分に単純な、しかし本当であるならば、句

if (isset($name) && isset($_SESSION['bday'])) { 
    // do main stuff 
else { 
    // display error message 
} 

のような宣言として

if (isset($_SESSION['name'])) $name = $_SESSION['name']; 
if (isset($_POST['bday'])) $_SESSION['bday'] = $_POST['bday']; 

と体AN中:

if (isset($_POST['name'])) $_SESSION['name'] = $_POST['name']; 

と3ページ:2ページ私のコードには、フォームからの変数とデータがより多くあります。すべてを変数代入に入れてから、if節では疲れていて、効率的ではないようです。このようなことをチェックするためのより良い、より簡単な方法はありますか?または、私が行った最高の、最もよく使われた方法を投稿したものですか?

+0

三項演算子を使用すると$ name = isset($ _GET ['name'])を助けることができますか? $ _GET ['名前']: 'あなたの名前を入力してください'; – Nick

+0

指定されたポイントまで必要な変数名を含む配列を作成し、何らかの反復によってチェックを行いますか? – kero

+0

@NickGしかし、それは本当に欠けている変数を 'キャッチ'しません。あなたはそのような機能を許可したり禁止したりすることはできません。 –

答えて

0

1つの呼び出しを使用して、いくつかの変数をチェックすることができます。

isset($_SESSION['name'], $_SESSION['bday'], ...) 

それとも

if (variablesFilled(['name', 'bday', ...])) { } 

function variablesFilled($array) { 
    foreach ($array as $entry) { 
    if (!isset($_SESSION[$entry])) { 
     return false; 
    } 
    } 
    return true; 
} 
-1

サーバーごとに異なる機能を持つ傾向があります。関数を実行する時間を計算し、より速いものを比較することができます。

しかし、そうですね、かなり速いコードのようです。

代替案としてスイッチケースのステートメントを試してみる価値はありますか?

0

私はいくつかのヘルパーメソッドを書く必要があると信じています。このようにダム$_SESSION$_POSTデータを書き換えるための一つ、:

function copyPostToSession(array $fields) { 
    foreach($fields as $field) { 
     if(isset($_POST[$field])) { 
      $_SESSION[$field] = $_POST[$field]; 
     } 
    } 
} 

代わりif森のように、あなたが実行します。

copyPostToSession(array('name','bday')); 

(加えて、あなたは存在していたどのように多くの分野数えるとtrueまたはfalseを返すことができます不一致がある場合は)、もう1つ(かなり類似している)を確認して、必要なデータがすべて$_SESSIONにあるかどうかを確認します。

+0

このようなヘルパーメソッドでは、 '$ _POST'や' $ _SESSION'グローバル関数内に?私はあなたのものとほとんど同じMarkusの機能を試してみましたが、私は500の内部サーバーエラーを受け取ります。私はヘルパー関数を別のファイルの中に入れます。 –

+0

類似している可能性があります - 元の3行にするのは難しいです。しかし、私のaswerは1分早いです:) $ _SESSIONと$ _POSTについては、これらはどこでも見える超大域的なものです。エラー500 - サーバログを確認してください –

+0

ええ、問題は私が今ログをチェックすることができないので、私が仕事に就かなければならないことです。しかし、それは変です。私は問題は、変数に結果を代入しようとしていると思います、それは可能ですか?これをすることはできませんか? http://pastebin.com/V8e0xGqz –

0

PHPのisset()機能がvariadric functionあるようにあなたは、あなた自身の関数を書くことができます。 あなたが好きなだけ引数を置くことができます。

isset($a, $b, $c) 

を...に変換した:

isset($a) && isset($b) && isset($c) 

はそれが助けを願って!

関連する問題