2011-10-24 36 views
10

既存のデータをテーブルから表示する必要がありましたが、ユーザーが編集できないように無効にする必要がありました。だから私は彼ら無効なフォーム要素が送信されていません

私はフォームを送信

$form -> getElement("elementname") -> setAttrib("disable", true);を無効にして、私はそれが無効になっていたという理由だけで、フォーム要素が全く提出されないこと、が分かりました。無効化オプションを削除してテストしたところ、これを確認しました。

何が起こっていますか?何か間違っているのですか?これを解決するには?

+0

これは、ユーザーがフィールドを編集しないようにする正しい方法ではありません。この目標を達成するためにバリデーターを追加する必要があります。 –

+2

既存のデータだけを表示することを目標にしている場合は、それを印刷してください:フォームフィールドをまったく使用しないでください。 –

答えて

21

これは仕様によるもので、無効な要素はフォームと共に送信されません。

何がやっていることは、実際にnullの練習で、どんなにあなたがプットにそのフォームに何をすべきか、それは、エンドユーザーが編集可能になります。フォームの入力(隠されたフィールドでさえ)が改ざんされないように単純に信じることはできません。

あなたの最善の策は、ユーザーに情報を表示し、フォームが送信された後に再度読み込むことです。最悪の場合はセッションでそれを保存します。

1

これらのタイプのシナリオは、隠し要素を使用して処理します。あなたの無効になった要素にあるのと同じ内容の隠し要素を追加してください。フォームが転記されたら、隠し要素の値を使用します。

慎重に、フォームを送信する前にFirebugまたは他のツールを使用して非表示要素の値を変更できることに注意してください。処理する前に必ずフォームの値を再度確認してください。

+3

'常に処理前にフォーム値を再度チェックする 'フォームを送信した後に値をチェックしなければならない場合は、最初に送信する必要はありません。 – Dunhamzzz

17

これは私の魅力のように機能しました。 要素が編集されないようにし、要素を投稿に渡します。

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

注:これは選択入力タイプでは機能しません –

+0

JavaScriptは引き続き読み取り専用要素にアクセスし、その値を変更できます。 –

関連する問題