【问题标题】:Validation form doesn't work in Codeigniter验证表单在 Codeigniter 中不起作用
【发布时间】:2017-07-12 01:28:55
【问题描述】:

所以我有这个登记表运作良好。但是,当尝试在没有任何输入的情况下单击提交按钮时,页面只是重新加载而没有出现任何警告。这是我的控制器:

<?php

class Signup extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->load->helper(array('form','url'));
        $this->load->library(array('session','form_validation'));
        $this->load->database();
        $this->load->model('user_model');
    }

    function index()
    {
        //set form validation rules
        $this->form_validation->set_rules('fname','Full Name', 'trim|required|alpha|min_length[3]|max_length[30]|xss_clean');
        $this->form_validation->set_rules('username','Last Name', 'trim|required|alpha|min_length[3]|max_length[30]|xss_clean');
        $this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email|is_unique[user.user_email]');
        $this->form_validation->set_rules('password','Password','trim|required|md5');

        //submit
        if($this->form_validation->run() == FALSE)
        {   //FAILS
            $this->load->library('../controllers/page');
            $this->page->register();
        } else
        {
            //insert user details into db
            $data = array(
                'user_nama' => $this->input->post('fname'),
                'username' => $this->input->post('username'),
                'user_email' => $this->input->post('email'),
                'user_phone' => $this->input->post('phone'),
                'user_password' => $this->input->post('password'),
                'address' => $this->input->post('address'),
                'sex' => $this->input->post('sex')
            );

            if($this->user_model->insert_user($data))
            {
                $this->session->set_flashdata('msg','<div class="alert alert-success text-center">You are sucessfully Registered! Please login to access your profile.</div>');
                redirect('page/success');
            }
            else
            {
                //error
                $this->session->set_flashdata('msg','<div class="alert alert-danger text-center">Oops! Error occured. Please try again later.</div>');
                redirect('signup/index');
            }
        }
    }
}

?>

如果验证失败,我知道我从另一个控制器 (page.php) 调用 register() 方法(它只加载 headercontentfooter)是错误的。但我想不出另一种方法来做到这一点。你能帮我找出另一种方法来显示用户名吗?谢谢。

有关更多信息,请查看以下视图:

            <?php 
            $fattr = array('class' => 'form-signin');
            echo form_open('/signup/index', $fattr); ?>
            <div class="form-group form-inline input-sm">
                <label for="name">Nama Lengkap<span style="padding-left: 90px;">:</span></label>
                <input class="form-control" name="fname" placeholder="Your Name" type="text" value="<?php echo set_value('fname'); ?>" />
                <span class="text-danger"><?php echo form_error('fname'); ?></span>
            </div>
            <div class="form-group form-inline input-sm">
                <label for="username">Username<span style="padding-left: 115px;">:</span></label>
                <input class="form-control" name="username" placeholder="Username" type="text" value="<?php echo set_value('username'); ?>" /> <!-- lname -->
                <span class="text-danger"><?php echo form_error('username'); ?></span>
            </div>
            <div class="form-group form-inline input-sm">
                <label for="name">Password<span style="padding-left: 118px;">:</span></label>
                <input class="form-control" name="password" placeholder="Password" type="password" />
                <span class="text-danger"><?php echo form_error('password'); ?></span>
            </div>
            <div class="form-group form-inline input-sm">
                <label for="name">Email<span style="padding-left: 143px;">:</span></label>
                <input class="form-control" name="email" placeholder="Email" type="text" value="<?php echo set_value('email'); ?>" />
                <span class="text-danger"><?php echo form_error('email'); ?></span>
            </div>
            <div class="form-group form-inline input-sm">
                <label for="name">No. Telepon<span style="padding-left: 109px;">:</span></label>
                <input class="form-control" name="phone" placeholder="No. Telepon" type="text" value="<?php echo set_value('phone'); ?>" />
                <span class="text-danger"><?php echo form_error('phone'); ?></span>
            </div>
            <div class="form-group form-inline input-sm sex">
                <label for="sex">Jenis Kelamin<span style="padding-left: 95px;">:</span></label>
                <select value="<?php echo set_value('sex'); ?>">
                    <option value="male">Laki-laki</option>
                    <option value="female">Perempuan</option>
                </select>
            </div>
            <div class="form-group form-inline input-sm alamat">
                <label for="alamat">Alamat<span style="padding-left: 135px;">:</span></label>
                <textarea id="alamat" name="alamat" rows="5" cols="29" type="text" value="<?php echo set_value('address'); ?>"/></textarea>
            </div>

【问题讨论】:

    标签: php codeigniter validation


    【解决方案1】:

    如果验证失败,您只需重定向回相同的函数,因此删除对 register 函数的调用,改为调用 redirect('signup/index');

    那么在您看来,您只需要回显一个 codeigniter 专门用于此目的的功能:

    echo validation_errors('<span class="error">, '</span>');
    

    把它放在页面中任何你想要的地方,靠近顶部的地方可能是最好的。

    【讨论】:

    • 我尝试了你的建议,但没有成功:(仍然有同样的问题
    • 什么意思?如果你输入了错误的数据,它不会显示任何错误?
    • 我刚刚注意到您似乎没有在任何地方加载视图。您在哪里加载您在此处发布的视图?
    猜你喜欢
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    • 2020-09-28
    相关资源
    最近更新 更多