0

こんにちは、誰かが私の条件文で間違ったことを助けてくれますか?

if(isset($_GET['input'] or $_GET['input2'] or $_GET['input3']))
{
  $release=$_GET['input'].$_GET['input2'].$_GET['input3'];
  echo $release;
}

編集:エラーはsyntax error, unexpected T_LOGICAL_OR, expecting ',' or ')'

4

5 に答える 5

4

issetチェックするパラメータごとに1つずつ、複数の呼び出しを行う必要があります。

orとは優先順位が異なることに注意してください||。通常は後者が必要です。

isset変数ではなく複合式を渡すため、解析エラーが発生します。これは通常の関数ではありませんが、別の言語構造であるため、ドキュメントで指摘されているように、独自の任意のルールがあります。

isset()は変数でのみ機能します。他のものを渡すと、解析エラーが発生するためです。


おそらく、PHPは自然言語をエミュレートしていると思うので、それをとして読みます"Is input or input2 or input3 set?"

それは誤解です。構文的に有効である場合、最初は論理的に値が一緒になり、次にその1つの値がにOR渡されます。その時点で、変数へのすべての接続が失われ、残っているのはどちらか、またはその上にあるものだけです。適用されます。issettruefalseisset

于 2012-12-23T09:35:41.930 に答える
4
if(isset($_GET['input']) || isset($_GET['input2']) || isset($_GET['input3']))

しかし、実際には、ORではなくANDが必要だと思うので、変更してください|| 私が正しければ&&に。

于 2012-12-23T09:36:02.283 に答える
3

isset各パラメータを個別に呼び出す必要があります。isset()単一のパラメーターを受け入れ、それに応じて応答します。

詳細については、issetを確認してください。

ボーナスのヒント: データベースクエリでこれらの変数を使用している場合は、SQLインジェクションの可能性を回避するためにmysqli_real_escape_string()を使用する必要があります

于 2012-12-23T09:41:37.253 に答える
3

この質問に対する現在の回答はすべて、次の重要な機能を見逃してissetいます。複数の変数を同時にチェックできます。マニュアルから:

複数のパラメーターが指定されている場合、isset()は、すべてのパラメーターが設定されている場合にのみTRUEを返します。評価は左から右に進み、未設定の変数が検出されるとすぐに停止します。

したがって、この場合、次のようなことができます。

if (isset($_GET['input'], $_GET['input2'], $_GET['input3'])) {

_GETこの条件は、すべての要素が設定されている場合にのみ渡されます。

于 2012-12-23T12:48:04.493 に答える
2

これにより、エラーが修正されます。

if(isset($_GET['input']) or isset($_GET['input2']) or isset($_GET['input3']))
{
    $release=$_GET['input'].$_GET['input2'].$_GET['input3'];
    echo $release;
}

ただし、ANDではなくORをテストしているため、必要なのは、これらのORテストの1つで、if条件に戻るためにtrueに戻ることです。他の2つのいずれかが設定されていない場合でも、通知をスローします。エラー。

3つすべてが存在することを確認するには、次のようにします。

if (isset($_GET['input']) && isset($_GET['input2']) && isset($_GET['input3'])) { 
    //...
}

これはおそらく、面倒なテストなしで達成しようとしていることを実行します。

// count will return however many key=>val pairs are in the array, 
// 0 will fail
if (count($_GET)) {
    // an empty array and an empty string to hold iterated results
    $get = array();
    $release = '';
    // iterate through $_GET and append each key=>val pair to the local array, 
    // then concat onto the string
    foreach($_GET as $key=>$val) {
        $get[$key] = $val;
        $release .= $get[$key];
    }
    echo $release;
}

HTH :)


編集:他の人が示しているように、これらの配列キーがすべて設定されていることを確認するためのテストが必要な場合は、foreachループをスキップしてこれを実行してください:

 // extract imports all of the array keys into the symbol table. 
 // It returns the number of symbls imported, and automatically
 // sets vars using keys for var name: 
 if (extract($_GET) && isset($input,$input2,$input3)) {
     echo $release = $input.$input2.$input3;
 }

(issetに渡された複数の引数を使用します。)

  • HTH :)
于 2012-12-23T12:43:07.723 に答える