web-dev-qa-db-ja.com

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

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

このようなもの:

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

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

$newString = fromPerson();

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

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

シンプル。次の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;
}
53
Dheeraj Bhaskar

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

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

$_POST['x'] = NULL;および$_POST['x'] = '';

isset($_POST['x'])は、最初の例ではfalseを返しますが、2番目の例ではtrueを返しますが、どちらかを印刷しようとしても、両方とも空の値を返します。

$_POSTがユーザーが入力したフィールド/フォームから来ており、空白のままになっている場合、値は ""でなくNULLではないことを確信します(ただし、これについては100%確信していません)。

その仮定が間違っていても(私が間違っているなら誰かが私を修正してください!)、上記は将来の使用のためにまだ知っておくと良いです。

31
Rafael

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

if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['fromPerson'])){
28
John Magnolia
isset($_POST['fromPerson']) 
19
h3xStream

配列キーが存在するかどうかを確認する適切な方法は、関数array_key_exists()です。

違いは、$_POST['variable'] = nullがある場合、キーは存在し、送信されたが値がnullだったことを意味することです。

他のオプションは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()が適切な場合もあります。

12
Robert
  • その場合、メソッドissetの使用は適切ではありません。

PHPドキュメントによると: http://php.net/manual/en/function.array-key-exists.php
(例#2を参照 array_key_exists()vs isset()
メソッド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には対応していません)。
9
Bronek

すべてのメソッドは実際には推奨されていません。Netbeans7.4では警告であり、スーパーグローバル変数に直接アクセスしないことをお勧めします。filter代わりに

$fromPerson = filter_input(INPUT_POST, 'fromPerson', FILTER_DEFAULT);
if($fromPerson === NULL) { /*$fromPerson is not present*/ }
else{ /*present*/ }
var_dump($fromPerson);exit(0);
6
linuxatico

試して

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

isset($_POST['fromPerson'])

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

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

関数を使用して、エコーを向けるよりも良い結果を返すことができます。

2
Cristian Weiser

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

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