我在登录表单中遇到了一些问题
我想在每个字段旁边显示一个单独的错误
这是控制器
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(); ?>
当form_error()
和echo
字段留空时点击登录时username
函数怎么没有password
?
答案 0 :(得分:2)
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_length
和max_length
。这是您希望在注册页面上强制执行的操作,您确定它确实在登录页面上添加了任何值吗?
答案 1 :(得分:1)
答案 2 :(得分:1)
在我看来,你对这些事情的运作方式存在很大的误解。首先,您不需要redirect()
中的login()
来电。 redirect()
函数会将用户重定向到另一个页面,由于CodeIgniter和PHP都没有在页面请求之间保留对象,因此您将丢失所有内容(例如表单验证对象及其错误消息)。
此外,您可能希望使用下划线(login()
)为_
方法添加前缀,以便没有人可以通过HTTP请求访问它。
您应该将表单提交到index()
方法而不是login()
。然后,请确保您只在POST
请求上运行验证。
function index()
{
if ($_POST)
{
// run validation here
}
// ...
}
答案 3 :(得分:1)
你知道你的验证中的问题你正在检查你的类的索引方法中的验证而不是你的类的登录方法,并且在你的表单中你已经对ci_login / login方法采取了行动,如果登录失败并且它的清除,则重定向表单验证也会在登录方法上验证您的字段并将所有错误消息放入会话和显示中,我已经在脚本中进行了一些更改,请查看此链接Code modified
对于此更改,您必须使用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(); ?>
答案 4 :(得分:0)
**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');
}
}
?>