2017-12-30 55 views
0

最新バージョンのCI(3.1.6)を使用しています。 問題は挿入したいデータがコントローラにポストできないため、フォームからデータを取得することはできません。私は問題がフォームに位置していると思う。しかし、私はそれを修正する方法を知らない。誰でも助けてくれますか? は、ここに私のコードですCodeIgniterを使用してデータベースにデータを挿入できません

マイform.phpコード

<div id="register" class="text-center"> 
    <div class="container"> 
    <div class="section-title center"> 
     <h2>Register</h2> 
     <hr> 
     <form action="" method="post"> 
     <link href="<?php echo base_url();?>assets/user/css/login.css" rel="stylesheet"> 
     <input type="text" name="firstname" placeholder="First Name"> 
     <input type="text" name="lastname" placeholder="Last Name"> 
     <input type="text" name="fullname" placeholder="Full Name"> 
     <input type="text" name="username" placeholder="Username"> 
     <input type="text" name="email" placeholder="Email"> 
     <input type="password" name="pass" placeholder="Password"> 
    <!-- <input type="password" name="pass1" placeholder="Retype Password"> --> 
     <ul> 
     <p1>Gender</p1> 
     <select name="gender" id="" class="pilihan"> 
     <option value="men">Male</option> 
     <option value="women">Female</option></select> 
     </ul> 
     <ul> 
     <p1>Occupation</p1> 
     <li><input type="radio" name="job" value="doctor" checked> Doctor<br></li> 
     <li><input type="radio" name="job" value="nurse"> Nurse<br></li> 
    </ul> 
     <link rel="stylesheet" type="text/css" href="assets/user/login.css"> 
     <a href="<?php echo base_url('c_register/do_insert'); ?>" class="btn btn-primary btn-lg active" role="button">Primary link</a> 
    </form> 

私のコントローラのコード

<?php 
defined('BASEPATH') OR exit('No direct script access allowed'); 

class C_register extends CI_Controller { 

    function __construct(){ 
     parent::__construct(); 
     $this->load->model('m_register'); 
    } 


    function do_insert(){ 
     $this->load->helper('form'); 
     $this->load->library('form_validation'); 

     $this->form_validation->set_rules('firstname', 'firstname', 'required'); 
     $this->form_validation->set_rules('lastname', 'lastname', 'required'); 
     $this->form_validation->set_rules('fullname', 'fullname', 'required'); 
     $this->form_validation->set_rules('username', 'username', 'required'); 
     $this->form_validation->set_rules('email', 'email', 'required'); 
     $this->form_validation->set_rules('pass', 'pass', 'required'); 
     $this->form_validation->set_rules('gender', 'gender', 'required'); 
     $this->form_validation->set_rules('job', 'job', 'required'); 

     if ($this->form_validation->run() === FALSE) { 
      echo "gagal diinsert"; 
      // $this->load->view('templates/header', $data); 
      // $this->load->view('news/comment_form'); 
      // $this->load->view('templates/footer'); 
     } else { 
      $this->m_register->InsertData(); 
      $this->load->view('dashboard'); 
     } 
    } 
}?> 

アドレスへの最初の問題は、モデルのメソッドInsertData()ある

<?php 
defined('BASEPATH') OR exit('No direct script access allowed'); 

class M_register extends CI_Model { 

    public function InsertData($tabelName, $data){ 
     $datac = array(
      'firstname' => $this->input->post('firstname'), 
      'lastname' => $this->input->post('lastname'), 
      'fullname' => $this->input->post('fullname'), 
      'username' => $this->input->post('username'), 
      'email' => $this->input->post('email'), 
      'pass' => $this->input->post('pass'), 
      'gender' => $this->input->post('gender'), 
      'job' => $this->input->post('job') 
     ); 

     $res = $this->db->insert('member', $datac); 
     return $res; 

    } 

    } 
? 

答えて

0

私のモードコード。 $tableName

