$ _POSTが存在するかどうかを確認します


100

$ _POSTが存在するかどうかを確認しようとしています。存在する場合は別の文字列内に出力し、存在しない場合はまったく出力しません。

このようなもの:

$fromPerson = '+from%3A'.$_POST['fromPerson'];

function fromPerson() {
    if !($_POST['fromPerson']) {
        print ''
    } else {
        print $fromPerson
    };
}

$newString = fromPerson();

どんな助けでも素晴らしいでしょう!

回答:


171
if( isset($_POST['fromPerson']) )
{
     $fromPerson = '+from%3A'.$_POST['fromPerson'];
     echo $fromPerson;
}

60

シンプル。次の2つの選択肢があります。

1.投稿データがあるかどうかを確認します

//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;
}

(または)

2.特定のキーが投稿データで使用可能かどうかのみを確認します

if (isset($_POST['fromPerson']) )
{
    $fromPerson = '+from%3A'.$_POST['fromPerson'];
    echo $fromPerson;
}

市さんのコメントどおりアウグストゥスフランシスの答えにempty()あるではない PHPで、文字列があるため、選択肢#1のために正しい'0'と同等であるfalseと- empty()を返すtrueためにはfalseと同等のすべての値。したがって、を使用emptyすると、値がの場合、コードは印刷をスキップします'0'。空の文字列を除外する場合は、アウグストゥスの回答を参照してください。
ToolmakerSteve 2017年

33

誰もがisset()を使うように言っています-これはおそらくあなたのために働くでしょう。

ただし、両者の違いを理解することが重要です。

$_POST['x'] = NULL; そして $_POST['x'] = '';

isset($_POST['x'])返されるfalse最初の例ではなく、返されtrueますが、どちらか一方を印刷しようとした場合、両方が空白値を返すにもかかわらず、二番目に。

あなたの場合は$_POST、ユーザーが入力したフィールド/フォームから来て左空白にされて、私は値が「あること」が、NOT NULLになることを(私はこのかかわらずに100%確かではないよ)と信じています。

その仮定が正しくない場合でも(私が間違っている場合は誰かが私を訂正してください!)上記は、今後の使用のために知っておくとよいでしょう。


4
empty()は変数の存在と空でない値をチェックするため、空の文字列がfalseを返すときに使用する関数です。
ハンダイク2013

1
@HanDijk- アウグストゥスフランシスの回答に関する Shiのコメントによると、ここで正しくempty()ありません。これは、phpでは文字列'0'false-に相当し、すべての値がfalseに等しい場合にempty()返さtrueれるためです。したがって、を使用すると、値がの場合、コードは印刷をスキップします。empty'0'
ToolmakerSteve 2017年

30

それは言及されていないことに驚いた

