基本上我想要做的就是从我的视图页面显示一个特定的文章,然后有一个删除链接到一个带有字段的页面和一个按钮,用于删除该文章中显示id的文章。
我最近几天尝试将ID放入URL链接,即“删除?id = 20”并尝试使用$ _GET访问它,然后我尝试了“删除/ 20” “和URI段。 然后我尝试使用会话等,但我不确定哪个是最好的,因为我没有任何工作。
我决定展示我未触动过的代码,从头开始这是我的代码:
view.php
<?php
echo '<h2>'.$news_item['title'].'</h2>';
echo '<p>'.$news_item['text'].'</p>';
?><br><br>
<a href="http://website.com/CodeIgniter/index.php/news">
Go to latest news</a>
<a href = "http://website.com/CodeIgniter/index.php/news/delete">Delete</a><br>
delete.php
<h2>Delete a news item</h2>
<?php echo validation_errors(); ?>
<?php echo form_open('news/delete') ?>
<form>
<label for="delete">Article Number</label><br>
<input name="id" class="resizedTitlebox" value="id" /><br>
<br>
<input type="submit" name="submit" value="Delete news item" /></form>
news.php(控制器)
<?php
class News extends CI_Controller {
public function __construct()
{
parent::__construct();
$this->load->model('news_model');
}
public function view($slug)
{
$data['news_item'] = $this->news_model->get_news($slug);
if (empty($data['news_item']))
{
show_404();
}
$data['title'] = $data['news_item']['title'];
$this->load->view('templates/header', $data);
$this->load->view('news/view', $data);
$this->load->view('templates/footer');
}
public function delete() {
{
$this->load->helper('form');
$this->load->library('form_validation');
$data['title'] = 'Delete news item';
$this->form_validation->set_rules('id', 'required');
if ($this->form_validation->run() === FALSE)
{
$this->load->view('templates/header', $data);
$this->load->view('news/delete');
$this->load->view('templates/footer');
}
else
{
$data['id'] = $this->news_model->delete('id');
$this->load->view('news/success');
}
}
}
news_model.php(型号)
<?php
class News_model extends CI_Model {
public function __construct() {
$this->load->database();
}
public function get_news($slug = FALSE){
$this->load->helper('text');
if ($slug === FALSE){
$this->db->order_by('id', 'desc');
$query = $this->db->get('news');
return $query->result_array();
}
$query = $this->db->get_where('news', array('slug' => $slug));
return $query->row_array();
}
public function set_news(){
$this->load->helper('url');
$slug = url_title($this->input->post('title'), 'dash', TRUE);
$data = array(
'id' => $this->input->post('id'),
'title' => $this->input->post('title'),
'slug' => $slug,
'text' => $this->input->post('text'));
return $this->db->insert('news', $data);
}
public function delete ($id) {
$this->db->where('id',$this->input->post('id'));
$this->db->delete('news');
}
}
routes.php(config)
$route['news/(:any)'] = 'news/view/$1';
$route['news/delete'] = 'news/delete';
$route['news'] = 'news';
$route['default_controller'] = 'news';
$route['404_override'] = '';
@jeroen回答
“你没有在删除链接中传递任何值;你应该在路径或查询字符串中添加一个ID” - 我认为你的意思是
<a href = "http://website.com/CodeIgniter/index.php/news/delete?article_id=<?php echo $news_item['id']; ?>">Delete</a>
所以使用article_id。然后我可以在删除控制器中定义article_id?我不确定如何做到这一点。
答案: $这 - &GT;输入 - &GT;获取(的article_id)
答案 0 :(得分:1)
您的删除程序看起来很奇怪并且有一些错误:
GET
但在您的删除功能中使用$this->input->post('id')
。您应该将表单更改为<form action="" method="POST">
; $id
。这是控制器中的字符串,尽管模型中的名称似乎表示ID。但无论如何你还没有使用它...... $id
,因为表单将在未经确认的情况下进行验证; delete
控制器中获取ID的任何值,并将其传递给视图以填充ID字段的值。顺便说一句,没有输入类型id
,但这不会导致任何问题,因为它默认为text
。
答案 1 :(得分:1)
我认为他们不需要删除视图页面。您可以直接删除新闻列表页面中的新闻项目
<a href = "http://website.com/CodeIgniter/index.php/news/delete">Delete</a><br>
而不是此行使用此
<a href = "<?php echo site_url("news/delete/".$news_item['id']); ?>Delete</a>
在您的控制器中
public function delete($id){
$this->news_model->delete($id);
$this->load->view('news/success');
}
在您的模型中使用此
function Delete($id){
$this->db->where('id', $id);
if($this->db->delete("news"))
return true;
else
return false;
}