Я искал об удалении записей БД в Codeigniter и наконец-то создал решение, которое я считаю безопасным.Буду очень признателен за любые отзывы!Я не уверен, правильно ли я это делаю ..
Преимущества:
В моем примере я удаляю отправленные пользователем ссылки (строка таблицы БД содержит заголовок ссылки, URL ссылки, описание ссылки).
HTML: базы данных содержатся в форме.Каждая запись имеет кнопку формы с соответствующим идентификатором ссылки в атрибуте id
.
<?php echo form_open('profile/remove_link'); ?>
<?php echo form_hidden('link_id', ''); //value will be populated via jquery ?>
<ul id="user_links">
<?php foreach($query as $row): ?>
<li><?php echo $row->link_title; ?></li>
<li><?php echo auto_link($row->link_url, 'url', TRUE); ?></li>
<li><?php echo $row->link_description; ?></li>
<button type="submit" class="remove" id="<?php echo $row->link_id ?>" value="remove">Remove Link</button>
<?php endforeach; ?>
</ul>
</form>
JQUERY: Когда пользователь нажимает кнопку remove
, соответствующий идентификатор ссылки добавляется к вводу скрытого текста с именем link_id
.
$(document).ready(function(){
$('.remove').click(function() {
var link_to_remove = $(this).attr("id");
$("input[name=link_id]").val(link_to_remove);
});
});
После нажатия кнопки удаления, он отправляет идентификатор ссылки для удаления на контроллер profile
и функцию remove_link
function remove_link()
{
$this->load->model('Profile_model');
$links_data['query'] = $this->Profile_model->links_read(); //get links from db to add in view
//Validation
$this->form_validation->set_rules('link_id', 'Link ID', 'trim|required|xss_clean|max_length[11]|numeric'); //validate link id
if ($this->form_validation->run() == FALSE) //if validation rules fail
{
$this->load->view('profile/edit_links_view', $links_data);
}
else //success
{
$link_id = $this->input->post('link_id'); //get id of link to be deleted
$seg = 'user_links'; //used to redirect back to user links page
$this->Profile_model->links_delete($link_id, $seg); //send link id to model function
}
}
MODEL
function links_delete($link_id, $seg)
{
$this->db->where('user_id', $this->tank_auth->get_user_id());
$this->db->where('link_id', $link_id);
$this->db->delete('user_links');
redirect("/profile/$seg/");
}