1

基本的に私がしたいのは、特定の記事を表示しているビューページから、フィールドのあるページへの削除リンクと、そのフィールドに表示されているIDを持つその記事を削除するためのボタンを持つことです。

私はここ数日、URLリンクにIDを入れようとして「delete?id = 20」を試し、$ _ GETでアクセスしようとした後、「delete/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');
      }
     }

ルート.php(構成)

    $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を定義できますか?これをどのように行うことができるかわかりません。

回答:$ this-> input-> get(article_id)

4

2 に答える 2

1

削除手順がおかしいようで、いくつかのエラーがあります。

  1. フォームでメソッドを指定していないため、デフォルトで使用さGETれますが、削除関数ではを使用します$this->input->post('id')。フォームを<form action="" method="POST">;に変更する必要があります。
  2. 使用しない変数を削除関数に送信しています:$id。モデルの名前はIDを示唆しているようですが、これはコントローラーの文字列です。しかし、とにかくそれを使用していません...
  3. コントローラでdelete関数を呼び出すと、delete関数からの戻り値が期待されますが、関数からは何も返されません。
  4. 削除リンクに値を渡していない。パスまたはクエリ文字列のいずれかにIDを追加する必要がありますが$id、フォームが確認なしで検証するのと同じコントローラーを使用する場合は、同じ名前を使用しないように注意してください。
  5. コントローラでIDの値を取得しておらずdelete、IDフィールドの値を入力するためにビューに渡していません。

ちなみに、入力タイプはありidませんが、デフォルトでは。なので問題ありませんtext

于 2013-02-27T02:30:40.137 に答える
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;
    }
于 2013-02-27T05:41:14.090 に答える