4

我的登录表单中有这样的问题

在此处输入图像描述

我想在每个字段旁边显示一个单独的错误

这是控制器

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;

    }

我做了<?php echo form_error(); ?>每个领域的旁边

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

当我在and字段留空的情况下单击登录时,为什么该form_error()功能没有任何功能?echousernamepassword

4

5 回答 5

3

您知道验证中的问题您正在检查类的 index 方法中的验证,而不是类的登录方法中的验证,并且在您的表单中,您已经对 ci_login/login 方法执行了操作,如果登录失败,该方法将重定向并且其清除表单验证验证您在登录方法上的字段也将所有错误消息放入会话和显示中,我对脚本进行了一些更改,在此链接上查看代码已修改

对于此更改,您必须使用 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(); ?>
于 2012-10-11T05:46:05.263 回答
3

index不会执行login

如果出现,您可能认为这些set_rules()功能会在您提交表单时执行。他们不会。表单将提交到'c_login/login',这是您的控制器login()内部的功能。c_login

您需要将表单验证逻辑移动到login()中,并且index()第一次回显视图。

你的控制器

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

此外,您不应该修剪密码。空格字符是密码中完全有效的后缀或前缀。我已经trim为你删除了。我还删除了min_lengthand max_length。这是您想在注册页面上强制执行的内容,您确定它真的在登录页面上增加了任何价值吗?

于 2012-10-12T03:44:24.483 回答
2

您需要为 form_error() 提供以下字段:

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

在此处查看更多详细信息

于 2012-10-11T05:02:37.343 回答
2

在我看来,您对这些事情的运作方式有很大的误解。首先,您不需要redirect()调用 in login()。这些redirect()函数会将用户重定向到另一个页面,并且由于 CodeIgniter 和 PHP 在页面请求之间都没有保留对象,因此您将丢失所有内容(例如表单验证对象及其错误消息)。

此外,您可能希望login()使用下划线 ( _) 作为该方法的前缀,这样任何人都无法通过 HTTP 请求访问它。

您可能应该将表单提交给index()方法而不是login(). 然后,确保只对POST请求运行验证。

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

    // ...
}
于 2012-10-11T05:22:23.103 回答
1
**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');
    }
}
?>
于 2019-05-15T05:40:30.840 回答