Php 简单Codeigniter表单验证
我在我的登录表单中遇到了这样的问题 我想在每个字段旁边单独显示一个错误Php 简单Codeigniter表单验证,php,codeigniter,Php,Codeigniter,我在我的登录表单中遇到了这样的问题 我想在每个字段旁边单独显示一个错误 <?php echo form_open('c_login/login'); ?> <table> <tr> <td>Username</td> <td><?php $inusername=array('name
<?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(); ?>
这是控制器
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_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(); ?>
用户名
密码
贾巴坦
您需要为表单_error()提供以下字段:
<?php echo form_error('username'); ?>
在我看来,你对这些东西的工作原理有很大的误解。首先,您不需要调用login()
。redirect()
函数将用户重定向到另一个页面,由于CodeIgniter和PHP都不会在页面请求之间保留对象,因此您将丢失所有内容(例如表单验证对象及其错误消息)
另外,您可能希望在login()
方法前面加一个下划线(\uu
),这样就没有人可以通过HTTP请求访问它
您可能应该将表单提交到index()
方法,而不是login()
。然后,确保只对POST
请求运行验证
function index()
{
if ($_POST)
{
// run validation here
}
// ...
}
您知道验证中的问题,您正在检查类的index方法中的验证,而不是类的login方法中的验证,并且在您的表单中,您已对ci_login/login方法执行操作,如果登录失败,该方法将重定向,其清除表单验证也将验证登录方法中的字段,并将所有错误消息放入会话和显示,我在脚本中做了一些更改,请查看此链接
对于这些更改,您必须使用url帮助器
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(); ?>
函数索引()
{
$this->form_validation->set_rules('username'、'username'、'trim | required |精确长度[4]| xss_clean');
$this->form_validation->set_rules('password'、'password'、'trim | required |最小长度[4]|最大长度[40]| xss|u clean |回调|登录|;
$this->form_validation->set_规则('jabatan'、'jabatan'、'trim | required | xss_clean');
如果($this->form\u validation->run()==false)
{
$this->load->view('login');
}
其他的
{
//检查验证是否正确运行
//$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);
如果(价值)
{
重定向(“欢迎信息”);
//返回true;
}
其他的
{
$this->form_validation->set_message('login','password salah');
重定向('c_login',$login);//我想将$login传递到登录表单中,然后打印
返回false;//将其作为表单错误
}
}
}
用户名
密码
贾巴坦
登录时,索引
不会执行。
如果显示,您可能认为提交表单时将执行set\u rules()
函数。他们不会的。表单将提交到'c\u login/login'
,这是c\u login
控制器中的login()
函数
您需要将表单验证逻辑移动到login()
,并让index()
第一次只回显视图
你的控制器
另外,你不应该修改密码。空格字符是密码中完全有效的后缀或前缀。我已经为您删除了trim
。我还删除了最小长度
和最大长度
。这是您希望在注册页面上强制执行的内容,您确定它真的会在登录页面上增加任何价值吗?**使用codeigniter库进行简单的表单验证、图像上载和验证码**
**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');
}
}
?>
因为您没有发送错误messages@BhuvanRikka我读了“单独显示错误”一节。看起来我有同一个控制器希望我的答案对你有用。我已经按照你的指示更正了代码,它没有显示任何形式的错误信息:(我没有重定向()
然后,单击登录按钮,同时将用户名和facebook字段留空,浏览器显示空页面。我想将它们重定向到登录,因此我使用重定向()
CMIIW@Cignitor你能用最新的代码更新你的帖子吗?它可能是错误的,它导致了空白页。我不确定它是否与模型有关。你想让我发布我的模型吗?@ CigStor我的坏。我忘了看查看代码。你应该提交表单到索引。()
方法而不是login()
。然后,确保只对POST
请求运行验证。