if(isset($_POST['submit'])) {
if(!isset($_POST['userName'])) {
$username = 'Anonymous';
}
else $username = $_POST['userName'];
}
$username
を「匿名」にすることはできませんか?空白または$_POST['userName']
の値です。
フォームが正常に送信された場合、_$_POST['userName']
_を常に設定する必要がありますが、空の文字列が含まれている場合があります。代わりに empty()
かどうかを確認してください
_if (isset($_POST['submit'])) {
if (empty($_POST['userName'])) {
$username = 'Anonymous';
} else {
$username = $_POST['userName'];
}
}
_
値に関係なく、プロパティが存在するかどうかを確認するには、次を使用します。
if (array_key_exists('userName', $_POST)) {}
プロパティが設定されている(プロパティが存在し、値がnull
またはfalse
ではない)かどうかを確認するには、次を使用します。
if (isset($_POST['userName'])) {}
プロパティが設定されていて空ではない(空の文字列ではない、0
(整数)、0.0
(浮く)、 '0'
(文字列)、null
、false
または[]
(空の配列))、使用:
if (!empty($_POST['userName'])) {}
質問:$ _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
には許可されたキーのみがあるというテストのポイントに到達するかもしれませんが、その会話は別の日のためのものです。
便利なリファレンス:
私はこれらのユースケースに匹敵するシンプルな1行を使用します
$username = trim($_POST['userName'])?:'Anonymous';
これは、変数の初期化が行われていないという警告が表示されないように、エラーロギングがオフになっていることが確実なユースケース向けです。
これは偏執的なバージョンです。
$username = !empty(trim(isset($_POST['userName'])?$_POST['userName']:''))?$_POST['userName']:'Anonymous';
これにより、$_POST
変数が設定されています。アクセスする前に。
これを変更:
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';
}
$username = filter_input(INPUT_POST, 'userName', FILTER_SANITIZE_STRING);
if ($username == '') {$username = 'Anonymous';}
ベストプラクティス-入力は常にフィルター処理し、文字列のサニタイズは問題ありませんが、カスタムコールバック関数を使用して、受け入れられないものを実際にフィルター処理することをお勧めします。次に、安全な変数がnull /空であるかどうかを確認し、空の場合は匿名に設定します。最初の行に存在する場合は「else」ステートメントが設定されているため、必要ありません。
issetは、ハッシュ(または連想配列)でチェックしているキーが「設定」されているかどうかをテストしています。このコンテキストで設定するのは、値を知っているかどうかだけを意味します。値はありません。したがって、空の文字列として定義されます。
そのため、userNameという名前の入力フィールドがある限り、入力するかどうかに関係なく、これは当てはまります。あなたが本当にやりたいことは、userNameが空の文字列と等しいかどうかを確認することです ''