양식의 변수를 유효성 검사 클래스에 전달해야하는지 여부를 결정하기 위해 양식이 제출되었는지 여부를 확인하는 가장 좋은 방법은 무엇입니까?
처음에는 다음과 같이 생각했습니다.
isset($_POST)
그러나 수퍼 글로벌이 모든 곳에서 정의되므로 항상 true를 반환합니다. 다음을 사용하여 양식의 각 요소를 반복 할 필요가 없습니다.
if(isset($_POST['element1']) || isset($_POST['element2']) || isset(...etc
이 질문을 작성하는 동안 훨씬 더 기본적인 해결책을 생각했습니다. 숨겨진 필드를 추가하여 확인할 수있는 플래그 역할을합니다.
내 자신의 깃발을 추가하는 것보다 ‘더 깨끗한’방법이 있습니까?
답변
POST
조치 가 있는지 일반적인 확인을 위해 다음을 사용하십시오.
if (!empty($_POST))
편집 : 주석에서 언급 했듯이이 방법은 경우에 따라 작동하지 않습니다 (예 : 이름이없는 확인란 및 버튼 사용). 정말 다음을 사용해야합니다.
if ($_SERVER['REQUEST_METHOD'] == 'POST')
답변
어때
if($_SERVER['REQUEST_METHOD'] == 'POST')
답변
실제로 제출 버튼은 이미이 기능을 수행합니다.
양식에서 시도 :
<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)";
}
답변
사용하다
if(isset($_POST['submit'])) // name of your submit button
답변
if ($_SERVER['REQUEST_METHOD'] == 'POST')
.
답변
이 시도
<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'])){
}
답변
다른 참고로, 양식에 토큰을 추가하고 데이터가 외부에서 전송되지 않았는지 확인하기 위해 토큰을 확인하는 것도 항상 좋은 방법입니다. 단계는 다음과 같습니다.
-
고유 토큰 생성 (해시 사용 가능) 예 :
$token = hash (string $algo , string $data [, bool $raw_output = FALSE ] );
-
이 토큰을 세션 변수에 할당하십시오. 전의:
$_SESSION['form_token'] = $token;
-
숨겨진 입력을 추가하여 토큰을 제출하십시오. 전의:
input type="hidden" name="token" value="{$token}"
-
그런 다음 유효성 검사의 일부로 제출 된 토큰이 세션 변수와 일치하는지 확인합니다.
Ex: if ( $_POST['token'] === $_SESSION['form_token'] ) ....