回答:
//Note: This resolves as true even if all $_POST values are empty strings
if (!empty($_POST))
{
// handle post data
$fromPerson = '+from%3A'.$_POST['fromPerson'];
echo $fromPerson;
}
if (isset($_POST['fromPerson']) )
{
$fromPerson = '+from%3A'.$_POST['fromPerson'];
echo $fromPerson;
}
誰もがisset()を使うように言っています-これはおそらくあなたのために働くでしょう。
ただし、両者の違いを理解することが重要です。
$_POST['x'] = NULL; そして $_POST['x'] = '';
isset($_POST['x'])返されるfalse最初の例ではなく、返されtrueますが、どちらか一方を印刷しようとした場合、両方が空白値を返すにもかかわらず、二番目に。
あなたの場合は$_POST、ユーザーが入力したフィールド/フォームから来て左空白にされて、私は値が「あること」が、NOT NULLになることを(私はこのかかわらずに100%確かではないよ)と信じています。
その仮定が正しくない場合でも(私が間違っている場合は誰かが私を訂正してください!)上記は、今後の使用のために知っておくとよいでしょう。
empty()ありません。これは、phpでは文字列'0'がfalse-に相当し、すべての値がfalseに等しい場合にempty()返さtrueれるためです。したがって、を使用すると、値がの場合、コードは印刷をスキップします。empty'0'
それは言及されていないことに驚いた
if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['fromPerson'])){
isset($_POST['fromPerson']であるtrueにも関わらず、if($_SERVER['REQUEST_METHOD'] == 'POST'ですfalse。そのような状況がない限り、必要なのはそのisset...部分だけです。
fromPerson存在しない可能性がありますが、POSTはまだ存在する可能性があります。問題は、「$ _ POSTが存在する場合」でした。例では、$ _ POST ['fromPerson']が使用されています。いくつかの状況では、@goatはここで説明し、場合でも、fromPerson送信名前だった、それは、POST中に存在しない場合があります。
配列キーが存在するかどうかを確認する適切な方法は関数です array_key_exists()
違いは、それがある場合$_POST['variable'] = null、キーは存在し、送信されたが値はnullであったということです。
もう1つのオプションはisset()、配列キーが存在するかどうか、および設定されているかどうかをチェックするオプションです。
最後のオプションはempty()、が設定されていて、値が空と見なされていない場合に配列キーが存在するかどうかをチェックすることです。
例:
$arr = [
'a' => null,
'b' => '',
'c' => 1
];
array_key_exists('a', $arr); // true
isset($arr['a']); // false
empty($arr['a']); // true
array_key_exists('b', $arr); // true
isset($arr['b']); // true
empty($arr['b']); // true
array_key_exists('c', $arr); // true
isset($arr['c']); // true
empty($arr['c']); // false
ご質問について
値が送信されたかどうかを確認する適切な方法は、リクエストメソッドのチェックでarray_key_exists()を使用することです
if ($_SERVER['REQUEST_METHOD'] == 'POST' && array_key_exists('fromPerson', $_POST)
{
// logic
}
しかし、いくつかの例があることはあなたのロジックに依存isset()し、empty()同様に良いことができます。
empty。市さんのコメントどおりアウグストゥスフランシスの答えに、empty()あるではない PHPで、文字列があるため、代替選択肢として正しい'0'と同等であるfalseと- empty()を返すtrueためにはfalseと同等のすべての値。したがって、を使用emptyすると、値がの場合、コードは印刷をスキップします'0'。空の文字列を除外する場合は、アウグストゥスの回答を参照してください。
issetは適切ではありません。PHPのドキュメントによれば:http://php.net/manual/en/function.array-key-exists.php
(#2例を参照 ISSET対array_key_existsを()() )
メソッドは、array_key_exists配列内のキーの存在を確認するためのものです。
したがって、質問のコードは次のように変更できます。
function fromPerson() {
if (array_key_exists('fromPerson', $_POST) == FALSE) {
return '';
} else {
return '+from%3A'.$_POST['fromPerson'];
};
}
$newString = fromPerson();
issetは、postフィールドが設定されているがNULLが含まれている場合のソリューションとの動作のみが異なります。これは良い代替、場合あなたが許可するNULLにelse枝。ただし、文字列が必要な場合は誤りです。その状況でissetは正しいことを行いますが、このコードは行いません- NULL値を渡します。ロバートの後の答えは違いを示しています。
すべてのメソッドは実際には推奨されていません。これはNetbeans 7.4の警告であり、スーパーグローバル変数に直接アクセスしないことをお勧めします。代わりにフィルターを使用してください
$fromPerson = filter_input(INPUT_POST, 'fromPerson', FILTER_DEFAULT);
if($fromPerson === NULL) { /*$fromPerson is not present*/ }
else{ /*present*/ }
var_dump($fromPerson);exit(0);
issetフィルター式よりもはるかに読みやすいです。しかし、これを指摘してくれてありがとう。検討するのに便利なオプションです。
empty。phpの緩いタイピングによってつまずきました。$ _ POSTへのアクセスが貧弱と見なされるとは想像しがたいですスタイル。)
試す
if (isset($_POST['fromPerson']) && $_POST['fromPerson'] != "") {
echo "Cool";
}
empty($_POST['fromPerson'])この結合されたテストを行います。読みやすく入力しやすい:)
empty('0')返しますtrue。したがって、同じではありません。
if (is_array($_POST) && array_key_exists('fromPerson', $_POST)) {
echo 'blah' . $_POST['fromPerson'];
}
is_array()それが配列であるかどうかをチェックし、2番目の部分では、キーを持つアイテムがあるかどうかをチェックします'fromPerson'。
if( isset($_POST['fromPerson']) ) は正しい。
関数を使用して戻ることができ、エコーを指示するよりも優れています。
私はそれが設定されているかどうか、そしてそれが三項演算子で空かどうかを確認したいです。
// POST variable check
$userID = (isset( $_POST['userID'] ) && !empty( $_POST['userID'] )) ? $_POST['userID'] : null;
$line = (isset( $_POST['line'] ) && !empty( $_POST['line'] )) ? $_POST['line'] : null;
$message = (isset( $_POST['message'] ) && !empty( $_POST['message'] )) ? $_POST['message'] : null;
$source = (isset( $_POST['source'] ) && !empty( $_POST['source'] )) ? $_POST['source'] : null;
$version = (isset( $_POST['version'] ) && !empty( $_POST['version'] )) ? $_POST['version'] : null;
$release = (isset( $_POST['release'] ) && !empty( $_POST['release'] )) ? $_POST['release'] : null;
empty('0')ですtrue。だから、より良い持っていないversion 0、またはuserID 0、その他
このスレッドは古く、Googleで上位にランクされていますが、私の回答を追加したいと思います。
私の最善の方法は、試すことです:
if(sizeof($_POST) !== 0){
// Code...
}
$_POSTスクリプトのロードとデータなしの中に存在する場合、アレイである$_POSTがこれはIF文で使用することができる0の配列の長さを有することになる変数。
これが見て、「未定義のインデックス」エラーをスローする場合にも不思議に思われるかもしれませんけれどもとして我々場合ですチェック$_POST設定されている...実際には$_POST、常にあなたが$ _POSTを検索しようとした場合、「未定義のインデックス」エラーがのみ表示されます、存在しています存在しない配列値。
$_POST常にそれ自体が空であるか、配列値を持っています。
$_POST['value']存在しない可能性があるため、「未定義のインデックス」エラーがスローされます。
empty()あるではない PHPで、文字列があるため、選択肢#1のために正しい'0'と同等であるfalseと-empty()を返すtrueためにはfalseと同等のすべての値。したがって、を使用emptyすると、値がの場合、コードは印刷をスキップします'0'。空の文字列を除外する場合は、アウグストゥスの回答を参照してください。