Pertanyaan Cara memproses formulir dengan CodeIgniter


Saya baru mengenal CodeIgniter. Saya perlu memproses formulir. Saya memiliki halaman form.html dalam tampilan

<html>
  <head>
    <title>Search</title>
  </head>
  <body>
    <form action="search">
      <input type="text" name="search" value="" size="50" />
      <div>
        <input type="submit" value="Submit" />
      </div>
    </form>
  </body>
</html>

dan bentuk pengontrol

class Form extends Controller {

  function Form() {
    parent::Controller();   
  }

  function index() {    
    $this->load->view('form');
  }

}

dan saya memiliki tampilan file search.php tetapi ketika diproses itu menunjukkan halaman tidak ditemukan ...


13
2018-02-17 08:43


asal


Jawaban:


Di M.odel V.iew Cpengaturan .ontroller seperti CodeIgniter Views adalah elemen antarmuka pengguna. Mereka seharusnya tidak melakukan parsing hasil.

Jika saya tidak salah, yang ingin Anda lakukan adalah mengirim data dari www.yoursite.com/index.php/form untuk www.yoursite.com/index.php/search

Dalam php tidak terstruktur Anda mungkin memiliki form.html dengan aksi formulir search.php. Seorang pengguna akan menavigasi ke yoursite.com/form.html, yang akan menelepon yoursite.com/search.php, yang mungkin dialihkan ke yoursite.com/results.php.

Dalam CodeIgniter (dan sejauh yang saya mengerti, dalam sistem MVC apa pun bahasa apa pun) Anda Kontroler, Form memanggil fungsi yang memuat form.html  Melihat  ke dalam dirinya sendiri dan kemudian menjalankannya. Itu Melihat menghasilkan kode (umumnya HTML, tetapi tidak harus) yang berinteraksi dengan pengguna. Ketika pengguna membuat permintaan yang tidak dapat ditangani oleh View (permintaan untuk lebih banyak data atau halaman lain), ia akan meneruskan permintaan itu kembali ke Controller, yang memuat lebih banyak data atau Tampilan lainnya.

Dengan kata lain, View menentukan bagaimana data akan ditampilkan. Pengontrol memetakan permintaan ke Views.

Itu menjadi sedikit lebih rumit ketika Anda ingin memiliki data yang kompleks dan / atau mengubah ditampilkan dalam tampilan. Untuk mempertahankan pemisahan masalah MVC yang membutuhkan CodeIgniter juga menyediakan Anda Model.

Model bertanggung jawab untuk bagian yang paling sulit dari aplikasi web apa pun - mengelola aliran data. Mereka mengandung metode untuk membaca data, menulis data, dan yang paling penting, metode untuk memastikan integritas data. Dengan kata lain, Model harus:

  • Pastikan bahwa data dalam format yang benar.
  • Pastikan bahwa data tidak mengandung apa pun (jahat atau tidak) yang dapat merusak lingkungan yang ditakdirkan.
  • Memiliki metode untuk C.reating, R.eading, U.pdating, dan D.menghapus data dalam batasan di atas.

Akelos memiliki grafik yang baik untuk meletakkan komponen MVC:

Permintaan - Tanggapan http://svn.akelos.org/trunk/docs/images/akelos_mvc.png

Dikatakan demikian, cara termudah (baca "termudah", bukan "paling dapat diperluas") untuk mencapai apa yang ingin Anda lakukan adalah:

function Form()
{
    parent::Controller();   
}

function index()
{   
        $this->load->view('form');
}

function search()
{
        $term = $this->input->post('search');
        /*
            In order for this to work you will need to 
            change the method on your form.
            (Since you do not specify a method in your form, 
            it will default to the *get* method -- and CodeIgniter
            destroys the $_GET variable unless you change its 
            default settings.)

            The *action* your form needs to have is
            index.php/form/search/
        */

        // Operate on your search data here.
        // One possible way to do this:
        $this->load->model('search_model');
        $results_from_search = $this->search->find_data($term);

        // Make sure your model properly escapes incoming data.
        $this->load->view('results', $results_from_search);
}

32
2018-02-18 01:55



Lihat file tidak berguna tanpa pengontrol memuat dan menampilkannya. Anda harus membuat pengontrol untuk menerima data formulir, memprosesnya, lalu menampilkan hasil proses.

Anda dapat menggunakan form helper untuk mengatur form open tags, juga tag penutup:

<?php echo form_open('form/search'); ?>
<input type="text" name="search" value="" size="50" />
<div><input type="submit" value="Submit" /></div>
<?php echo form_close(); ?>

Tanpa menggunakan helper, Anda masih bisa menulis seperti ini:

<form action="<?php echo site_url('form/search'); ?>">

Kemudian tambahkan search metode menjadi form pengontrol:

function search()
{
  //get form field
  $search = $this->input->post('search');
  // do stuffs here
  //...
}

