0

私の問題を解決する方法を見つけるのを手伝ってもらえますか?

4つのテキストボックスフィールドがあります:number、、、。keyfirstnamename

入力後に数値フィールドから集計するときに、この数値が存在するかどうかをデータベースで確認したいと思います。

その場合、アプリケーションは(データベース内の)番号にリンクされている名前と名を選択し、他のフィールドの名前と名を入力してから、これらのフィールドを無効にする必要があります。

私はajaxを使うべきだと思いますが、ajaxとZendを使ってそれを実現する方法がわかりません。

Webを検索したところ、理解できないチュートリアルがいくつか見つかりました。

それを行うためのステップバイステップの方法を教えていただけますか?

ありがとう

4

2 に答える 2

1

一般的なブラシストロークのみ:

  1. を使用して標準的な方法でフォームを生成しますZend_Form
  2. クライアント側 (たとえば、jQuery を使用) で、onchange ハンドラーを数値フィールドにアタッチします。
  3. checkNumberExistsAction()onchange ハンドラーは、db ルックアップを実行するようなものと呼ばれるアクションへの AJAX 呼び出しを行います。チェックの結果を含む JSON 形式の情報を返します。
  4. 次に、AJAX 呼び出しの成功関数は、返された結果をチェックし、他の要素を設定して無効にします。

覚えておくべきこと: 無効なフィールドの送信を防ぐために、このクライアント側の処理だけに依存しないでください。ユーザーはクライアント側でスクリプトを無効にできるため、サーバー側の検証も必ず実施してください。

于 2012-01-11T06:17:51.373 に答える
0

私は@Davidのアプローチに完全に同意し、同じことを記念して、このスケルトンコードを投稿します:

sampleview.phtml

echo '<div id="a">'.$this->form.'</div>';

<?php $this->jQuery()->onLoadCaptureStart(); ?>
jQuery('#category').change(checkNumberExistsAction);
<?php $this->jQuery()->onLoadCaptureEnd(); ?>


<script type="text/javascript">
    function checkNumberExistsAction(){         
    var p = $("#idOfNumberField").val();
    var response =   $.ajax({
        url: "<?php echo $this->url(array('controller'=>'index',
'action'=>'sampleview')) ?>", 
        type: "GET",       
        data: {number: p}, //where number is number columnName in database
        cache: false,
        success: function(text){
           response = text;
            $("#name").val($(text).find("input[name='name']").val());  //where name is id of name field
            $("#name").attr("disabled", "disabled");
            $("#firstName").val($(text).find("input[name='firstName']").val());  //where firstName is id of first name field
            $("#firstName").attr("disabled", "disabled");            
},
error: function(){ alert('Something went wrong.'); }
    });
}
</script>

IndexController.php

public function sampleviewAction(){
    if ($this->getRequest()->isXmlHttpRequest()){
        $id = $this->_getParam('number', 0);
        if ($id > 0){
        $albums = new Application_Model_DbTable_Albums();
        $form->populate($albums->getAlbum($id));}       
        }
}

Modelsampleview.php

public function getAlbum($id){
    $id = (int)$id;
    $row = $this->fetchRow('e_recNo = ' . $id);
    if (!$row){
    throw new Exception("Could not find row $id");
    }
    return $row->toArray();
}
于 2012-07-31T23:50:12.247 に答える