issetの場合$ _POST


100

1つのページに別のページに送信するフォームがあります。そこで、入力メールがいっぱいかどうかをチェックします。もしそうなら、何かをし、それが満たされていなければ、他の何かをしてください。空のフォームを送信しても、設定されていると常に表示される理由がわかりません。何が欠けているか間違っていますか?

step2.php:

<form name="new user" method="post" action="step2_check.php"> 
    <input type="text" name="mail"/> <br />
    <input type="password" name="password"/><br />
    <input type="submit"  value="continue"/>
</form>

step2_check:

if (isset($_POST["mail"])) {
    echo "Yes, mail is set";    
} else {    
    echo "N0, mail is not set";
}

6
フォームに存在するすべてのテキストのような入力とテキストエリアは、それらの値が空の文字列であってもサーバーに送信されます。
hypeJunction 2016年

回答:


223

ほとんどのフォーム入力は、入力されていなくても常に設定されるため、空かどうかも確認する必要があります。

!empty()はすでに両方をチェックしているので、これを使用できます。

if (!empty($_POST["mail"])) {
    echo "Yes, mail is set";    
} else {  
    echo "No, mail is not set";
}

9
この比較表は、このphp.net/manual/en/types.comparisons.php
スター

2
マイナーなこと... !このような場合はオペレーターを避け(読みやすく、エラーの可能性が少ないなど)、ロジックを逆にすることが望ましいと思います...if (empty()) {/* No */} else {/* Yes */}
MrWhite

25

!empty代わりに使用しますisset。issetはtrueを返します。これは$_POST$_POST配列がスーパーグローバルであり、常に存在(設定)されているためです。

またはより良い使用 $_SERVER['REQUEST_METHOD'] == 'POST'


2
両方を使用isset!emptyて、エラーを防ぐことを言及する必要があります。編集:おっと、それはどうやら毎日学習し、その後Ref
Touki

1
私が試したところ、どちらも問題なく動作しました。なぜ$ _SERVER ['REQUEST_METHOD'] == 'POST'の方が優れているのですか?それは正確に何をしますか?特定の入力を参照できますか、それともフォームに一般的ですか?
Nrc

3
$_SERVER['REQUEST_METHOD']ユーザーがフォームを送信したことを確認します。$_POSTこの場合でも空にすることができます。次の形式について考えてみます。<form method="post"></form>、送信してもアクションには何も送信されませんが、リクエストタイプはになりますpost。または、curlを使用して行うこともできますcurl -X POST http://example.com/processor.php。プロセッサにのようなコードが含まれている場合echo $_SERVER['REQUEST_METHOD']. ' '.var_export(empty($_POST),1);、次のように表示されますPOST true
Nemoden

5

php.netから、isset

varが存在し、NULL以外の値を持つ場合はTRUEを返し、それ以外の場合はFALSEを返します。

空のスペースはセットと見なされます。すべてのnullオプションをチェックするにはempty()を使用する必要があります。


2

空のフォームを送信すると、$ _ POST ['mail']は送信されますが、値は空です。フィールドが空かどうかを確認するには、確認する必要があります

if(isset($_POST["mail"]) && trim($_POST["mail"]) != "") { .. }

コードをコピーして貼り付けても機能しないと思いますか?確認しましたか?
Nrc

2

次の属性を入力テキストフォームに追加しますrequired="required"。フォームが入力されていない場合、ユーザーはフォームを送信できません。

新しいコードは次のようになります。

<form name="new user" method="post" action="step2_check.php"> 
<input type="text" name="mail" required="required"/> <br />
<input type="password" name="password" required="required"/><br />
<input type="submit"  value="continue"/>
if (isset($_POST["mail"])) {
    echo "Yes, mail is set";    
}

2

あなたは単に使うことができます:

if($_POST['username'] and $_POST['password']){
  $username = $_POST['username'];
  $password = $_POST['password'];
}

または、empty()を使用します

if(!empty($_POST['username']) and !empty($_POST['password'])){
  $username = $_POST['username'];
  $password = $_POST['password'];
}

