Как вставить / удалить данные на основе сообщения ajax, динамически инициируемого флажками (отмечено или не отмечено) - PullRequest
0 голосов
/ 29 марта 2019

У меня есть 1 таблица с 1 флажком в каждой строке, поэтому, если отмечены 1 данные в строке, означает вставку, а если флажок снят, означает удаление в таблице.

вот изображение моей таблицы: https://imgur.com/p4iTN8C

это код моей таблицы (admin / roleaccess):

<div class="row">
    <div class="col-lg-6">
        <?= $this->session->flashdata('message'); ?>

        <table class="table table-hover">
            <thead>
                <tr>
                    <th scope="col">#</th>
                    <th scope="col">Menu</th>
                    <th scope="col">Akses</th>
                </tr>
            </thead>
            <tbody>
                <?php $i = 1; ?>
                <?php foreach ($menu as $m) : ?>
                <tr>
                    <th scope="row"><?= $i; ?></th>
                    <td><?= $m['menu'] ?></td>
                    <td>
                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" <?= check_access($role['id_lvl'], $m['id']); ?> data-role="<?= $role['id_lvl']; ?>" data-menu="<?= $m['id']; ?>">
                        </div>
                    </td>
                </tr>
                <?php $i++ ?>
                <?php endforeach; ?>
            </tbody>
        </table>
    </div>
</div>

мой скрипт:

<script>
$('.form-check-input').on('click', function() {
    const menuId = $(this).data('menu');
    const roleId = $(this).data('role');

    $.ajax({
        url: "<?php base_url('admin/changeAccess'); ?>",
        type: 'post',
        data: {
            menuId: menuId,
            roleId: roleId
        },
        success: function() {
            document.location.href = "<?= base_url('admin/roleaccess/'); ?>" + roleId;
        }
    });

});

и моя функция в контроллере:

 public function roleAccess($role_id)
{
    $data['user'] = $this->db->get_where('user', ['nama' => $this->session->userdata('nama')])->row_array();
    $data['title'] = 'Akses Role';

    $data['role'] = $this->db->get_where('user_lv', ['id_lvl' => $role_id])->row_array();

    $this->db->where('id != ', 1);
    $data['menu'] = $this->db->get('user_menu')->result_array();

    $this->load->view('templates/intern_header', $data);
    $this->load->view('templates/sidebar', $data);
    $this->load->view('templates/topbar', $data);
    $this->load->view('admin/role-access', $data);
    $this->load->view('templates/intern_footer');
}

public function changeAccess()
{
    $menu_id = $this->input->post('menuId');
    $role_id = $this->input->post('roleId');

    $data = [
        'id_lvl' => $role_id,
        'menu_id' => $menu_id
    ];

    $result = $this->db->get_where('user_access_menu', $data);

    if ($result->num_rows() < 1) {
        $this->db->insert('user_access_menu', $data);
    } else {
        $this->db->delete('user_access_menu', $data);
    }

    $this->session->set_flashdata('message', '<div class="alert alert-success" role="alert">Akses diganti !</div>');
}

, поэтому проблема заключается в том, что я пытался установить флажки в таблице, не обновляя данные (вставить / удалить).

Я попытался выяснить, в чем заключается проблема:

  • он успешно запускает функцию onclick (потому что обновление страницы после флажков отмечено или не отмечено.
  • он успешно передает данные menuId & roleId (которые я получаю, используя консоль браузера и добавляя html)ответ в сценарии)

так что, я думаю, проблема в функции changeAccess в моих контроллерах, но я не знаю, как это выяснить, потому что я не понимаю, как сбросить данные из ajax или чего-то еще.

Ответы [ 2 ]

0 голосов
/ 02 апреля 2019

Вы можете проверить, установлен ли ваш флажок или нет в

$('.form-check-input').on('click', function() {});

, добавив следующий фрагмент

if($(this).is(":checked")){ }

Установить флажок на основе флажка или нет, и передать этот флаг через ajax для вставки и удаления из таблицы.

0 голосов
/ 31 марта 2019

старый:

url: "<?php base_url('admin/changeAccess'); ?>",

обновление:

url: "<?php echo base_url('admin/changeAccess'); ?>",

нужно повторить URL для передачи данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...