2010-04-18 4 views
8

현재 양식을 디자인 할 때 제출 단추의 이름을 양식의 ID와 동일하게 유지하려고합니다. 그럼, 내 PHP에서, 나는 단지 if(isset($_POST['submitName'])) 양식을 제출하고 어떤 양식이 제출되었는지 확인하기 위해 할.제출 된 양식을 확인하는 가장 좋은 방법은 무엇입니까?

첫째,이 방법으로 보안 문제 또는 디자인 결함이 있습니까?

내가 만난 한 가지 문제는 사용자에게보다 빠른 유효성 검사를 제공하기 위해 자바 스크립트로 양식을 오버레이하려는 경우입니다. 예를 들어 분명히 서버 측 유효성 검사를 유지해야하지만 입력을 흐리게하면 오류 메시지가 인라인으로 표시되는 경우 사용자에게 더 편리합니다. 또한 제출 버튼을 클릭하면 전체 양식 유효성 검사를 제공하는 것이 좋습니다.

따라서 사용자가 양식의 제출 단추를 클릭하면 유효성 검사가 통과 될 경우 기본 작업을 중지하고 유효성 검사를 수행 한 다음 전통적인 제출 기능을 다시 시도합니다. 이렇게하려면 form.submit() 메서드를 사용하고 있지만 불행하게도 submitmit 변수를 보내지는 않습니다 (버튼을 클릭하지 않고도 form.submit()을 호출 할 수 있어야 함). 이것은 내 PHP 스크립트가 양식이 제출되었음을 감지하지 못함을 의미합니다.

이 문제를 해결하는 올바른 방법은 무엇입니까? 표준 해결책은 양식의 ID 이름을 가진 유효성 검사를 통과 할 때 양식에 숨겨진 필드를 추가하는 것입니다. 그런 다음 form.submit()이 호출되면 제출 단추 대신 전달됩니다. 그러나이 솔루션은 나에게 매우 비관적 인 것처럼 보입니다. 그렇다면 다음을 수행해야하는지 궁금합니다.

a) 제출 단추를 전달하는 것에 의존하지 않는 양식이 제출되었는지 검색하려면 대체 방법을 사용하십시오. 그렇다면 대체 무엇입니까? 분명히 처음부터 여분의 숨겨진 필드를 갖는 것만으로는 더 좋지 않습니다.

b) 비 Javascript 디자인을 유지할 수있는 대체 Javascript 솔루션을 사용하십시오. 예를 들어, form.submit() 대신에 여분의 데이터를 전달할 수있는 대안이 있습니까?

c) 빨아 들이고 자바 스크립트를 사용하여 숨겨진 필드를 삽입하십시오.

업데이트 : 정답을 받아 들였지만 여기서 실수를 분명히하고 다른 사람들에게 도움이 될 수 있도록했습니다. 나는 Mootools를 사용하고 매우 순진하게 addEvent ('submit'...)를 사용했을 때 즉시 from event.stop()을 호출하여 from이 제출되지 않도록해야한다고 생각했습니다. 사실 이것은 사실이 아니며 유효성 검사가 실패 할 경우에만 event.stop()을 호출 할 수 있습니다. 그렇지 않으면 기본 제출이 평소와 같이 시작되고 form.submit()을 사용하면 완전히 불필요하게됩니다.

+0

저희 팀은 현재이 방법을 사용하고 있습니다. 양식에 제출 버튼이 있어야하므로 양식이 마음에 들지 않습니다. 이것을 구현 한 사람들은 다른 팀으로 옮겼습니다. 나와 다른 팀원이 왜 우리 양식이 제출되지 않았는지 알아내는 것이 힘들었습니다. 그런 다음 검증을 위해 제출 버튼이 필요하다는 것을 깨달았습니다. – b01

답변

6

양식을 action=file1.phpaction=file2.php으로 다른 처리기로 보낼 수 있습니다.

동일한 코드를 사용하여 처리됩니까? 이 파일을 별도의 파일에 넣고 공통점을 포함하고 각 처리 파일에 고유 비트를 작성합니다. 해킹하거나 조직하지 마십시오.

자바 스크립트 유효성 검사를위한

대신 이렇게, 기본 동작은 다음 다시 중단하지 않습니다

if (validation != valid) { 
    return false; 
} 
JS 경우 그 방법은 전원을 끄거나 검증이 실패 양식 액션/이벤트가 그대로이고

그 예상 한대로 동작하고, 그렇지 않으면 문제가됩니다. 확실히 서버 측 유효성 검사를 유지해야합니다. 이것이 "실제"유효성 검사이며 클라이언트 측은 사용자를 기쁘게하고 시간을 절약 할 수 있습니다.너를 위해서 그것을 의지하지 마라.

+0

나는 결국이 스크립트를 "올바른"대답으로 선택했기 때문에 투표했습니다. 심지어 빠른 스크립트를 함께 또는 몇 가지 제약 조건/마감 시간에 해킹하기 때문에 때때로 사용하지 않더라도, 좋은 습관을 아는 것이 좋다. –

+0

고마워요! 고맙습니다! 이것은 완벽 해. 내 실수는 자바 스크립트 onsubmit을 실행하기 위해 즉시 기본 제출 작업을 중단해야한다고 생각했습니다. 대신, 나는 단지 내가 원하는 것을 다 할 수 있으며, 그 양식은 모든 코드 뒤에 제출된다. 따라서 실패한 유효성 검사를 테스트 할 수 있으며,이 경우 기본값을 방지 할 수 있습니다. 이것은 form.submit()이 필요 없다는 것을 의미합니다. 아주 좋아! –

+0

위대한, 다행 그것은 도움이! 그것이 완료 될 때까지, 때때로 "다른"방법을 생각하는 것이 어렵습니다. –

3

get 키/값을 추가하기 위해 양식의 동작을 사용자 지정할 수 있습니다. action="formhandle.php?formid=10"

+0

Alex Mcp가 최고의 요리법을 가지고 있습니다. 그러나 나는 이것이 일을 돌보는 좋은 빠른 방법이라는 데 동의한다. 이 상황이 생겼을 때, 나는 이런 식으로 GET을 시도했다. 결국 모든 것을 POST로 유지하는 것이 더 깔끔하다는 결론을 얻었습니다. – Smandoli

+0

흥미롭게도, 방금 RESTful 개념을 검토하고 원칙적으로 GET은 '검토'정보 용이고 POST는 대화식 또는 '편집'작업용이라는 것을 알게되었습니다. 나는 얼마나 많은 사람들이 이것에 가입하는지 또는 그것을 준수하는지 모른다. (죄송합니다. 현재 소스 코드를 링크 할 수 없습니다.) – Smandoli

+0

Alex Mcp 솔루션을 사용하면 여전히 액션이 바뀌기 때문에 코드를 옮기는 것이 좋습니다. 왜 코드를 동일하게 유지하고 동작을 변경하는 것이 좋을까요? GET이 검토 용이면 +1. 게다가 이것은 더 간단하고 솔직합니다. – b01

관련 문제