양식이 제출되었는지 확인-PHP


122

양식의 변수를 유효성 검사 클래스에 전달해야하는지 여부를 결정하기 위해 양식이 제출되었는지 여부를 확인하는 가장 좋은 방법은 무엇입니까?

처음에는 다음과 같이 생각했습니다.

isset($_POST)

그러나 수퍼 글로벌이 모든 곳에서 정의되므로 항상 true를 반환합니다. 다음을 사용하여 양식의 각 요소를 반복 할 필요가 없습니다.

if(isset($_POST['element1']) || isset($_POST['element2']) || isset(...etc

이 질문을 작성하는 동안 훨씬 더 기본적인 해결책을 생각했습니다. 숨겨진 필드를 추가하여 확인할 수있는 플래그 역할을합니다.

내 자신의 깃발을 추가하는 것보다 '더 깨끗한'방법이 있습니까?


4
글쎄, 당신은이 같은 특정 남를 가지고 제출 '버튼을 만들 수있는 submited다음 PHP를 사용 if(isset($_POST['submited']))하거나 숨겨진 입력 ...
최대 앨런

2
양식에 대한 재생 공격을 방지하려면 nounce를 추가해야합니다.
hakre

답변:


191

POST조치 가 있는지 일반적인 확인을 위해 다음을 사용하십시오.

if (!empty($_POST))

편집 : 주석에서 언급 했듯이이 방법은 경우에 따라 작동하지 않습니다 (예 : 이름이없는 확인란 및 버튼 사용). 정말 다음을 사용해야합니다.

if ($_SERVER['REQUEST_METHOD'] == 'POST')


69

실제로 제출 버튼은 이미이 기능을 수행합니다.

양식에서 시도 :

<form method="post">
<input type="submit" name="treasure" value="go!">
</form>

그런 다음 PHP 핸들러에서 :

if (isset($_POST['treasure'])){
echo "treasure will be set if the form has been submitted (to TRUE, I believe)";
}

6
이것은 정답입니다. $ _POST를 확인하는 것만으로는 양식 게시물뿐만 아니라 여러 다른 위치에서 생성되었을 수 있으므로 충분하지 않습니다. 감사합니다 Tzshand.
Houston

이상적으로는 이제 if (null !== (filter_input(INPUT_POST, 'macaddress'))){filter_input을 사용하는 습관을 갖게하는 것을 사용해야합니다
depicus

2
POST는 제출 버튼이없는 Ajax로 수행 할 수 있으므로 범용 솔루션이 아닙니다.
Muhammad bin Yusrat 2015

사실입니다. AJAX에서 게시 한 모든 변수를 확인할 수도 있습니다.
Tzshand 2017-06-07

34

사용하다

if(isset($_POST['submit'])) // name of your submit button

1
가장 간단한 해결책. 모든 양식에는 제출 버튼이 있어야합니다!
안 트란

1
그러나 일부 양식에는 여러 단추가있을 수 있습니다.
Progrock 2017 년

2
때로는 형태의 자바 스크립트에 의해 작성 @rilwis 및 필요하지 않습니다 / A 제출 버튼이
Waqas 말리크


14

이 시도

 <form action="" method="POST" id="formaddtask">
      Add Task: <input type="text"name="newtaskname" />
      <input type="submit" value="Submit"/>
 </form>

    //Check if the form is submitted
    if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST['newtaskname'])){

    }

2
이 방법은 "코딩 아카데미"에서 "모범 사례"로 인정되는 것처럼 보이기 때문에 가장 권장되는 방법입니다.
Darkeden 2013 년

1

다른 참고로, 양식에 토큰을 추가하고 데이터가 외부에서 전송되지 않았는지 확인하기 위해 토큰을 확인하는 것도 항상 좋은 방법입니다. 단계는 다음과 같습니다.

  1. 고유 토큰 생성 (해시 사용 가능) 예 :

    $token = hash (string $algo , string $data [, bool $raw_output = FALSE ] );
  2. 이 토큰을 세션 변수에 할당하십시오. 전의:

    $_SESSION['form_token'] = $token;
  3. 숨겨진 입력을 추가하여 토큰을 제출하십시오. 전의:

    input type="hidden" name="token" value="{$token}"
  4. 그런 다음 유효성 검사의 일부로 제출 된 토큰이 세션 변수와 일치하는지 확인합니다.

    Ex: if ( $_POST['token'] === $_SESSION['form_token'] ) ....

0

나는 같은 문제가 있었다-또한 name=""입력 버튼 을 추가했는지 확인하십시오 . 글쎄, 그 수정은 나를 위해 일했습니다.

if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST['add'])){
    echo "stuff is happening now";
}

<input type="submit" name="add" value="Submit">

-6

다음을 사용할 수도 있습니다.

is_array($_POST)

4
is_array($_POST)항상 (내 컴퓨터에서) 사실을 제공합니다. 에 따르면 stackoverflow.com/questions/5594020/php-check-if-post-is-array~~V은 : $_POST is a superglobal array which is always defined, unless somewhere in your code you either unset or overwrite $_POST somehow, ..이 항상 true를 돌려 것으로 예상 것으로 보인다 때문에
GitaarLAB

is_array($_POST)양식이 제출되었는지 확인하는 방법은 확실히 아닙니다.
Lukas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.