2016-06-15 29 views
0

私はCodeIgniterプロジェクトを持っています "アップグレード"したいです:) 私はテーブルから値を(主キー)を選択して、そのレコード。現在、私は選択のためのドロップダウンメニューと同じページにデータを表示するクエリを開始するためのボタンを使用しています。複数のテキストボックスをドロップダウンから読み込む - CodeIgniter/PHP

claim_id - primary key 
repair_type 
type 
block 
condition 
defect 
symptom 
repair 
addition 

マイモデル:

class Claim_m extends MY_Model 
{ 
    protected $_table_name = 'claim';    
    protected $_order_by = 'repair_type';    
    protected $_primary_key = 'claim_id'; 

    public function __construct() 
    { 
    parent::__construct(); 
    } 

    public $rules_claim = array(
    'repair_type'=>array(
     'field'=>'claim_id', 
     'label'=>'ID Claima', 
     'rules'=>'required' 
     ) 
    ); 

    public function daj_dropdown() //creates dropdown 
    { 
     $rezultat = $this->db->select('claim_id,repair_type')->get('claim')->result_array(); 
     $dropdown = array(); 
     foreach($rezultat as $r) 
     { 
      $dropdown[$r['claim_id']] = $r['repair_type']; 
     } 
     return $dropdown; 
    } 
} 

マイコントローラー:

class Claims extends Frontend_Controller 
    { 
     public function __construct() 
     { 
      parent::__construct(); 
      $this->load->model('claim_m'); 
     } 


     public function choice() 
     { 
      //validation 
      $rules = $this->claim_m->rules_claim; 
      $this->form_validation->set_rules($rules); 

      if($this->form_validation->run() == TRUE) 
      { 
       $claim_id = $this->input->post('claim_id'); 
       $this->data['zapisi'] = $this->claim_m->daj($claim_id,TRUE); 
      } 

      //dropdown 
      $this->data['dropdown'] = $this->claim_m->daj_dropdown(); 

      //set subview 
      $this->data['subview'] = 'claim/zapis'; 


      $this->load->view('_main_layout', $this->data); 
     } 
    } 

マイビュー(zapis.php):

<?php echo form_open();?> 
    <table class="table"> 
     <tr> 
      <td>Type of repair:</td> 
      <td><?php echo form_dropdown('claim_id',$dropdown); ?></td> 
     </tr> 
     <tr> 
      <td></td> 
      <td><?php echo form_submit('submit', 'Izaberi', 'class="btn btn-primary"'); ?></td> 
     </tr> 
    </table> 
<?php echo form_close(); ?> 

<?php 
    if(!isset($zapisi)) 
    { 
     echo 'no records'; 
    } 
    else 
    { ?> 
     <section> 
      <h2>Claim pattern - <u> <?php echo($zapisi->repair_type); ?> </u></h2> 


      <i>Defect type: </i><font color="red"><?php echo($zapisi->type); ?></font></br> 
      <i>Defect block: </i><font color="red"><?php echo($zapisi->block); ?></font></br> 
      <i>Condition code: </i><font color="red"><?php echo($zapisi->condition); ?></font></br> 
      <i>Defect code: </i><font color="red"><?php echo($zapisi->defect); ?></font></br> 
      <i>Symptom code: </i><font color="red"><?php echo($zapisi->symptom); ?></font></br> 
      <i>Repair code: </i><font color="red"><?php echo($zapisi->repair); ?></font></br> 
      <i>Other: </i></br><font color="red"><?php echo($zapisi->addition); ?></font></br> 
     </section> 
    <?php } ?> 
表には、以下のフィールドがあります

このすべてはうまく動作します。しかし、私はビュー上にボタンなしで作る必要があります。基本的には、ボタンを押さなくてもドロップダウンメニューで選択が変更されると、他のすべてのフィールドを書き留める必要があります。私は1つのフィールドが必要なときにチュートリアルを見つけましたが、私は(ドロップダウンメニューの変更後)MySQLデータベーステーブル(タイプ、ブロック、状態、欠陥、症状、修理、追加)から7つのフィールドを提示する必要があります。

jQueryやAjaxについてよく分かりませんが、私はこのようなものに必要と思われます。もし誰かがこれを手伝ったり、正しいチュートリアルを教えてくれたら、私は感謝しています。 ありがとうございます!

編集:関数DAJ()MY_Model

public function daj($id = NULL, $single = FALSE) 
     { 
      if ($id != NULL) 
      { 
       $filter = $this->_primary_filter; 
       $id = $filter($id); 
       $this->db->where($this->_primary_key,$id); 
       $method = 'row'; 
      } 
      elseif($single == TRUE) 
      { 
       $method = 'row'; 
      } 
      else 
      { 
       $method = 'result'; 
      } 

      $this->db->order_by($this->_order_by); 
      return $this->db->get($this->_table_name)->$method(); 
     } 
+0

あなたの質問を編集し、モデルコードに 'claim_m-> daj()'を含めてもよろしいですか? – DFriend

+0

こんにちはDFriend私はそれを追加しました。 – DigitalMandrake

+0

あなたが知っていることは、ボタンをクリックしてフォームを送信して、更新時にデータを表示することですか?ページを過負荷にすることなくやり直したいのですか、リロードはうまくいきますか?ドロップダウンの変更をトリガーしたいだけですか? – trajchevska

