PHP는 사용자가 Enter 키 또는 제출 버튼을 누르 었는지 어떻게 결정할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/795132

  •  18-09-2019
  •  | 
  •  

문제

내가 가진 문제는 단일 형식의 여러 제출 입력이 있다는 것입니다. 이 제출 입력은 각각 다른 값을 가지며 제출로 유지하는 것을 선호합니다.

사용자가 누를 때마다 입력하다, 마치 최상위 제출 입력이 눌려있는 것처럼 보이므로 클릭 한 입력을 검사하는 데 문제가 발생합니다.

PHP가 입력이 클릭되었는지 여부를 결정하는 방법이 있습니까? 입력하다 열쇠?

도움이 되었습니까?

해결책

HTML을 올바르게 구조화 한 경우 사용 된 버튼을 식별 할 수 있습니다.

<input type="submit" name="action" value="Edit">
<input type="submit" name="action" value="Preview">
<input type="submit" name="action" value="Post">

그만큼 $_POST 배열 (또는 $_GET/$_REQUEST)에는 제정 된 버튼의 값 (클릭 여부에 관계없이)이있는 키 "조치"가 포함됩니다.

이제 "클릭"은 명시 적으로 클라이언트 측 동작입니다. 클릭과 키 프레스를 구별하려면 그 결정을 돕기 위해 양식에 스크립팅을 추가해야합니다.

편집하다

또는 "몰래"가 될 수 있으며 제출을위한 키를 올바르게 식별 해야하는 숨겨진 제출물을 사용할 수 있지만 이는 아마도 접근성에 큰 영향을 미칩니다.

<?php

if ( 'POST' == $_SERVER['REQUEST_METHOD'] )
{
    echo '<pre>';
    print_r( $_POST );
    echo '</pre>';
}

?>
<form method="post">

    <input type="text" name="test" value="Hello World">

    <input type="submit" name="action" value="None" style="display: none">
    <input type="submit" name="action" value="Edit">
    <input type="submit" name="action" value="Preview">
    <input type="submit" name="action" value="Post">

</form>

다른 팁

로베르토,

PHP는 서버 측 기술이므로 서버에서 실행되므로 클라이언트에서 어떤 키를 누르는 지 (일명 사용자)를 결정할 방법이 없습니다. 즉, 귀하는 서버 요청에 해당 정보를 포함하도록 클라이언트 측을 구체적으로 코딩하지 않는 한 (양식 데이터를 게시하는 경우도 요청의 형태이기도합니다).

이를 달성하는 한 가지 방법은 클라이언트 코드에서 JavaScript를 사용하는 것입니다.

이 페이지를 JavaScript를 사용하여 이벤트 제출 이벤트 처리에 관한 시작점으로보십시오.http://www.w3schools.com/jsref/jsref_onsubmit.asp

Enter 키를 누른 다음이 정보를 녹음하려면 페이지의 키 프레스 이벤트에 대한 리스너를 추가해야 할 수도 있습니다.http://www.howtocreate.co.uk/tutorials/javaScript/domevents JavaScript에서 이벤트 리스너를 추가/제거하는 주제에 대한 토론을 제공하지만 이벤트를 사용할 때 매우 조심해야합니다. 부적절하게 사용하기 때문에 메모리 누출의 원인이 될 수 있기 때문에 디버깅하기 어려운 메모리 누출 소스가 될 수 있기 때문입니다. :)

PHP만으로는 양식 제출 이벤트가 트리거 된 방법을 결정할 수 없습니다. PHP는 서버 측 언어이기 때문에 클라이언트 측에서 발생하기 때문입니다. 주요 프레스 및 마우스 클릭을 듣고 서버 측에 로그인 한 다음 해당 데이터를 분석하여 원하는 것을 찾으려면 JavaScript를 구현해야합니다.

이제 PHP가 말할 수 있습니다 어느 제출 입력은 양식 데이터에 나타나는 반면 다른 사람들은 그렇지 않기 때문에 트리거되었습니다. 대부분의 브라우저는 첫 번째 브라우저를 기본값을 입력합니다 ( 입력하다 키 누름). 제출이 트리거 된 제출을 제어하기 위해 모든 제출물을 다시 주문할 수 있습니다.

PHP는 클라이언트 측에서 무슨 일이 있었는지 실제로 알 수 없습니다.

JavaScript를 사용하는 것이 좋습니다. 사용자가 작업을 수행 할 때, 그것을 잡아서 양식으로 제출 될 숨겨진 필드에 보관하십시오. 또한 활성화 된 입력을 추적하고 숨겨진 필드에 저장할 수도 있습니다.

코드는 조금 비슷합니다 (구문을 확인하지 않았습니다)

<input type="text" onfocus="setCurrent(this)" id="1" />
<input type="hidden" id="hid" />

function setCurrent(o){
  $('hid').value = o.id;
}

나는 이벤트를 잡고 숨겨진 들판을 가지고 놀면 당신이 원하는 결과를 얻을 수 있다고 생각합니다.

도움이되기를 바랍니다

클라이언트쪽에 마크 업을 작성하는 방법입니다.

예를 들어 다음은 다음을 수행 할 수있는 방법 중 하나입니다.

HTML 파일에서 :

<form method="post" action="myform.php" id="myform">
  ... form items here ...

<input type="submit" name="enter_key" value="true" style="display:none">
<input type="hidden" name="pressed_button" id="pressed_button" value="false">
<input type="button" value="Submit"
  onclick="document.getElementById('pressed_button').value='true';document.getElementById('myform').submit();">
</form>

myform.php :

if ($_POST['pressed_button']=='false') {
   // Logic for enter key
} else {
   // Logic for button press
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top