$ _POST로 설정된 경우


101

한 페이지에 다른 페이지로 제출하는 양식이 있습니다. 거기에서 입력 메일이 채워져 있는지 확인합니다. 그렇다면 무언가를하고 채워지지 않으면 다른 일을하십시오. 빈 양식을 보내도 항상 설정되어 있다고 말하는 이유를 이해하지 못합니다. 무엇이 없거나 잘못 되었습니까?

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

답변:


224

대부분의 양식 입력은 채워지지 않더라도 항상 설정되므로 비어 있는지도 확인해야합니다.

!empty()이미 두 가지를 모두 확인 하므로 다음을 사용할 수 있습니다.

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

10
이 비교 테이블은 이런 것들에 대한 많은 도움이 될 것입니다 php.net/manual/en/types.comparisons.php
스타

2
사소한 것 ... !이런 경우 에는 연산자 를 피하고 (읽기 쉬움, 오류 가능성 감소 등) 논리를 뒤집는 것이 바람직하다고 생각합니다 ...if (empty()) {/* No */} else {/* Yes */}
MrWhite

25

사용 !empty대신에 isset. 배열이 수퍼 글로벌이고 항상 존재 하기 $_POST때문에 isset은 true를 반환합니다 $_POST.

또는 더 나은 사용 $_SERVER['REQUEST_METHOD'] == 'POST'


2
둘 다 사용 isset하고 !empty오류를 방지하기 위해 언급해야 합니다. 편집 :
우스꽝스럽고

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 유형 비교 테이블 에 따르면 절대적으로 옳습니다. 간단한 부울은 빈 문자열을 확인하기 위해 빈 함수의 작업을 수행합니다.
viery365

나는 이것이 오래된 대답이라는 것을 알고 있지만 첫 번째 방법은 정의되지 않은 색인 알림을 유발할 수 있습니다.
ICE

1
@ICE 변수 앞에 @, ie :를 붙여 쉽게 우회 할 수 있습니다 @$_POST['username']. 알아 주셔서 감사합니다.
CONvid19

2

사용 !empty()대신에 isset(). isset()귀하의 경우 항상 진실을 반환 하기 때문 입니다.

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 변수에 할당 할 수 있습니다. 이제 Real Escape String을 사용할 수 있으며 아래는

step2_check.php

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

$ db는 데이터베이스 연결입니다.


1

FORM이 먼저 제출되었는지 확인한 다음 필드를 확인하십시오. 또한 해커를 방지하기 위해 필드를 삭제해야합니다.

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는 세 가지 조건을 제공합니다. 이것은 자바 스크립트에서 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";
}

답변을 설명해야합니다. 그래서 질문에 대답하는 것이 아니라 사람들을 교육하기 위해 존재합니다
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.