答えて

0

からのドロップダウン変動に関するデータを取得したい場合は、ページをリロードすることなく、あなたが非同期呼び出しで行かなければなりません。 jQuery AJAXを使用することをお勧めします。hereのドキュメントをチェックできます。

以下の例を確認してください。リクエストの詳細は、ajaxに送信されるオブジェクトに設定されていますが、それはかなり簡単です。データはオブジェクトとして送信されますが、$('#form_id').serialize()をデータとして渡すことでフォーム全体を送信することもできます。

doneメソッドでは、応答として送信されたデータ(この例ではmsg)をキャッチし、必要に応じて使用できます。

$.ajax({ 
    method: "POST" 
    url: "test.html", 
    data: {field1:'Field1', field2:'Field2'} 
}).done(function(msg) { 
    console.log(msg); 
}); 

この問題に戻ってください。この種のスニペットは、URLをコントローラの機能に設定する必要があります。 ajaxに送るべきデータは、ドロップダウンボックスの値です。フィールドのIDが 'dropdownId'であるとします。その後、データはdata: {selection: $('#dropdownId').val() }になります。

これで、コントローラの応答を調整するだけで、JavaScriptを読み込めるようにエコーする必要があります。

JSONを返してフロントエンドで解析することをお勧めします。返すすべてのフィールドを含む配列を作成し、それをコントローラーのJSONでエンコードしてエコーすることができます。

$arr = ['field1' => 'Val1', 'field2' => 'Val2']; 
echo json_encode($arr); 

その後、あなたのAJAX呼び出しの行わ機能では、あなたが持っているでしょう:

var obj = JSON.parse(msg); 

そして、あなたのようなフィールドにアクセスすることができます

obj.field1, obj.field2... 

を次に、あなただけの必要がありますフィールドの値を設定します(IDはfield1、field2など)。

$('#field1').val(obj.field1); 
$('#field2').val(obj.field2); 
... 
0

これは、ドロップダウンが変更されたときにJQueryを使用して新しいHTMLをリクエストする方法の1つです。

コントローラにClaims.php

public function new_select() { 
    $claim_id = $this->input->post('claim_id'); 
    $data['zapisi'] = $this->claim_m->daj($claim_id, TRUE); 
    //output the sub-subview it will be recieved by the ajax success function 
    $this->load->view('claim_detail', $data); 
} 
new_select()

この機能を追加するには、後記のjQueryのAJAX呼び出しで使用されるであろう。

変更id属性がドロップダウンに追加されたビューファイルzapis.php

<div>Type of repair:</div> 
<div> 
    <?php echo form_dropdown('claim_id', $dropdown, NULL, array('id' => 'repair_select')); ?> 
</div> 
<section id="repair-detail"> 
    <?php 
    $this->load->view('claim_detail'); 
    ?> 
</section> 

これに。また、上の図は、新しいビューファイルであるサブサブビュー( claim_detail.php)をロードします。

<h2> 
    Claim pattern - <u><?php echo isset($zapisi) ? $zapisi->repair_type : "No Repair type selected"; ?></u> 
</h2> 
<div><?php 
    if(isset($zapisi)) 
    { 
    ?> 
    <i>Defect type: </i><font color="red"><?php echo $zapisi->type; ?></font><br> 
    <i>Defect block: </i><font color="red"><?php echo $zapisi->block; ?></font><br> 
    <i>Condition code: </i><font color="red"><?php echo $zapisi->condition; ?></font><br> 
    <i>Defect code: </i><font color="red"><?php echo $zapisi->defect; ?></font><br> 
    <i>Symptom code: </i><font color="red"><?php echo $zapisi->symptom; ?></font><br> 
    <i>Repair code: </i><font color="red"><?php echo $zapisi->repair; ?></font><br> 
    <i>Other: </i><br><font color="red"><?php echo $zapisi->addition; ?></font><br> 
    <?php 
    } 
    ?></div> 

<script> 
    $(document).ready(function() { 
    //handle changes to the dropdown 
    $("#repair_select").on('change', function (event) { 
     $.ajax({ 
     type: 'POST', 
     url: "claims/new_select", 
     data: {claim_id: $(this).val()}, //send new select id to server 
     dataType: 'html', 
     success: function (returned) { 
      //replace the html inside <section id="repair-detail"> with the returned html 
      $("#repair-detail").html(returned); 
     } 
     }); 
    }); 
    }); 
</script> 

新しいビューには、ドロップダウン変更イベントを処理するjavascriptがあります。基本的には、ドロップダウンの変更が通知され、新しく選択されたclaim_idがコントローラの機能new_selectに送信されます。コントローラの機能は、データベースの値が入力されたhtmlを返信します。 ajax関数success:は、htmlの<section id="repair-detail">returned htmlに置き換えます。このページは新しいコンテンツで動的に更新されます!

私はこれをテストしませんでしたので、構文エラーを許してください。しかし、このコンセプトは健全であり、この種の状況に対する非常に一般的な解決策です。

+0

私はこれを試して、報告します、ありがとう! – DigitalMandrake

+0

JQueryの読み込み方法については何をカバーしていませんか?私はあなたにそれを残すでしょう。 – DFriend

+0

うまく動作します(URLクレームでのみ1つの小さな修正/は不要です)。非常に非常に非常にありがとう! – DigitalMandrake

関連する問題