将ID从上一页获取到下一页的字段(CodeIgniter)

时间:2013-02-27 02:22:18

标签: php forms codeigniter session

基本上我想要做的就是从我的视图页面显示一个特定的文章,然后有一个删除链接到一个带有字段的页面和一个按钮,用于删除该文章中显示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)

2 个答案:

答案 0 :(得分:1)

您的删除程序看起来很奇怪并且有一些错误:

  1. 您没有在表单中指定方法,因此默认为GET但在您的删除功能中使用$this->input->post('id')。您应该将表单更改为<form action="" method="POST">;
  2. 您正在向您不使用的删除功能发送变量:$id。这是控制器中的字符串,尽管模型中的名称似乎表示ID。但无论如何你还没有使用它......
  3. 当你在控制器中调用它时,你期望删除函数的返回值,但是你没有从函数中返回任何内容。
  4. 您没有在删除链接中传递任何值;您应该在路径或查询字符串中添加ID,但如果使用相同的控制器,请注意不要使用相同的名称$id,因为表单将在未经确认的情况下进行验证;
  5. 您未在delete控制器中获取ID的任何值,并将其传递给视图以填充ID字段的值。
  6. 顺便说一句,没有输入类型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;
    }