Ahmad Kamal
Ahmad Kamal

Reputation: 29

An Error Was Encountered in CI forms

Iam a newbie in Codeigniter , Iam learning it from watching videos , the instructor did the same what I did , But it gives me an error like this "The action you have requested is not allowed." ,and it worked with him, I don't know why, any help ! .

this is my Controller code

public function index(){

    if($this->input->post('submit')){ 

        echo $this->input->post('first_name');

    }

    $this->load->view('forms'); 
}

this is my View code

<form method="POST">

<input type="text" name="first_name" />
<input type="submit" name=submit" />

</form>

Upvotes: 0

Views: 157

Answers (2)

TheDrot
TheDrot

Reputation: 4337

Use form_open() helper which automatically adds hidden input with CSRF value.

So your view should be:

<?php echo form_open('action_url'); ?>

<input type="text" name="first_name" />
<input type="submit" name=submit" />

<?php echo form_close(); ?>

Disabling CSRF protection also works but it's a bad idea.

Upvotes: 1

elddenmedio
elddenmedio

Reputation: 1030

you almost right, you need to add some parts like action in your form, and isset or empty in your controller like

class Test_form extends CI_Controller{
    public function __construct(){
        parent::__construct();
    }

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

    //using your example. good
    public function check_form(){
        if( isset($this->input->post('first_name', TRUE))){
            echo "success <br>$$this->input->post('fisrt_name', TRUE)";
        }
        else{
            echo "error";
        }
    }

    //using form_validation. best
    public function check_form_validation(){
        $this->load->library('form_validation');

        $this->form_validation->set_rules('first_name', 'first Name', 'trim|required|xss_clean');

        if( ! $this->form_validation->run()){
            echo "error <br>" . validation_errors();
        }
        else{
            echo "success <br>$$this->input->post('fisrt_name', TRUE)";
        }
    }
}

form_test.php

first method
<form method="post" action="<?= base_url()?>index.php/test_form/check_form">
    <input type="text" name="first_name">
    <input type="submit" value="test">
</form>
<hr>
second method
<form method="post" action="<?= base_url()?>index.php/test_form/check_form_validation">
    <input type="text" name="first_name">
    <input type="submit" value="test">
</form>

Upvotes: 0

Related Questions