if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['fromPerson'])){

2
どうして?サーバーメソッドがPOSTでない場合、POST変数は設定されないため、必要なのは後半だけです。私が間違っている?
ToolmakerSteve 2015年

@ToolmakerSteveはい、ほとんどの場合それで十分ですが、常にではありませんが、私の答えは、それを行うことができる別の方法を示すことでした。
ジョンマグノリア

チェックボックス付きのフォームがあり、名前なしで送信する場合にも機能します。
John Magnolia

2
状況説明isset($_POST['fromPerson']であるtrueにも関わらず、if($_SERVER['REQUEST_METHOD'] == 'POST'ですfalse。そのような状況がない限り、必要なのはそのisset...部分だけです。
ToolmakerSteve 2017年

確かに、それは逆です。fromPerson存在しない可能性がありますが、POSTはまだ存在する可能性があります。問題は、「$ _ POSTが存在する場合」でした。例では、$ _ POST ['fromPerson']が使用されています。いくつかの状況では、@goatはここで説明し、場合でも、fromPerson送信名前だった、それは、POST中に存在しない場合があります。
papo


13

配列キーが存在するかどうかを確認する適切な方法は関数です 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'。空の文字列を除外する場合は、アウグストゥスの回答を参照してください。
ToolmakerSteve 2017年

ベストアンサー+1。
Viktor

9
  • その場合、メソッドの使用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();


  • 配列$ _POSTの存在を確認する必要はありません。バージョン4.1.0以降、PHP環境のグローバル変数であるためです(現在、古いバージョンのPHPには対応していません)。

このコードissetは、postフィールドが設定されているがNULLが含まれている場合のソリューションとの動作のみが異なります。これは良い代替場合あなたが許可するNULLelse枝。ただし、文字列が必要な場合は誤りです。その状況でissetは正しいことを行いますが、このコードは行いません- NULL値を渡します。ロバートの後の答えは違いを示しています。
ToolmakerSteve 2017年

6

すべてのメソッドは実際には推奨されていません。これは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);

1
一方、コードの読みやすさも重要です。私見、issetフィルター式よりもはるかに読みやすいです。しかし、これを指摘してくれてありがとう。検討するのに便利なオプションです。
ToolmakerSteve 2015年

ええと、フィルターを使用するがisset / 2の動作を持つ独自のmyIsset / 2ラッパーメソッドを作成できます
linuxatico

「すべてのメソッドは実際には推奨されません」-これは強力なステートメントです(たとえNetBeansが警告としてマークを付けたとしても)。あなたはへのリンクあります信頼できるソース思いとどまら $ _POSTへの直接の言及を?(厳密さよりもコーディングの便宜のために設計されたphpについてはたくさんあります-この質問への回答で間違って使用している人の数を見てくださいempty。phpの緩いタイピングによってつまずきました。$ _ POSTへのアクセスが貧弱と見なされるとは想像しがたいですスタイル。)
ToolmakerSteve 2017年

4

試す

if (isset($_POST['fromPerson']) && $_POST['fromPerson'] != "") {
    echo "Cool";
}

ラファエルの答えについてのハン・ダイクのコメントによると、empty($_POST['fromPerson'])この結合されたテストを行います。読みやすく入力しやすい:)
ToolmakerSteve

@ToolmakerSteve:をempty('0')返しますtrue。したがって、同じではありません。
Shi

1
@市-はい、あなたは正しいです。私が言ったことは間違っています!ここに示されているコードよりも簡単な解決策はないようです。
ToolmakerSteve 2017年


3
if (is_array($_POST) && array_key_exists('fromPerson', $_POST)) {
    echo 'blah' . $_POST['fromPerson'];
}

1
is_array($ _ POST)はPOSTに値があるかどうかをチェックしますか?私のアプリでは、他に何かする前に、投稿があったかどうかを判断しようとしています。
Jeff LaFay、2011

1
私の編集を参照してください。is_array()それが配列であるかどうかをチェックし、2番目の部分では、キーを持つアイテムがあるかどうかをチェックします'fromPerson'
jezmck

2

if( isset($_POST['fromPerson']) ) は正しい。

関数を使用して戻ることができ、エコーを指示するよりも優れています。


2
この回答は、何年も前に他の回答ですでに述べられていなかった議論に何も追加しません。
ToolmakerSteve 2017年

1

私はそれが設定されているかどうか、そしてそれが三項演算子で空かどうかを確認したいです。

// 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;

5
empty('0')ですtrue。だから、より良い持っていないversion 0、またはuserID 0、その他

0

このスレッドは古く、Googleで上位にランクされていますが、私の回答を追加したいと思います。

私の最善の方法は、試すことです:

if(sizeof($_POST) !== 0){
// Code...
}

$_POSTスクリプトのロードとデータなしの中に存在する場合、アレイである$_POSTがこれはIF文で使用することができる0の配列の長さを有することになる変数。

これが見て、「未定義のインデックス」エラーをスローする場合にも不思議に思われるかもしれませんけれどもとして我々場合ですチェック$_POST設定されている...実際には$_POST、常にあなたが$ _POSTを検索しようとした場合、「未定義のインデックス」エラーがのみ表示されます、存在しています存在しない配列値。

$_POST常にそれ自体が空であるか、配列値を持っています。 $_POST['value']存在しない可能性があるため、「未定義のインデックス」エラーがスローされます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.