0

(cat_id、name、description)を含むテーブル名「Category」があります。問題なく挿入、取得、削除できます。しかし、カテゴリを更新すると、データベースにデータが挿入されません。テーブルを確認しましたが、結果は何もありません。

POST モデル "Category_Model extends CI_Model":

public function custom_query($data)
    {
        $q = $this->db->query($data);
        return $q;
    }

POST コントローラー「Category extends CI_Controller」:

public function edit_category()
    {
        $data['title'] = "Edit Category Page";

        $this->load->view('edit_category', $data);
    }

    public function update_category()
    {
        $id = $this->input->post('cat_id'); // I try $id = $this->uri->segment(3); but no result
        $name = $this->input->post('name');
        $desc = $this->input->post('description');

        $this->post_model->custom_query("update category set cat_name='".$name."', description='".$desc."' where cat_id='".$id."'"); // when I delete 'where cat_id='".$id."'' clause, all my records were changing/updating
        // I change to $this->db->where('cat_id', $id); $this->db->update('category'), but no result.

        redirect ('category/view_categories');
    }

これが私のEDIT CATEGORYビューです:

<form action="<?php echo base_url(); ?>category/update_category" method="POST">
            <fieldset>
                <legend>Edit Category</legend>
                <label for="cat">Name :</label>
                <input type="text" name="name"/>
                <label for="desc">Descriptions :</label>
                <textarea name="description" cols="40" rows="2"></textarea>
                <input type="submit" value="Update">
            </fieldset>
        </form>

私のコードの何が問題だったのか誰か教えてください。少し早いですがお礼を

よろしくお願いします。

*注: autoload config に「データベース」を入れました。

4

4 に答える 4

0

CI モデルについて学ぶことができれば、生活が簡素化されます。何らかの理由で、コミット前にリダイレクトによって接続が閉じられる可能性があると思います...モデルオブジェクトを使用すると発生しません。

于 2013-11-04T12:28:32.237 に答える
0

cat_id渡すビューのどこにも表示されないため、クエリが取得されていないようです。を含む HTML の隠しフィールドを試してくださいcat_id。これは、URI セグメントを介して取得しようとするよりも簡単かもしれません。

于 2013-11-03T19:06:37.877 に答える
0

モデル用の小さなサンプル...

このように、アプリケーション/モデルにクラスを作成します

file "category_model.php"... CI はモデル名で非常に制限されているため、この名前に注意してください。クラス名は同じでなければなりませんが、すべて小文字です。

class Category_model extends CI_Model {

// your fields
var $id = null;
var $name = null;

// call parent constructor... it's essential
function __construct() {
    parent::__construct();
}

// create a set function, for fill all fields directly from get or post
function set($data) {
    $this->id = isset($data['id']) ? $data['id'] : null;
    $this->name = isset($data['name']) ? $data['name'] : null;
}

// execute update on database
function update($id) {
    $this->db->update('category', $this, array('id' => $this->id));
}
}

コントローラー、インスタンス、およびモデルの呼び出し

$this->load->model('Category_Model', null, true);
$this->Category_Model->set($this->post());
$this->Category_Model->update();

この後、通常のコードに進みます。

于 2013-11-04T20:11:40.260 に答える
0

まず、テーブル名を正しく書いていますか?

..."update kategori..."

これで問題ない場合は、次のように、データベースに送信する前にクエリを出力してみてください。

$query = "update kategori set cat_name='".$name."', description='".$desc."' where cat_id='".$id."'";
error_log('My query: ' . print_r($query, true));
$this->post_model->custom_query($query);

その後、そのクエリで問題が見られない場合は、それをお送りください。

于 2013-11-03T13:38:31.473 に答える