PHPの型比較表によると、あなたは完全に正しいです。単純なブール値は、空の文字列をチェックするためにempty関数の機能を実行します。
viery365

これは古い答えですが、最初の方法は未定義のインデックス通知を引き起こす可能性があります。
ICE

1
@ICE変数の前@にie:を付けることで簡単にバイパスできます@$_POST['username']。お知らせいただきありがとうございます。
CONvid19

2

!empty()代わりに使用しますisset()。そのためisset()、常にあなたのケースにtrueを返します。

if (!empty($_POST["mail"])) {
    echo "Yes, mail is entered";    
} else {  
    echo "No, mail is not entered";
}

1

多分あなたはこれを試すことができます:

if (isset($_POST['mail']) && ($_POST['mail'] !=0)) { echo "Yes, mail is set"; } else { echo "No, mail is not set"; }


1
<?php
    if(isset($_POST['mail']) && $_POST['mail']!='') {
        echo "Yes, mail is set";
    }else{
        echo "N0, mail is not set";
    }
?>

3
コードがOPの質問に答える理由を説明する必要があります。
Markus

1

これがstep2.phpのHTMLフォームであると考えましょう

step2.php

<form name="new user" method="post" action="step2_check.php"> 
    <input type="text" name="mail"/> <br />
    <input type="password" name="password"/><br />
    <input type="submit"  value="continue"/>
</form>

私はあなたのデータベースにそれが必要だと思うので、HTMLフォームの値をphp変数に割り当てることができます。これでリアルエスケープ文字列を使用できます。

step2_check.php

if(isset($_POST['mail']) && !empty($_POST['mail']))
{
$mail = mysqli_real_escape_string($db, $_POST['mail']);
}

$ dbはデータベース接続です。


1

フォームが最初に送信されたかどうかを確認し、次にフィールドを送信します。また、ハッカーを防ぐためにフィールドをサニタイズする必要があります。

form name="new user" method="post" action="step2_check.php"> 
    <input type="text" name="mail"/> <br />
    <input type="password" name="password"/><br />
    <input type="submit"  id="SubmitForm" name= "SubmitForm" value="continue"/>
</form>

step2_check:


if (isset($_POST["SubmitForm"]))
   {
   $Email =  sanitize_text_field(stripslashes($_POST["SubmitForm"]));
   if(!empty($Email))
     echo "Yes, mail is set"; 
   else
     echo "N0, mail is not set";
   } 
}

0

投稿された質問に答えるために:issetとemptyを一緒にすると、3つの条件が与えられます。これは、JavaScriptとajaxコマンドでも使用できます。

$errMess="Didn't test";   // This message should not show
if(isset($_POST["foo"])){ // does it exist or not
    $foo = $_POST["foo"]; // save $foo from POST made by HTTP request
    if(empty($foo)){      // exist but it's null
        $errMess="Empty"; // #1 Nothing in $foo it's emtpy

    } else {              // exist and has data
        $errMess="None";  // #2 Something in $foo use it now
      }
} else {                  // couldn't find ?foo=dataHere
     $errMess="Missing";  // #3 There's no foo in request data
  }

echo "Was there a problem: ".$errMess."!";

0

あなたはこれを試すことができます:

if (isset($_POST["mail"]) !== false) {
    echo "Yes, mail is set";    
}else{  
    echo "N0, mail is not set";
}

答えを説明する必要があります。SOは、質問に答えるだけでなく、人々を教育するためにも存在します
Machavity

0
<form name="new user" method="post" action="step2_check.php"> 
  <input type="text" name="mail" required="required"/> <br />
  <input type="password" name="password" required="required"/><br />
  <input type="submit"  value="continue"/>
</form>

<?php
if (!empty($_POST["mail"])) {
    echo "Yes, mail is set";    
}else{  
    echo "N0, mail is not set";
}
?>

0

あなたが試すことができます、

 <?php

     if (isset($_POST["mail"])) {
            echo "Yes, mail is set";    
        }else{  
            echo "N0, mail is not set";
        }
  ?>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.