2017-12-30 47 views
0

Ich benutze die neueste Version von CI (3.1.6) Das Problem ist, die Daten, die ich einfügen möchte kann nicht auf der Steuerung, also wenn ich die Daten aus drucken Ansicht, es kann keine Daten aus dem Formular abfangen. Ich denke, das Problem liegt in der Form. aber ich weiß nicht, wie ich es beheben kann. Kann mir jemand helfen? Hier ist mein CodeKann nicht Daten in die Datenbank mit CodeIgniter

Mein form.php Code

<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> 

mein Controller-Code

<?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'); 
     } 
    } 
}?> 

meine Mode-Code

<?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; 

    } 

    } 
? 

Antwort

0

Das erste Problem zu Adresse der Methode des Modells ist InsertData() . Sie haben es im Modell definiert zwei Parameter erfordern - $tableName und $data

public function InsertData($tabelName, $data){ 

Aber im Controller rufen Sie die Methode ohne Parameter bereitstellt.

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

Sie müssen also entweder die Parameter übergeben oder die Definition der Methode ändern. Hier ist eine viel einfachere Version, die den Einfügejob erledigt und Sie müssen den Controller nicht ändern.

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

Sie müssen nicht jeden Eingang einzeln eingeben. Wenn Sie input->post() aufrufen, ohne einen Feldnamen zu übergeben, wird ein Array mit allen Feldern zurückgegeben. Das bedeutet, dass Sie das Array $datac nicht manuell erstellen müssen.

Auch ist es weniger Eingabe, einfach zurückgeben, was $this->db->insert zurückgibt, anstatt es in eine Var zu speichern und dann die var.

Nun, warum werden die neu eingefügten Daten nicht angezeigt? Wahrscheinlich, weil Sie nach dem Anruf $this->m_register->InsertData();$this->load->view('dashboard'); anrufen, aber keine Daten für die 'Dashboard'-Ansicht zur Verfügung stellen.

Ich denke, was Sie wirklich wollen, ist redirect zu der Controller/Methode, die das Dashboard zeigt. Angenommen, der Controller ist Dashboard und die Methode ist index() der letzte Teil von do_insert() sollte wahrscheinlich in etwa so aussehen.

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

ich ändere meinen Code wie Sie sagen und kann immer noch nicht den Code in meine db @DFriend einfügen – kitcat

1

Sie haben die Datenbankklasse auf Ihrem Controller-Konstruktor nicht so geladen.

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

Sie müssen das Modell nicht hinzufügen. Sie können den einfachen Weg wie folgt verwenden:

<?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";   
      } 

     } 
    } 
}?> 
Verwandte Themen