首页 > 解决方案 > 有没有办法显示与另一个表的主键相关的外键数据?

问题描述

我正在制作一个测验应用程序后端模块。我正在尝试编辑问题和答案,如何编辑问题并且该相关问题的答案将显示?

我有两张桌子questionsanswers一张桌子。

问题表结构

id|question

答案表结构

id| answer|question_id

所以question必须连接表才能question_id获取它的答案。

现在我有这个错误,如果我点击任何我想编辑的问题会显示所有答案,即使该特定答案与问题无关。

应用程序的错误或问题,请参阅

这个控制器将调用模型

public function editPost(){
    $result = $this->post_model->showEditPost();
    echo json_encode($result);
}

该模型查询它以显示数据。

public function showEditPost(){
    // Show answers
    $id = $this->input->get('id');

    $this->db->select('*');
    $this->db->from('answers');
    $this->db->join('questions', 'answers.question_id = questions.id');
    $this->db->where('questions.id', $id);
    $query = $this->db->get();
    if($query->num_rows() > 0){
        return $query->result();
    }else{
        return false;
    }
}

Show Edit Post function ajax script - 这个脚本显示模态数据

function showEditPost(){
    $.ajax({
        type: 'ajax',
        url: '<?php echo base_url() ?>posts/editPost',
        async: false,
        dataType: 'json',
        success: function(data){
            var html = '';
            var i;

        for(i=0; i<data.length; i++){
                html +='<input type="text" value="'+data[i].answer+'" class="form-control" /><hr>';
                }

                $('#showEdit').html(html);
            },
            error: function(){
                alert('Could not get Data from Database');
            }
        });
}

此代码触发 Ajax

<div class="modal fade-scale" id="myModal" tabindex="-1" role="dialog">
   <div class="modal-dialog" role="document">
     <div class="modal-content">
       <div class="modal-header">
         <h4 class="modal-title">Modal title</h4>
       </div>
       <div class="modal-body">
       <div class="card">
            <div class="card-header">
                <h4>Update Answers</h4>
            </div>
            <div class="card-body">         
                <form id="myForm">
                    <input type="hidden" name="answer" id="answer" class="form-control" />
                    <div id="showEdit"></div>
                </form>
            </div>
        </div>
       </div>
       <div class="modal-footer">
         <button type="button" id="btnClose" class="btn btn-default">Close</button>
         <button type="button" id="btnSave" class="btn btn-primary">Update</button>
       </div>
     </div><!-- /.modal-content -->
   </div><!-- /.modal-dialog -->
 </div>

显示模态

//edit
$('#showdata').on('click', '.item-edit', function(){
        var id = $(this).attr('data');

        $('#myModal').modal('show');
        $('#myModal').find('.modal-title').text('Edit Question');
        $('#myForm').attr('action', '<?php echo base_url() ?>posts/updatePost');
        $.ajax({
            type: 'ajax',
            method: 'get',
            url: '<?php echo base_url() ?>posts/editPost',
            data: {id: id},
            async: false,
            dataType: 'json',
            success: function(data){

                //$('input#question').val(data.question);
                $('input#answer').val(data.answer);

            },
            error: function(){
                alert('Could not Edit Data');
            }
        });
});

标签: phpcodeigniterjoincodeigniter-3

解决方案


替换这 2 个 javascript 函数,类型参数应该是getpost在你的$.ajax({type:method_here})

将以下内容添加到您的 ajaxsuccess:function()

var html = '';
for(var i=0; i<data.length; i++){
    html +='<input type="text" value="'+data[i].answer+'" class="form-control" /><hr>';
}
$('#showEdit').html(html);

1. 函数 ShowAllQuestions

function showAllQuestions(){
    $.ajax({
        type: 'post',
        url: '<?php echo base_url() ?>posts/showPosts',
        async: false,
        dataType: 'json',
        success: function(data){
            var html = '';
            var i;
            var n=1;

            for(i=0; i<data.length; i++){
                html +='<div class="card">'+
                    '<div class="card-header" style="color:white; background-color:black">'+
                        '<h4>Question</h4>'+
                    '</div>'+
                    '<div class="card-body">'+
                        '<form>'+
                            '<div class="form-group">'+
                                '<label for="exampleFormControlTextarea1"><h5> Question: </h5></label>'+
                                '<textarea class="form-control" name="question" id="question" rows="8">'+data[i].question+'</textarea>'+
                            '</div>'+
                            '<hr>'+
                            '<a href="javascript:;" class="btn btn-info item-edit" data-id="'+data[i].id+'">Edit </a>&nbsp;'+
                        '</form>'+
                    '</div>'+
                '</div><br>';
            }

            $('#showdata').html(html);
        },
        error: function(){
            alert('Could not get Data from Database');
        }
    });
}

2.显示特定问题答案的功能

将问题的 id 发送到controller以从数据库中获取相关答案。data使用codeigniter时不需要通过参数发送id 。它允许您将参数作为 url 段传递。

$this->uri->segment(number_here)可以帮助您实现这一目标。number_here 将替换为您想要获得的实际段数。

uri->segment你可以从这里了解更多

//edit
$('#showdata').on('click', '.item-edit', function(){
    var id = $(this).data('id');

    $('#myModal').modal('show');
    $('#myModal').find('.modal-title').text('Edit Question');
    $('#myForm').attr('action', '<?php echo base_url() ?>posts/updatePost');
    $.ajax({
        type: 'POST',
        url: '<?php echo base_url() ?>posts/editPost/' + id,
        async: false,
        dataType: 'json',
        success: function(data){
            console.log(data);
            var html = '';
            for(var i=0; i<data.length; i++){
                html +='<input type="text" value="'+data[i].answer+'" class="form-control" /><hr>';
            }
            $('#showEdit').html(html);
        },
        error: function(){
            alert('Could not Edit Data');
        }
    });
});

获取控制器内部的 id 而不是模型

public function editPost(){
    $id = $this->uri->segment(3) //if you don't know about uri->segment learn from user_guide
    $result = $this->post_model->showEditPost($id);
    echo json_encode($result);
}

你的模型应该是

public function showEditPost($id){
    // Show answers
    $this->db->select('*');
    $this->db->from('answers');
    $this->db->join('questions', 'answers.question_id = questions.id');
    $this->db->where('questions.id', $id);
    $query = $this->db->get();
    if($query->num_rows() > 0){
        return $query->result();
    }else{
        return false;
    }
}

推荐阅读