source

PHP 폼 제출에서 어떤 버튼을 클릭했는지 어떻게 알 수 있습니까?

nicesource 2023. 1. 8. 14:36
반응형

PHP 폼 제출에서 어떤 버튼을 클릭했는지 어떻게 알 수 있습니까?

페이지에 여러 개의 버튼이 있지만 어떤 버튼이 클릭되었는지 알 수 없습니다.여기 두 버튼의 마크업이 있습니다.

<input type="submit" id="btnSubmit" value="Save Changes" />
<input type="submit" id="btnDelete" value="Delete" />

다음과 같은 HTML 양식 사용:

<input type="submit" name="btnSubmit" value="Save Changes">
<input type="submit" name="btnDelete" value="Delete">

(사용)<form method=POST)

사용하는 PHP 코드는 다음과 같습니다.

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  // Something posted

  if (isset($_POST['btnDelete'])) {
    // btnDelete 
  } else {
    // Assume btnSubmit 
  }
}

HTML 소스 코드 형식으로 표시되는 첫 번째 제출 버튼을 항상 가정하거나 기본값으로 설정해야 합니다.실제로 다음과 같은 경우 다양한 브라우저는 투고 데이터와 함께 제출 버튼의 이름/값을 확실하게 전송합니다.

  1. 사용자는 말 그대로 마우스 또는 포인팅 디바이스를 사용하여 [Submit]버튼을 클릭한다.
  2. 또는, 송신 버튼에 포커스가 설정되어 있는 경우(탭에 탭 되어 있는 경우), 키를 누릅니다.

폼을 송신하는 다른 방법이 있어, 일부의 브라우저/버전에서는, 이러한 상황의 일부에서는, 송신 버튼의 이름/값을 송신하지 않는 경우가 있습니다.를 들어, 많은 사용자는 커서/포커스가 텍스트 필드에 있을 때 키를 눌러 양식을 제출합니다.폼은 JavaScript를 통해서도 제출할 수 있습니다.또, 보다 불명확한 메서드도 있습니다.

이 세부 사항에 주의를 기울이는 것이 중요합니다.그렇지 않으면 사용자가 폼을 제출해도 "아무 일도 일어나지 않고" 폼 제출을 코드 검출에 실패했기 때문에 데이터가 손실될 수 있습니다.이는 전송 버튼의 이름/값이 포스트 데이터와 함께 전송되지 않을 수 있기 때문입니다.

, 디폴트의 송신 버튼을 항상 상정하고 있기 때문에, 1 의 송신 버튼이 있는 폼에도 상기의 어드바이스를 사용할 필요가 있습니다.

인터넷이 폼 핸들러 튜토리얼로 가득 차 있고, 그 대부분은 제출 버튼의 이름과 값을 확인하는 것 밖에 하지 않는다는 것을 알고 있습니다.하지만, 그들은 완전히 틀렸어요!

편집: 더 많은 예를 들어보겠습니다.

3+ 버튼 형식:

<input type="submit" name="btnSubmit1" value="1">
<input type="submit" name="btnSubmit2" value="2">
<input type="submit" name="btnSubmit3" value="3">

php:

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  // Something posted

  if (isset($_POST['btnSubmit3'])) {
    // btnSubmit3 
  } else if (isset($_POST['btnSubmit2'])) {
    // btnSubmit2 
  } else {
    // Assume btnSubmit1 
  }
}

단일 버튼 형식:

<input type="submit" name="btnSubmit1" value="1">

php:

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  // Something posted

  // Assume btnSubmit1 
}

모든 경우 폼의 html에 표시되는 번째 제출 버튼은 다른 버튼을 검출할 수 없는 클릭한 버튼이라고 가정할 수 있습니다.폼의 뒷부분에 표시되는 버튼만 명시적으로 테스트해야 합니다.

즉, 송신자로서 다른 버튼을 검출할 수 없는 한, 첫 번째 버튼은 항상 폼 송신자로 간주됩니다.

★★는?<form method="GET"
「 」를 할 수 $_SERVER['REQUEST_METHOD'] === 'POST'를은, 가 인 것이 입니다.「 POST 」 、 「 POST 」 、 「 POST 」 、 「 GET 」 사용해서요.$_SERVER['REQUEST_METHOD'] === 'GET'하지 않을 수 수 없습니다.는 브라우저가 에 어느 입니다.

하지만, 할 수 은 GET을 추가하는 입니다.<input type=hidden name=submitted value=1>변환하고 , 「」를 사용하는 에, 「」를 사용합니다.if ($_SERVER['REQUEST_METHOD'] === 'POST') 하다if (isset($_GET['submitted']))폼의 제출을 검출합니다.어느 버튼을 눌렀는지를 검출하는 코드는, POST 때와 같은 상태로 있습니다.

다음 중 하나:
이 전략은 뛰어난 브라우저 지원을 제공하며 브라우저 고유의 동작이나 새로운 html5 기능에 의존하지 않습니다.2000년대 초반부터 현대 브라우저와 고대 브라우저 모두에서 제대로 작동해야 합니다.또한 php 코드 로직은 까다롭거나 php 고유의 동작에 의존하지 않기 때문에 다른 언어에 쉽게 적응할 수 있습니다.

HTML의 경우:

<input type="submit" id="btnSubmit" name="btnSubmit" value="Save Changes" />
<input type="submit" id="btnDelete" name="btnDelete" value="Delete" />

PHP의 경우:

if (isset($_POST["btnSubmit"])){
  // "Save Changes" clicked
} else if (isset($_POST["btnDelete"])){
  // "Delete" clicked
}

각 버튼에 이름 속성을 지정하기만 하면 됩니다.그리고 PHP 스크립트에서 각 버튼 누름에 대처해야 합니다.하지만 각각의 버튼에 고유한 이름을 붙이도록 주의하세요.PHP 스크립트는 대부분의 경우 이름만 처리하기 때문에

<input type="submit" name="Submit_this" id="This" />

php 또는 javascript 중 어느 쪽을 원하십니까?

php로 되어 있는 경우 이름을 지정하고 post 또는 get 메서드를 사용합니다.그 후 isset 옵션을 사용하거나 특정 버튼 이름을 해당 값으로 체크합니다.

js에 있는 경우 getElementById를 사용합니다.

언급URL : https://stackoverflow.com/questions/2680160/how-can-i-tell-which-button-was-clicked-in-a-php-form-submit

반응형