public function InsertData($tabelName, $data){ 

$dataをしかし、コントローラに、あなたは任意のパラメータを提供せずにメソッドを呼び出す - あなたは2つのパラメータを必要とするモデルでそれを定義しています。

} else { 
     $this->m_register->InsertData(); //No parameters??? 

したがって、パラメータを渡すか、メソッドの定義を変更する必要があります。ここでは、挿入作業が完了し、コントローラを変更する必要がない、はるかに単純なバージョンです。

public function InsertData() 
{ 
    $datac = $this->input->post(); 
    return $this->db->insert('member', $datac); 
} 

各入力を1つずつ取得する必要はありません。フィールド名を渡さずにinput->post()を呼び出すと、すべてのフィールドを含む配列が返されます。つまり、手動で$datacアレイを作成する必要はありません。

また、それは単に、VARに保存して、VARを返すので$this->db->insert戻り代わりに何を返すように少ないタイピングです。

なぜ、新しく挿入されたデータが表示されないのですか?おそらく、$this->m_register->InsertData();に電話をした後、$this->load->view('dashboard');に電話をかけても、「ダッシュボード」ビューを表示するためのデータは提供されていない可能性があります。

ダッシュボードを表示しているコントローラー/メソッドには、実際にやりたいことはredirectだと思います。コントローラがDashboardであり、方法がindex()であると仮定すると、do_insert()の最後の部分はおそらくこのように見えるはずです。

if($this->form_validation->run() === FALSE) 
{ 
    echo "gagal diinsert"; 
    // $this->load->view('templates/header', $data); 
    // $this->load->view('news/comment_form'); 
    // $this->load->view('templates/footer'); 
} 
else 
{ 
    if($this->m_register->InsertData()) 
    { 
     redirect('dashboard'); 
    } 
    else 
    { 
     //show an error page or error message about the failed insert 
    } 
} 
+0

私のコードを変更しても、私のdb @DFriendにコードを挿入できないように変更できます。 – kitcat

1

このように、コントローラコンストラクタにデータベースクラスをロードしていませんでした。

function __construct(){ 
    parent::__construct(); 
    $this->load->model('m_register'); 
    $this->load->database(); 
} 
1

モデルを追加する必要はありません。

<?php 
defined('BASEPATH') OR exit('No direct script access allowed'); 

class C_register extends CI_Controller { 

    function __construct(){ 
     parent::__construct(); 
     $this->load->model('m_register'); 
    } 


    function do_insert(){ 
     $this->load->helper('form'); 
     $this->load->library('form_validation'); 

     $this->form_validation->set_rules('firstname', 'firstname', 'required'); 
     $this->form_validation->set_rules('lastname', 'lastname', 'required'); 
     $this->form_validation->set_rules('fullname', 'fullname', 'required'); 
     $this->form_validation->set_rules('username', 'username', 'required'); 
     $this->form_validation->set_rules('email', 'email', 'required'); 
     $this->form_validation->set_rules('pass', 'pass', 'required'); 
     $this->form_validation->set_rules('gender', 'gender', 'required'); 
     $this->form_validation->set_rules('job', 'job', 'required'); 

     if ($this->form_validation->run() === FALSE) { 
      echo "gagal diinsert"; 
     } else { 
      //check in the array that it is same as column name in table like 'firstname' will be present on the table   
      $datac = array(
       'firstname' => $this->input->post('firstname'), 
       'lastname' => $this->input->post('lastname'), 
       'fullname' => $this->input->post('fullname'), 
       'username' => $this->input->post('username'), 
       'email' => $this->input->post('email'), 
       'pass' => $this->input->post('pass'), 
       'gender' => $this->input->post('gender'), 
       'job' => $this->input->post('job') 
      ); 

      $this->db->insert('member', $datac); 
      $insert_id = $this->db->insert_id(); 
      if(!empty($insert_id)){ 
       $this->load->view('dashboard'); 
      }else{ 
       echo "failed";   
      } 

     } 
    } 
}?> 
関連する問題