Ingat bahwa CI hanya membantu Anda dengan organisasi kode dasar dan menyediakan pustaka dan helper yang membantu. Tetapi Anda masih perlu menulis algoritme proses di situs Anda.

Jangan lupa untuk membaca panduan pengguna yang disertakan dalam paket codeigniter yang diunduh. Anda dapat mempelajari banyak barang dari contoh di sana. Jangan ragu untuk menanyakan hal-hal yang tidak Anda ketahui di sini, banyak anggota stackoverflow akan membantu Anda.


10
2018-02-17 10:26



Ini adalah validasi form dan kirim dalam controller Seluruh kelas pengontrol saya

    class MY_Controller extends CI_Controller {

        function __construct()
        {
            parent::__construct();

            $this->load->library(array('session','form_validation'));
            $this->load->helper(array('form', 'url', 'date'));

            //$this->load->config('app', TRUE);

            //$this->data['app'] = $this->config->item('app');


            }
    }

    <?php

    if (!defined('BASEPATH'))
        exit('No direct script access allowed');

    class Article extends MY_Controller {

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

        public function index() {

            $data['allArticles']    =   $this->article_model->getAll(); 

            $data['content']        =   $this->load->view('article', $data, true);
            $this->load->view('layout', $data);

        }

        public function displayAll() {

            $data['allArticles']    =   $this->article_model->getAll(); 

            $data['content']        =   $this->load->view('displayAllArticles', $data, true);
            $this->load->view('layout', $data);

        }

        public function displayArticle($id) {

            $data['article']        =   $this->article_model->read($id); 

            $data['articleId']      =   $id;

            $data['comment']        =   $this->load->view('addComment', $data, true);

            $data['content']        =   $this->load->view('displayArticle', $data, true);


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

        }

        public function add() {

            $this->form_validation->set_message('required', '%s is required');
            $this->form_validation->set_rules('title', 'Title', 'required|xss_clean');
            $this->form_validation->set_rules('description', 'Description type', 'required|xss_clean');

            $this->form_validation->set_error_delimiters('<p class="alert alert-danger"><a class="close" data-dismiss="alert" href="#">&times;</a>', '</p>');


            if ($this->form_validation->run() == TRUE) {

                 $article = array(
                        'title'         => $this->input->post('title'),
                        'description'   => $this->input->post('description'),
                        'created'       => date("Y-m-d H:i:s")
                  );

                 $this->article_model->create($article);

                 redirect('article', 'refresh');


            } else {

                 $data['article'] = array(
                    'title'         => $this->input->post('title'),
                    'description'   => $this->input->post('description'),
                );

                $data['message'] = validation_errors();

                $data['content'] = $this->load->view('addArticle', $data, true);
                $this->load->view('layout', $data);
            }
        }

    }

Kita bisa menggunakan bentuk html normal seperti ini.

            <?php echo $message; ?>

           <form method="post" action="article/add" id="article" >
                <div class="form-group">
                    <label for="title">Article Title</label>
                    <input type="text" class="form-control" id="title" name="title" value="<?php echo $article['title']; ?>" >
                </div>
                <div class="form-group">
                    <label for="description">Description</label>
                    <textarea class="form-control" rows="13" name="description" id="description"><?php echo $article['description']; ?></textarea>
                </div>

                <button type="submit" class="btn btn-default">Submit</button>
            </form>     
        </div>
    </div>

1
2017-08-06 05:18



Coba gunakan codeigniter 'site_url' dalam tindakan Anda untuk memastikan Anda menunjuk ke tempat yang tepat. Tindakan dalam contoh Anda akan diarahkan ke pengontrol 'pencarian' alih-alih pengontrol 'formulir'.

<html>
<head>
<title>Search</title>
</head>
<body>
<form action="<?= site_url('form/process_search') ?>">
<input type="text" name="search" value="" size="50" />
<div><input type="submit" value="Submit" /></div>
</form>
</body>
</html>

indeks hanya digunakan dalam pengontrol Anda ketika tidak ada yang dilewatkan .. Jadi dalam contoh saya di atas Anda ingin sesuatu seperti ini:

function Form()
{
    parent::Controller();   
}

function process_search()
{   

     print "<pre>";

     print_r($_POST);

     print "</pre>";
}

0
2018-02-17 15:17



Nettuts memiliki tutorial hebat untuk CodeIgniter untuk formulir Login. Ikuti screencast dan itu akan menjernihkan pertanyaan Anda.

http://net.tutsplus.com/videos/screencasts/codeigniter-from-scratch-day-6-login/


0
2018-02-17 15:24



ganti ini <form action="search"> dengan <?php echo form_open('form/search');?> dan menambahkan file autoload.php $autoload['helper'] = array('form');

dan kemudian file jangan gunakan file search.php cukup tambahkan kode search.php Anda ke dalam file Controller Anda seperti di sini

class Form extends Controller {

  function Form() {
    parent::Controller();   
  }

  function index() {    
    $this->load->view('form');
  }

function search(){
//your code here
}
}

0
2017-12-03 12:32