2011-10-24 3 views
10

테이블에서 일부 기존 데이터를 표시해야하지만 사용자가 편집하지 못하도록 비활성화해야했습니다. 그래서 내가 그들비활성화 된 양식 요소가 제출되지 않았습니다.

내가 양식을 제출

$form -> getElement("elementname") -> setAttrib("disable", true);를 비활성화, 나는 그것이 불가능했다해서, 폼 요소가 전혀 제출되지 않는다는 것을 발견했다. 비활성화 옵션 제거를 테스트했을 때이를 확인했습니다.

현재 무슨 일입니까? 내가 뭐 잘못하고 있니? 어떻게 해결할 수 있을까요?

+0

어쨌든이 방법은 사용자가 필드를 편집하지 않도록하는 올바른 방법이 아닙니다. 이 목표를 달성하려면 유효성 검사기를 추가해야합니다. –

+2

목표가 기존 데이터 만 표시하는 것이라면 다음과 같이하십시오. 양식 필드를 사용하지 말고 인쇄하십시오. –

답변

21

의도적으로 설계된 동작하지 않는 요소가 양식과 함께 제출되지 않습니다.

은 당신이하고있는 것은 최종 사용자가 편집 할 수있을 것입니다 상관없이 넣어에서 해당 양식에 무엇을 실제로 널 연습, 없습니다. 양식 입력 (숨겨진 필드조차도)이 위조되지 않도록 간단하게 신뢰할 수 없습니다.

가장 좋은 방법은 정보를 사용자에게 표시하고 양식을 제출 한 후 다시로드하는 것입니다. 최악의 경우 세션에 저장합니다.

1

숨겨진 요소를 사용하여 이러한 유형의 시나리오를 처리합니다. 비활성화 된 요소에있는 내용과 동일한 내용으로 숨겨진 요소를 추가하십시오. 양식이 전기되면 숨겨진 요소의 값을 사용하십시오.

양식을 제출하기 전에 Firebug 또는 다른 도구를 사용하여 숨겨진 요소의 값을 수정할 수 있다는 점에 유의하십시오. 처리하기 전에 항상 양식 값을 다시 확인하십시오.

+3

'항상 처리하기 전에 양식 값을 다시 확인하십시오. '양식을 제출 한 후에 값을 확인해야하는 경우 먼저 양식을 제출할 필요가 없습니다. – Dunhamzzz

17

이것은 나를 위해 매력처럼 일했습니다. 요소가 편집되지 못하게하고 게시물을 통과시킵니다.

$this->username->setAttrib('readonly', 'true'); 
+3

참고 : 선택한 입력 유형에 대해서는 작동하지 않습니다. –

+0

JavaScript는 여전히 읽기 전용 요소에 액세스하고 해당 값을 변경합니다. –

관련 문제