web-dev-qa-db-ja.com

$ _POST-valueが空かどうかを確認します

if(isset($_POST['submit'])) {
    if(!isset($_POST['userName'])) {
        $username = 'Anonymous';
    }      
    else $username = $_POST['userName'];
}

$usernameを「匿名」にすることはできませんか?空白または$_POST['userName']の値です。

26
WormHole

isset() は、変数が初期化されている場合にtrueを返します。 name値がuserNameに設定されたフォームフィールドがある場合、そのフォームが送信されると、値は常に「設定」されますが、データは存在しない場合があります。

代わりに、 trim() 文字列で、その長さをテストします

if("" == trim($_POST['userName'])){
    $username = 'Anonymous';
}      
40
Andy

フォームが正常に送信された場合、_$_POST['userName']_を常に設定する必要がありますが、空の文字列が含まれている場合があります。代わりに empty() かどうかを確認してください

_if (isset($_POST['submit'])) {
    if (empty($_POST['userName'])) {
        $username = 'Anonymous';
    } else { 
        $username = $_POST['userName'];
    }
}
_
41

値に関係なく、プロパティが存在するかどうかを確認するには、次を使用します。

if (array_key_exists('userName', $_POST)) {}

プロパティが設定されている(プロパティが存在し、値がnullまたはfalseではない)かどうかを確認するには、次を使用します。

if (isset($_POST['userName'])) {}

プロパティが設定されていて空ではない(空の文字列ではない、0(整数)、0.0 (浮く)、 '0'(文字列)、nullfalseまたは[](空の配列))、使用:

if (!empty($_POST['userName'])) {}
9
Gajus

質問:$ _POST値がemptyかどうかを確認します。

Translation:配列キー/インデックスに値が関連付けられているかどうかを確認します。

回答:セキュリティを重視するかどうかによります。有効な入力として許可されるものに依存します。

1. Some people say use empty().

からPHP Manual: "[空]は、変数が空であると見なされるかどうかを決定します。変数が存在しないか、値がFALSEである場合、変数は空と見なされます。"空と見なされます。

"" (an empty string)
0 (0 as an integer)
0.0 (0 as a float)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
$var; (a variable declared, but without a value)

これらの値が入力コントロールに有効でない場合、empty()は機能します。ここでの問題は、empty()too broadで一貫して使用される可能性があることです(同じ方法で、同じ理由で、$_POSTまたは$_GETへの異なる入力制御サブミッションで)。 empty()の適切な使用法は、配列全体が空(要素がない)かどうかを確認することです。

2. Some people say use isset().

isset()(言語構成体)は、isset($myArray)のように配列全体を操作できません。 変数および配列要素(インデックス/キー経由):isset($var)およびisset($_POST['username'])のみで動作します。 isset() languageコンストラクトは2つのことを行います。まず、変数または配列のインデックス/キーに値が関連付けられているかどうかを確認します。次に、値がPHP NULL値と等しくないことを確認します。

つまり、最も正確なチェックはisset()で最適に実行できます。これは、一部の入力コントロールが選択またはチェックされていない場合でも$ _POSTに登録しないためです。 PHP NULL値。私はどれもしません。だから、isset()を使用して$_POSTキーに関連付けられた値がないかどうかを確認します( isset()は--empty()よりも(質問の意味で)非常に厳密なテストの空の状態です。

3. Some people say just do if($var), if($myArray), or if($myArray['userName']) to determine emptiness.

Ifステートメントでtrueまたはfalseと評価されるものなら何でもテストできます。空の配列はfalseと評価されるため、設定されていない変数も評価されます。 PHP NULL値も含む変数もfalseと評価されます。残念なことに、この場合、empty()のように、さらに多くのものがfalseと評価されます。 '、ゼロ(0)、zero.zero(0.0)、ストリングゼロ' 0 '、ブール値false、および特定の空のXMLオブジェクト。

--Doyle、Beginning PHP 5.3

結論として、isset()を使用し、他のテストと組み合わせることを検討してください。例:

超グローバルなねじれが原因で機能しない場合がありますが、他のアレイでは問題なく機能します。

if (is_array($_POST) && !empty($_POST)) {
    // Now test for your successful controls in $_POST with isset()
} 

したがって、$_POSTが配列を表し、値がまったく格納されていないこと(多くの人が考慮していないもの)を確認する前に、キーに関連付けられた値を探すのはなぜですか?人々は、Webブラウザーを使用せずにフォームにデータを送信できることを忘れないでください。ある日、$_POSTには許可されたキーのみがあるというテストのポイントに到達するかもしれませんが、その会話は別の日のためのものです。

便利なリファレンス:

PHPマニュアル:型テストの比較表

4

私はこれらのユースケースに匹敵するシンプルな1行を使用します

$username = trim($_POST['userName'])?:'Anonymous';

これは、変数の初期化が行われていないという警告が表示されないように、エラーロギングがオフになっていることが確実なユースケース向けです。

これは偏執的なバージョンです。

$username = !empty(trim(isset($_POST['userName'])?$_POST['userName']:''))?$_POST['userName']:'Anonymous';

これにより、$_POST変数が設定されています。アクセスする前に。

2
Tschallacka

これを変更:

if(isset($_POST['submit'])){

    if(!(isset($_POST['userName']))){
    $username = 'Anonymous';
    }      
    else $username = $_POST['userName'];
}

これに:

if(!empty($_POST['userName'])){
     $username = $_POST['userName'];
}

if(empty($_POST['userName'])){
     $username = 'Anonymous';
}
2
Dan Kanze
$username = filter_input(INPUT_POST, 'userName', FILTER_SANITIZE_STRING);
if ($username == '') {$username = 'Anonymous';}

ベストプラクティス-入力は常にフィルター処理し、文字列のサニタイズは問題ありませんが、カスタムコールバック関数を使用して、受け入れられないものを実際にフィルター処理することをお勧めします。次に、安全な変数がnull /空であるかどうかを確認し、空の場合は匿名に設定します。最初の行に存在する場合は「else」ステートメントが設定されているため、必要ありません。

1
Amazing B

issetは、ハッシュ(または連想配列)でチェックしているキーが「設定」されているかどうかをテストしています。このコンテキストで設定するのは、値を知っているかどうかだけを意味します。値はありません。したがって、空の文字列として定義されます。

そのため、userNameという名前の入力フィールドがある限り、入力するかどうかに関係なく、これは当てはまります。あなたが本当にやりたいことは、userNameが空の文字列と等しいかどうかを確認することです ''

1
GoldenNewby