117

isset()関数が空の文字列を として扱うことをどこかで読んだTRUEためisset()、HTML フォームからのテキスト入力とテキスト ボックスを検証する効果的な方法ではありません。

したがってempty()、ユーザーが何かを入力したことを確認するために使用できます。

  1. isset()関数が空の文字列を として扱うというのは本当TRUEですか?

  2. では、どのような状況で使用する必要がありますisset()か? 何かがあるかどうかを常に!empty()確認するために使用する必要がありますか?

たとえば、代わりに

if(isset($_GET['gender']))...

これを使って

if(!empty($_GET['gender']))...
4

19 に答える 19

147

isset と !empty

FTA:

"isset() は、変数が (False、0、または空の文字列) を含むが NULL ではない値を持っているかどうかをチェックします。var が存在する場合は TRUE を返し、そうでない場合は FALSE を返します。

一方、 empty() 関数は、変数が空の値の空の文字列、0、NULL、または False を持っているかどうかをチェックします。var が空でもゼロでもない値を持つ場合、FALSE を返します。"

于 2009-08-02T19:04:34.523 に答える
37

最も一般的な方法で:

  • isset変数 (または配列の要素、またはオブジェクトのプロパティ)が存在する(かつ null でない) かどうかをテストします。
  • empty変数 (...) に空でないデータが含まれているかどうかをテストします。


質問 1 に答えるには:

$str = '';
var_dump(isset($str));

与える

boolean true

変数$strが存在するためです。


そして質問2

変数が存在するかどうかを判断するには isset を使用する必要があります。たとえば、データを配列として取得する場合、その配列にキーが設定されているかどうかを確認する必要がある場合があります。 たとえば、/
について考えてみてください。$_GET$_POST

さて、その値に取り組むために、そのような値があることを知っていれば、それが の仕事ですempty

于 2009-08-02T19:06:24.017 に答える
12

どちらも、有効な入力を確認するための良い方法ではありません。

  • isset()すでに述べたように、空の文字列を有効な値と見なすため、十分ではありません。
  • ! empty()有効な値である可能性がある「0」を拒否するため、十分ではありません。

isset()空の文字列に対する同等性チェックと組み合わせて使用​​することは、フォールスネガティブを作成せずに着信パラメータに値があることを確認するために必要な最低限のことです。

if( isset($_GET['gender']) and ($_GET['gender'] != '') )
{
  ...
}

しかし、「最低限」とは、まさにそれを意味します。上記のコードはすべて、に何らかの値があるかどうかを判断することです$_GET['gender']。の値が有効かどうかは判断されませ(たとえば、のいずれか)。$_GET['gender']("Male", "Female","FileNotFound")

そのためには、JoshDavisの回答を参照してください。

于 2012-04-22T04:24:38.643 に答える
12

isset値だけでなく、変数のみに使用することを意図しているisset("foobar")ため、エラーが発生します。PHP 5.5 以降、empty変数と式の両方をサポートします。

したがって、最初の質問は、空の文字列を保持する変数に対してtrueissetを返すかどうかです。答えは次のとおりです。

$var = "";
var_dump(isset($var));

PHP のマニュアルの型比較表は、このような質問に非常に役立ちます。

isset基本的に、存在しない変数の値は常に null であるため、変数にnull以外の値があるかどうかをチェックしますemptyのカウンター部分の一種ですがisset、整数値0と文字列値"0"も空として扱います。(もう一度、タイプ比較表を見てください。)

于 2009-08-02T19:12:45.640 に答える
8

$ _POST ['param']があり、それが文字列型であると想定している場合は、

isset($_POST['param']) && $_POST['param'] != '' && $_POST['param'] != '0'

と同じです

!empty($_POST['param'])
于 2013-01-26T17:18:28.320 に答える
4

isset() は、HTML フォームからのテキスト入力とテキスト ボックスを検証する効果的な方法ではありません

「isset() は入力を検証する方法ではない」と書き直すことができます。入力を検証するには、PHP のフィルター拡張機能を使用します。実際に入力をフィルタリングおよび/またはサニタイズしfilter_has_var()ながら、変数が存在するかどうかを教えてくれます。filter_input()

filter_has_var()前に使用するfilter_input()必要はなく、設定されていない変数を要求すると、filter_input()単に が返されることに注意してくださいnull

于 2009-08-02T20:59:09.177 に答える
2

isset() は、変数に値が設定されているかどうかを確認するために使用され、Empty() は、指定された変数が空であるかどうかを確認するために使用されます。

isset() は変数が null でない場合に true を返し、Empty() は変数が空の文字列の場合に true を返します。

于 2018-05-17T15:23:00.567 に答える
1

使用emptyするだけで十分です:

if(!empty($variable)){
    // Do stuff
}

さらに、整数値が必要な場合は、intval($variable) !== FALSE.

于 2009-08-02T19:05:55.377 に答える
1
isset($variable) === (@$variable !== null)
empty($variable) === (@$variable == false)
于 2009-08-02T19:06:47.637 に答える
0

疑問がある場合は、これを使用してValueと の違いissetを確認してくださいempty

if(empty($yourVal)) {
  echo "YES empty - $yourVal"; // no result
}
if(!empty($yourVal)) {
  echo "<P>NOT !empty- $yourVal"; // result
}
if(isset($yourVal)) {
  echo "<P>YES isset - $yourVal";  // found yourVal, but result can still be none - yourVal is set without value
}
if(!isset($yourVal)) {
  echo "<P>NO !isset - $yourVal"; // $yourVal is not set, therefore no result
}
于 2021-10-16T00:05:56.857 に答える
0

!emptyでうまくいきます。データが存在するかどうかを確認するだけでよい場合は、isset other emptyを使用して他の検証を処理できます

<?php
$array = [ "name_new" => "print me"];

if (!empty($array['name'])){
   echo $array['name'];
}

//output : {nothing}

////////////////////////////////////////////////////////////////////

$array2 = [ "name" => NULL];

if (!empty($array2['name'])){
   echo $array2['name'];
}

//output : {nothing}

////////////////////////////////////////////////////////////////////

$array3 = [ "name" => ""];

if (!empty($array3['name'])){
   echo $array3['name'];
}

//output : {nothing}  

////////////////////////////////////////////////////////////////////

$array4 = [1,2];

if (!empty($array4['name'])){
   echo $array4['name'];
}

//output : {nothing}

////////////////////////////////////////////////////////////////////

$array5 = [];

if (!empty($array5['name'])){
   echo $array5['name'];
}

//output : {nothing}

?>

于 2020-06-03T09:34:37.113 に答える