>我正在为我的网站制作管理面板,因此需要显示表格的所有行,每一行都会有两个按钮更新和删除。在此$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>