0

フォーラムを調べて、基本的なCRUD Webサイトの作成を試みた後、私は現在、次のように記事を更新するページを作成するのに苦労しています。誰かが私がどこで間違っているのか教えてくれれば、私は最も素晴らしいでしょう。'news/input'で404エラーが発生します

モデル(news_model.phpで)

public function update($id, $data)
 {
   $this->db->where('id', $id);
   $this->db->update('news', $data); 
 }

コントローラー(news.php)

public function update($id){

    $data = array(
    'title' => $this->input->post('title'),
    'slug' => $this->input->post('slug'),
    'text' => $this->input->post('text'));

 if($this->news_model->exists($id)) {
  $this->news_model->update($id, $data);
} 
   else {
     $this->news_model->insert($data);
  }
}

html(views / news / input.php)

   <h2>Update a news item</h2>

   <?php echo validation_errors(); ?>

   <?php echo form_open('news/update') ?>

   <label for="title">Title</label> 
   <input type="input" name="title" /><br />

   <label for="slug">Slug</label> 
   <input type="input" name="slug" /><br />

   <label for="text">Text</label>
   <textarea name="text"></textarea><br />

   <input type="submit" name="submit" value="Update an item" /> 
4

1 に答える 1

1

ニュースコントローラにはメソッド'input'がないように見えるため、404を取得します。次のようなものを追加してみてください。

public function input(){
   // load the form 
   $this->load->view('/news/input');
}

データを更新するには、最初にデータをフェッチしてビューに渡し、次にset_val()およびその他のCI関数を使用して(入力された)フォームをレンダリングする必要があることに注意してください。
現在、HTMLフォームを「ハードコーディング」しているため、状態の入力と維持(検証が失敗した場合)が困難になっています。CIWebサイトのフォームチュートリアルを試してみることをお勧めします。

編集:

更新/挿入(アップサート)コントローラーを作成するには、次のように変更します。

コントローラ:

        function upsert($id = false){

          $data['id'] = $id;    // create a data array so that you can pass the ID into the view.

                 // you need to differntiate the bevaviour depending on 1st load (insert) or re-load (update):

           if(isset($_POST('title'))){  // or any other means by which you can determine if data's been posted. I generally look for the value of my submit buttons

                if($id){
                     $this->news_model->update($id,  $this->input->post()); // there's post data AND an id -> it's an update        
                } else {
                     $this->news_model->insert($id,  $this->input->post()); // there's post data but NO id -> it's an insert        
                }


            } else { // nothing's been posted -> it's an initial load. If the id is set, it's an update, so we need data to populate the form, if not it's an insert and we can pass an empty array (or an array of default values) 

                if($id){
                     $data['news'] = $this->news_model->getOne($id); // this should return an array of the news item. You need to iterate through this array in the view and create the appropriate, populated HTML input fields.       
                } else {
                     $data['news'] = $this->news_model->getDefaults(); // ( or just array();)  no id -> it's an insert 
                }

            }

            $this->load->view('/news/input',$data);
    }

そして、$idをビューのaction-urlに修正します。

    <?php echo form_open('news/upsert/'.$id) ?>
于 2013-02-17T14:48:59.140 に答える