ドロップダウンリストのみのデータをコントローラーに送信し、ajaxを使用してデータベースに更新しますか?

2020-08-01 php ajax sqlite codeigniter

[ ここに画像の説明を入力してくださいこれは、sqlite3である私のDBからデータをフェッチしている私のビューテーブルです。同じページでテスト済みの列を更新したいので、ajax呼び出しを使用していますが、AJAX関数でデータを渡し、それをコントローラーにフェッチする方法がわかりません。

    <table class="table table-bordered table-striped" id="tab">
                            <thead>
                                <tr>
                                
                                    <th>Sr</th>
                                    <th>Type</th>
                                    <th>Software</th>
                                    <th>Owner</th>
                                    <th>Description</th>
                                    <th>Input</th>
                                    <th>Output</th>
                                    <th>Remarks</th>
                                    <th>Priority</th>
                                    <th width='60'>Test</th>
                                    <th width='60'>Implement</th>
                                    <th width='40'>Edit</th>
                                    <th width='40'>Delete</th>
                                </tr>
                                </thead>
                                <tbody>
                                <?php $counter =0; if(!empty($requirements)) { foreach($requirements as $requirement ) {  $counter++?>
                                <tr>
                                    <td> <?php echo $counter;?></td>
                                    <td><?php echo $requirement['type'];?></td>
                                    <td><?php echo $requirement['software'];?></td>
                                    <td><?php echo $requirement['owner'];?></td>
                                    <td><?php echo $requirement['description'];?></td>
                                    <td><?php echo $requirement['input'];?></td>
                                    <td><?php echo $requirement['output'];?></td>
                                    <td><?php echo $requirement['remarks'];?></td>
                                    <td><?php echo $requirement['pri'];?></td>
                                    <td>
                                    
                                    <?php
                                    $id=$requirement['req_id'];
                                    $selected=$requirement['tested'];
                                    $options=array('Tested','Not Tested');
                                    echo"<select class='' name='tested' id='tested' onChange='update(event,$id)'>";
                                    foreach($options as $option){
                                    if($selected==$option){
                                    echo"<option selected='selected' value='$option'>$option</option>";
                                    }
                                    else{
                                    echo"<option value='$option'>$option</option>";
                                    }
                                    }
                                    echo"</select>";
                                     ?>
                                    </td>
                                    <td><?php echo $requirement['implemented'];?></td>
                                    <td>
                                        <a class="btn btn-secondary" href="<?php echo base_url().'index.php/rest_req/edit/'.$requirement['req_id'];?>" >Edit</a>
                                    </td>
                                    <td>
                                        <a class="btn btn-danger" href="<?php echo base_url().'index.php/rest_req/deleteReq/'.$requirement['req_id'];?>"onclick="return confirm('Do you really want to delete this requirement?')" >Delete</a>
                                    </td>
                                </tr>
                                <?php } } else { ?>
                                <tr>
                                    <td colspan="13">No Requirements Found...</td>
                                </tr>
                                <?php } ?>
                                </tbody>
                            </table>

これが私のビューのajax呼び出しです。テストからデータをフェッチすることはできますが、それをajaxに渡す方法がわかりません

    function update(event,id){
           // console.log(event.target.value);
            var tested= event.target.value;
           // console.log(tested);
            var id=id;
            //console.log(id);
    
              $.post("<?php echo base_url().'index.php/rest_req/editS/'?>id",
             { 
                 dataType: 'text',
                data: tested:tested,
             });
        }

これはAJAXによって渡されているデータをフェッチしたい私のコントローラーです

     public function editS($req_id)
        {
            $this->load->model('rest_model');
            $requirement = $this->rest_model->getReq($req_id);
            $data = array();
            $data['requirement'] = $requirement;
            $test= Request.Form("tested");
            $formArray = array();
            $formArray['tested'] = $this->input->post('tested');
            $this->rest_model->updateS($req_id, $formArray);
            $this->session->set_flashdata('success', 'Requirement Updated successfully.');
        }

これは、これが正しいかどうかわからないデータを取得する私のモデルです

     public function updateS($req_id,$formArray){
            $this->db->where('req_id',$req_id);
            $this->db->update('req_data',$formArray);
        }

Answers

こんにちは、プラットフォームへようこそ!

ajaxを介してPOSTリクエストを行う方法はいくつかあります。 1つの方法は次のようなものです。

$.post(
        "http://someurl",
        { 
            field1: value1,
            field2: value2
        },
        function (responseData) {
            console.log(responseData);
        }
);

dataパラメータ内にデータを挿入しようとするときを除いて、それはあなたがそれを試した方法とほとんど同じです。この方法を使用する場合、それを行う必要はありません。

あなたのケースの正しいコードは次のようになります:

function update (event,id) {
        // console.log(event.target.value);
        var tested= event.target.value;
        // console.log(tested);
        var id=id;
        //console.log(id);
    
        $.post(
            "<?php echo base_url().'index.php/rest_req/editS/'?>id",
            {
                tested: tested,
            }
        );
}

もう1つの方法はより高度で、次のようになります。

$.ajax({
    url: "http://someurl",
    type: "POST",
    data: {
        field1: value1,
        field2: value2
    },
    success: function (responseData) { console.log(responseData); },
    dataType: "text"
});

したがって、あなたの場合は次のようになります:

function update(event,id){
        // console.log(event.target.value);
        var tested= event.target.value;
        // console.log(tested);
        var id=id;
        //console.log(id);
    
        $.ajax({
            url: "<?php echo base_url().'index.php/rest_req/editS/'?>id",
            type: "POST",
            data: {
                tested: tested
            },
            success: function (responseData) { console.log(responseData); },
            dataType: "text"
        });
}

そのメソッドの1つを使用した後、コントローラーでtested値を取得する必要があります。

$tested = $_POST['tested];

Related