在单个页面中使用过多表单.代码点火器


Using too many forms in single page. Codeigniter

>我正在为我的网站制作管理面板,因此需要显示表格的所有行,每一行都会有两个按钮更新和删除。在此$users数组从控制器传递。

起初,我使用锚标签发出请求,没有以下形式:

<a href='<?php echo base_url() ?>users/update/<?php echo $user->id ?>'>Update</a>
<a href='<?php echo base_url() ?>users/delete/<?php echo $user->id ?>'>Delete</a>

但我意识到任何人都可以通过简单地更改参数来拨打电话,所以我使用如下形式使用 POST 请求:

<?php foreach($users as $user): ?>
    <tr>
        <td><?php echo $user->name ?></td>
        <td><?php echo $user->email ?></td>
        <td>
            <form method='post' action='<?php echo base_url() ?>users/update'>
                <input type='hidden' name='upd_user_id' value='<?php ehco $user->id ?>'>
                <input type='submit' value='Update'>
            </form>
        </td>
        <td>
            <form method='post' action='<?php echo base_url() ?>users/delete'>
                <input type='hidden' name='del_user_id' value='<?php ehco $user->id ?>'>
                <input type='submit' value='Delete'>
            </form>
        </td>
    </tr>
<?php endforeach; ?>

在这个用户可以使用检查元素轻松检查 id(我认为这很糟糕),但不能进行不必要的调用,所以我认为这是一种安全的方法,但这会导致一页上有太多表单,所以我想知道这是否是正确的我在这里做的事情,如果不是我应该怎么做。

编辑-1这是我在用户控制器中的删除方法

public function delete()
{
    if( $this->input->post("del_user_id") ) {
        // do nothing
    } else {
        $user_id_delete  = $this->input->post("del_user_id");
        $this->user_model->delete_user($user_id_delete);
    }
    redirect('users');
    die();
}

您可以在更新或删除之前执行其他检查。 例如

Where user_id = (_GET or _POST user_id) AND company_id = (Session company ID)

Where user_id = (_GET or _POST user_id) AND owner_id = (Session user ID)

显然,这将取决于数据表中可用的字段,因此如果有人确实更改了_GET或_POST值,那么您不仅仅是使用该参数来删除或更新,他们只是删除/更新他们已经可以访问的记录。

希望有意义吗?

你用的是对

<a href='<?php echo site_url() ?>users/update/<?php echo $user->id ?>'>Update</a>
<a href='<?php echo site_url() ?>users/delete/<?php echo $user->id ?>'>Delete</a>

但我不知道您的控制器是否以正确的方式出现

class Users extends CI_Controller{
    function update( $user_id = NULL ){
        if( ! is_null($user_id)){
            $result = $this->model->update_model($user_id);
            $this->session->set_flashfata('updated', 'The user was successfully updated');
            redirect('controller/method', 'refresh');
        }
        else{
            $this->session->set_flashfata('error', 'The user can´t be null');
            redirect('controller/method', 'refresh');
        }
    }
    //same as delete
}

您需要在控制器/方法中指定要发送的参数

你可以用jQuery创建一个递归的ajax函数,如下所示:

<!-- This is the link tag you can add in your users loop -->
<a href="" class="update" data-user-id="<?php echo $user->id ?>">Update</a>
<!-- Put this script at the end of your page -->
<script type="text/javascript">
$(document).ready(function(){
    $(".update").on('click', function(evt) {
        evt.preventDefault();
        var $id = $(this).data('user-id');
        var $values = {
            "id"  : $id
        };
        $.ajax({
            type: "POST",
            url: '<?php echo base_url() ?>users/update/',
            data: $values,
            cache: false,
            success: function(){
                console.log('Updated: ' + $id);
            }
        });
        return false;
    });
});
</script>