Форма Codeigniter, показывающая ошибку проверки представления в другом представлении - PullRequest
2 голосов
/ 03 февраля 2012

У меня есть форма для пользователя, чтобы ввести некоторые отзывы, и эта форма должна находиться на странице сведений о продукте. Мне необходимо распечатать некоторую проверку ошибок на странице сведений, а не перенаправлять форму на страницу формы обратной связи с сообщением проверки.

Страница сведений о продукте находится по адресу «index.php / product / view / 1», а форма обратной связи - по адресу «index.php / product / add_feedback».

Как можно распечатать сообщение о проверке формы ошибки, чтобы оно отображалось на странице сведений о продукте вместо перенаправления на add_feedback. Спасибо.

Мой контроллер:

class Product extends CI_Controller {

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

    public function index()
    {
        //get product details
        $data['content'] = $this->mproduct->get_details();
        $this->load->view('listing', $data);
    }

    public function add_feedback()
    {
        // feedback form

        $this->form_validation->set_rules('name', 'Name', 'required|xss_clean|max_length[200]');
        $this->form_validation->set_rules('feedback', 'Feedback', 'required|xss_clean|max_length[200]');

        if ($this->form_validation->run() == FALSE)
        {
            $this->load->view('feedback');
        }
        else
        {
            $pid = $this->input->post('pid');
            $name = $this->input->post('name');
            $feedback = $this->input->post('feedback');

            $this->MFeedback->add($pid, $name, $feedback);
            redirect('product/view/'.$pid);
        }
    }
}

Модель:

class MFeedback extends CI_Model {
    function add_feedback($name, $pid, $feedback)
    {
        $data = array(
            'name' => $name,
            'feedback' => $feedback,
            'pid' => $pid,
        );
        $this->db->insert('feedback', $data);
    }
}

просмотр - feedback.php

<h1>Add Feedback</h1>

<?php echo validation_errors(); ?>

<?php echo form_open('product/add_feedback'); ?>

<p>Name</p>
<input type="text" name="name" size="50" value="<?php echo set_value('name'); ?>" />

<p>Feedback</p>
<textarea type="text" name="feedback"><?php echo set_value('feedback'); ?></textarea>

<?php echo form_hidden('pid', $this->uri->segment(3, 0)); ?>

<div><input type="submit" value="Add Feedback" /></div>

</form>

1 Ответ

2 голосов
/ 03 февраля 2012

Simple! Просто добавьте валидацию к методу Product/index, например:

class Product extends CI_Controller {

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

    public function index()
    {
        // feedback form validation
        $this->form_validation->set_rules('name', 'Name', 'required|xss_clean|max_length[200]');
        $this->form_validation->set_rules('feedback', 'Feedback', 'required|xss_clean|max_length[200]');

        if ($this->form_validation->run() == TRUE)
        {
            // the validation passed, lets use the form data!
            $pid = $this->input->post('pid');
            $name = $this->input->post('name');
            $feedback = $this->input->post('feedback');

            $this->MFeedback->add($pid, $name, $feedback);
            redirect('form/success'); // redirect to a page, where the user gets a "thanks" message - or redirect to the product page, and show a thanks there (but be sure to use redirect and nocht $this->load->view(..), because then the form data would be still in the header and a reload of the page would send another mail :)
        }

        // form did not pass the validation, lets get and show the product details
        $data['content'] = $this->mproduct->get_details();
        $this->load->view('listing', $data);
    }
}

А в файле feedback.php вам нужно изменить цель формы на что-то вроде этого:

<?php echo form_open('product/'.$this->uri->segment(3, 0)); ?>

... или даже лучше:

<?php echo form_open('product/'.$content->id); ?>

... зависит от вашего продукта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...