0

私は CI を使用する新しい学習者です。リンクをクリックしてコントローラーで関数を呼び出してデータベースに挿入する方法について質問があります。ビューで関数を呼び出す適切な方法ではないスレッドをいくつか見つけましたが、代わりに、どのようにすればよいでしょうか私はこのような目的を達成しますか?これはより動的な方法です。

コントローラ:

class Pages extends CI_Controller{

public function view($page='home'){

    if(!file_exists('application/views/pages/'.$page.'.php')){
        show_404(); 
    }

    $data['title'] = ucfirst($page);

    $this->load->helper('url');
    $this->load->model('getdb');

    $data['results'] = $this->getdb->getAll();

    $this->load->view('templates/header', $data);
    $this->load->view('inc/mainmenu', $data);
    $this->load->view('pages/'.$page, $data);
    $this->load->view('templates/footer', $data);
    //$this->insertValues();

}


function insertValues(){
    $this->load->model('getdb');

    $newRow = array(
        'name' => 'andy'
    );

    $this->getdb->insert1($newRow);
    echo "inserted!";
}

}

モデル getdb:

class Getdb extends CI_Model {

function getAll(){
    $query = $this->db->query('SELECT * FROM test');

    return $query->result();
}

function insert1($data){
    $this->db->insert('test', $data);
}

}

View で、リンクをクリックして insertValues() 関数をトリガーしたいのですが、

<h1>Insert into DB</h1>
<p><a href="" >Insert single row</a></p>

親切にアドバイスしてください、ありがとう。

4

3 に答える 3

0

このように、特定の名前に対して配列内のデータがあるとします。

$data = array(
      'x' => $a,
      'y' => $b,
      'z' => $c,
);

 The variables x,y and z all are column names which you are using in the database to insert. Those names should be same names in the table also.

ここで挿入するモデル関数を呼び出します。

$this->model->insert_values($data);

モデルファイルに、すべての値を挿入する関数を記述します。

public function insert_values($data)
 {
     $this->insert_helper('table_name',$data);
 }

これは、値を挿入するための汎用関数です。

public function insert_helper($table_name, $data_array){
    $this->db->insert($table_name,$data_array);
    return $this->db->insert_id();

}
于 2012-11-29T11:52:59.567 に答える
0

これらの回答は、リンクを作成する方法に関する単純な質問とどのような関係があるのでしょうか?

<h1>Insert into DB</h1>
<p><a href="'.<?php echo base_url();?>.'pages/insertValues" >Insert single row</a></p>

記録として、 base_url() 関数は絶対に必要というわけではありませんが、ディレクトリの奥深くにある場合に非常に役立つことがわかりました。正しいコントローラーに戻ることを確認するのが簡単になります。

于 2012-11-29T12:29:55.430 に答える
0

1 つのコントローラー アクションを別のアクションから呼び出すことは反 MVC です。代わりにやりたいことは、insertValues最初に(リンクから)アクションを呼び出し、挿入を行い、viewアクションにリダイレクトすることです。これで、新しいレコードが含まれます。

于 2012-11-29T10:54:04.907 に答える