Simple Codeigniter form validation

风流意气都作罢 提交于 2020-07-19 04:19:23

问题


I am having some problem in my login form like this

enter image description here

I want to display an individually error beside of each field

here is the controller

function index()
{      
        $this->form_validation->set_rules('username','Username','trim|required|exact_length[4]|xss_clean');
        $this->form_validation->set_rules('password','Password','trim|required|min_length[4]|max_length[40]|xss_clean|callback_login');
        $this->form_validation->set_rules('jabatan','Jabatan','trim|required|xss_clean');

        if($this->form_validation->run() == false)
        {
            $this->load->view('login');
        }
        else
        {
            $this->load->view('welcome_message');
        }

}

function login()
{
    $username = $this->input->post('username');
    $password = $this->input->post('password');
    $jabatan = $this->input->post('jabatan');

    $value = $this->m_login->login($username,$password,$jabatan);

    if($value)
    {
        return true;
    }
    else
    {
        $this->form_validation->set_message('login', 'password salah');
        //delete redirect() and showing blank white screen
        return false;

    }

I made the <?php echo form_error(); ?> beside each field

<?php echo form_open('c_login/login'); ?>
            <table>
                <tr>
                    <td>Username</td>
                    <td><?php $inusername=array('name' => 'username', 'class' => 'GUI'); echo form_input($inusername); ?></td>
                    <td class="error"><?php echo form_error('username'); ?></td>
                </tr>

                <tr>
                    <td>Password</td>
                    <td><?php $inpassword=array('name' => 'password', 'class' => 'GUI', 'type' =>'password'); echo form_input($inpassword); ?></td>
                    <td class="error"><?php echo form_error('password'); echo $this->session->flashdata('login'); ?></td>
                </tr>

                <tr>
                    <td>Jabatan</td>
                    <td><?php $injabatan=array('keuangan' => 'keuangan', 'admin' => 'admin', 'hd' => 'head divisi', 'direktur' => 'direktur'); echo form_dropdown('jabatan',$injabatan,'keuangan','class = "gui"'); ?></td>
                    <td class="error"><?php echo form_error('jabatan'); ?></td>
                </tr>

                 <tr>
                    <td></td>
                    <td><?php $insubmit=array('name' =>'login','class' =>'button','value' => 'Login'); echo form_submit($insubmit); echo nbs(); $inreset=array('name' =>'reset','class' =>'button','value' => 'Hapus'); echo form_reset($inreset); ?></td>
                    <td class="error"><?php echo form_error(); ?></td>
                </tr>
            </table>
            <?php echo form_close(); ?>

How come the form_error() function is not echoing anything when I click login with the username and password field left blank?


回答1:


you know problem in your validation you're checking validation in index method of your class not in login method of your class and in your form you have given action to ci_login/login method which is redirecting if login is failed and its clearing form validation validate your fields on login method also and put all error message in session and display, i have made some changes in script have look here on this link Code modified

for this changes you have to use url helper

function index()
{
    $this->form_validation->set_rules('username','Username','trim|required|exact_length[4]|xss_clean');
    $this->form_validation->set_rules('password','Password','trim|required|min_length[4]|max_length[40]|xss_clean|callback_login');
    $this->form_validation->set_rules('jabatan','Jabatan','trim|required|xss_clean');

    if($this->form_validation->run() == false)
    {
        $this->load->view('login');
    }
    else
    {
        //to check if the validation run correctly
        //$this->load->view('welcome_message');

        $username = $this->input->post('username');
        $password = $this->input->post('password');
        $jabatan = $this->input->post('jabatan');

        $value = $this->m_login->login($username,$password,$jabatan);

        if($value)
        {
            redirect('welcome_message');
            //return true;
        }
        else
        {
            $this->form_validation->set_message('login', 'password salah');
            redirect('c_login',$login); //i want to pass $login into login form, then print
            return false;               //them as a form_error

        }
    }

}


<?php echo form_open(uri_string()); ?>
<table>
    <tr>
        <td>Username</td>
        <td><?php $inusername=array('name' => 'username', 'class' => 'GUI'); echo form_input($inusername); ?></td>
        <td class="error"><?php echo form_error('username'); ?></td>
    </tr>

    <tr>
        <td>Password</td>
        <td><?php $inpassword=array('name' => 'password', 'class' => 'GUI', 'type' =>'password'); echo form_input($inpassword); ?></td>
        <td class="error"><?php echo form_error('password'); echo $this->session->flashdata('login'); ?></td>
    </tr>

    <tr>
        <td>Jabatan</td>
        <td><?php $injabatan=array('keuangan' => 'keuangan', 'admin' => 'admin', 'hd' => 'head divisi', 'direktur' => 'direktur'); echo form_dropdown('jabatan',$injabatan,'keuangan','class = "gui"'); ?></td>
        <td class="error"><?php echo form_error('jabatan'); ?></td>
    </tr>

     <tr>
        <td></td>
        <td><?php $insubmit=array('name' =>'login','class' =>'button','value' => 'Login'); echo form_submit($insubmit); echo nbs(); $inreset=array('name' =>'reset','class' =>'button','value' => 'Hapus'); echo form_reset($inreset); ?></td>
        <td class="error"><?php echo form_error(); ?></td>
    </tr>
</table>
<?php echo form_close(); ?>



回答2:


index will not execute when login does.

If appears that maybe you think the set_rules() functions will execute when you submit the form. They won't. The form will submit to 'c_login/login', which is the login() function inside your c_login controller.

You need to move your form validation logic into login(), and have index() just echo the view for the first time.

Your Controller

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

function login(){
    $this->form_validation->set_rules('username','Username','trim|required|exact_length[4]|xss_clean');
    $this->form_validation->set_rules('password','Password','required|xss_clean|correct');
    $this->form_validation->set_rules('jabatan','Jabatan','trim|required|xss_clean');

    if($this->form_validation->run() == false){
        //your validation messages will be taken care of.
        $this->load->view('login');
    }
    else{
        $p = $this->input->post();
        if($this->m_login->login($p['username'],$p['password'],$p['jabatan'])){
            //redirect() user to logged in area.
        }
        else{
            $this->form_validation->set_message('login', 'password salah');
            $this->load->view('login');
        }
    }
}

Also, you shouldn't be trimming passwords. The space character is a perfectly valid suffix or prefix in a password. I've removed trim for you. I've also removed the min_length and max_length. This is something you'd want to enforce on a signup page, are you sure it really adds any value on a login page?




回答3:


You need to supply form_error() with the field:

<?php echo form_error('username'); ?>

See more details here




回答4:


It looks to me that you have a big misunderstanding on how these things work. First of all, you don't need that redirect() call in login(). The redirect() functions will redirect the user to another page, and since neither CodeIgniter nor PHP keep an object between page requests, you'd lose everything (e.g. The form validation object and its error messages).

Also, you might want to prefix that login() method with an underscore (_), so that no one can access it through an HTTP request.

You should probably submit the form to the index() method instead of login(). Then, make sure you only run the validation on a POST request.

function index()
{
    if ($_POST)
    {
        // run validation here
    }

    // ...
}



回答5:


**Simple form validation, image upload and captcha using codeigniter libraries**
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Login extends CI_Controller {

    public function __construct()
    {
        parent::__construct();
        $this->load->model('Loginmodel');

    }
    public function index()
    {
        $config = array(
            'img_path'      => 'uploadss/',
            'img_url'       => base_url().'uploadss/',
            'font_path'     => base_url().'system/fonts/texb.ttf',
            'img_width'     => '200',
            'img_height'    => 90,
            'word_length'   => 3,
            'font_size'     => 25
        );
        $captcha = create_captcha($config);

        // Unset previous captcha and set new captcha word
        $this->session->unset_userdata('captchaCode');
        $this->session->set_userdata('captchaCode', $captcha['word']);

        // Pass captcha image to view
        $fetch['captchaImg'] = $captcha['image'];

        $fetch['data'] = $this->Loginmodel->alldata();
        $this->load->view('login',$fetch);
    }

    public function loginerror()
    {
        $this->form_validation->set_rules('fname','first name','required|alpha');
        $this->form_validation->set_rules('lname','last name', 'required');
        $this->form_validation->set_rules('mobile', 'Mobile', 'required|numeric');
        $this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email');
        $this->form_validation->set_rules('password', 'Password', 'required');
        $this->form_validation->set_rules('companyname', 'Companyname', 'required');
        $this->form_validation->set_rules('designation', 'Designation', 'required');
        $this->form_validation->set_rules('companysize', 'Companysize', 'required|numeric');

        if($this->form_validation->run())
        {
            $inputCaptcha = $this->input->post('captcha');
            $sessCaptcha = $this->session->userdata('captchaCode');
            if($inputCaptcha === $sessCaptcha)
            {
                echo 'Captcha code matched.';

                    $fname = $this->input->post('fname');
                    $lname = $this->input->post('lname');
                    $mobile = $this->input->post('mobile');
                    $email = $this->input->post('email');
                    $password = $this->input->post('password');
                    $companyname = $this->input->post('companyname');
                    $designation = $this->input->post('designation');
                    $companysize = $this->input->post('companysize');

                    $checkmobile = $this->Loginmodel->checkmobile($mobile,$email);

                    if($checkmobile)
                    {
                        $this->session->set_flashdata("danger","Mobile Number or Email exist.....");
                        return redirect('Login/index'); 
                    }
                    else
                    {
                        $insertdata = $this->Loginmodel->insert($fname,$lname,$mobile,$email,$password,$companyname,$designation,$companysize);
                        $this->session->set_flashdata("success","Record Inserted");
                        return redirect('Home/indexhome');
                    }   
                // }
                // else
                // {
                //  $this->session->set_flashdata("danger","Please fill all the values properly");
                //  $this->index();
                // }
            }
            else
            {
                echo 'Captcha code does not match, please try again.';
                $this->index();
            }
        }
        else
        {
            $this->session->set_flashdata("danger","Please fill all the values properly");
            $this->index();
        }
    }

    public function refresh(){
        // Captcha configuration
        $config = array(
            'img_path'      => 'uploadss/',
            'img_url'       => base_url().'uploadss/',
            'font_path'     => base_url().'system/fonts/texb.ttf',
            'img_width'     => '200',
            'img_height'    => 90,
            'word_length'   => 3,
            'font_size'     => 25
        );
        $captcha = create_captcha($config);

        $this->session->unset_userdata('captchaCode');
        $this->session->set_userdata('captchaCode',$captcha['word']);

        echo $captcha['image'];
    }

    public function upload($id)
    {
        if(!empty($_FILES['imagename']['name']))
        {
                $config['upload_path'] = 'uploadss/';
                $config['allowed_types'] = 'jpg|jpeg|png|gif';
                $config['file_name'] = $_FILES['imagename']['name'];

                $this->load->library('upload',$config);
                $this->upload->initialize($config);

                if($this->upload->do_upload('imagename'))
                {
                    $uploadData = $this->upload->data();
                    $imagename = $uploadData['file_name'];
                }
                else
                {
                    echo "not upload";
                }
        }
        else
        {
            echo "error";
        }
        $this->load->view('uploadimage');
    }

    public function uploadimageerror()
    {
        if(!empty($_FILES['imagename']['name']))
        {
                $config['upload_path'] = 'uploadss/';
                $config['allowed_types'] = 'jpg|jpeg|png|gif';
                $config['file_name'] = $_FILES['imagename']['name'];

                $this->load->library('upload',$config);
                $this->upload->initialize($config);

                if($this->upload->do_upload('imagename'))
                {
                    $uploadData = $this->upload->data();
                    $imagename = $uploadData['file_name'];
                }
                else
                {
                    echo "not upload";
                }
        }
        else
        {
            echo "error";
        }
    }

    public function deletedata($id)
    {
        $dele = $this->Loginmodel->delete($id);
        return redirect('Login/index');
    }
}
?>


来源:https://stackoverflow.com/questions/12832491/simple-codeigniter-form-validation

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!