[英]CodeIgniter Error validation username
我是使用CI的新手,但我有一个问题正在尝试验证表单,当我让空白的任何字段的代码向我展示验证错误并且可以将用户保存在数据库中时,它就可以工作。 。,但验证使用相同的“ usuario”保存了2位用户,但我不希望这样做
如果有人可以帮助您
这是控制器的代码。
<?php
class Usuarios extends CI_controller
{
public function __construct()
{
parent::__construct();
$this->load->helper('form');
$this->load->library('form_validation');
$this->load->model('usuarios_model');
}
public function index()
{
$this->load->view('usuarios_view');
}
public function registro()
{
$this->load->view('registro_view');
//$this->load->model('usuarios_model');
}
public function registro_very()
{
if($this->input->post('submit_reg'))
{
$this->form_validation->set_rules('nombre', 'Nombre', 'required');
$this->form_validation->set_rules('correo', 'Correo', 'required|trim');
$this->form_validation->set_rules('user', 'Usuario', 'required|trim|callback_veryuser');
$this->form_validation->set_rules('pass', 'Contraseña', 'required|trim');
$this->form_validation->set_message('required', 'El campo %s esobligatorio');
$this->form_validation->set_message('veryuser', 'El %s ya existe');
if($this->form_validation->run() != FALSE)
{
$this->usuarios_model->add_user();
$data = array('mensaje' => 'El usuario se registro correctamente');
$this->load->view('registro_view', $data);
}
else
{
$this->load->view('registro_view');
}
}
}
public function veryuser($user)
{
$variable = $this->usuarios_model->veryuser($user);
if($variable == true)
{
return false;
}
else
{
return true;
}
}
}
模型:
class Usuarios_model extends CI_model
{
public function __construct()
{
parent::__construct();
}
public function veryuser($user)
{
$consulta = $this->db->get_where('usuarios', array('usuario' => $user));
$row_cnt = $consulta->num_rows;
if($row_cnt == 1)
{
return true; //el usuario existe
}
else
{
return false; //el usuario no existe
}
}
public function add_user()
{
$this->db->insert('usuarios',
array(
'nombre' => $this->input->post('nombre', true),
'correo' => $this->input->post('correo', true),
'usuario' => $this->input->post('user', true),
'pass' => $this->input->post('pass', true),
'codigo' => '123456',
'estado' => '0'
));
}
}
和看法
<html>
<body>
<h1>Registrar Usuario</h1>
<?php if(isset($mensaje)): ?>
<h2><?= $mensaje; ?></h2>
<?php endif; ?>
<form name="form_reg" action="<?= base_url().'usuarios/registro_very' ?>" method="post">
<label for="Nombre">Nombre</label>
<input type="text" name="nombre" value="<?= @set_value('nombre') ?>"><br>
<label for="Correo">Correo</label>
<input type="text" name="correo" value="<?= @set_value('correo') ?>"><br>
<label for="usuario">usuario</label>
<input type="text" name="user" value="<?= @set_value('user') ?>"><br>
<label for="Contraseña">Contraseña</label>
<input type="password" name="pass" value="<?= @set_value('pass') ?>"><br>
<input type="submit" value="Registrar" name="submit_reg">
<a href="<?= base_url().'usuarios/' ?>" title="Iniciar Sesión">Iniciar Sesión</a>
</form>
<hr> <?= validation_errors(); ?>
</body>
</html>
您是否尝试调试veryuser()以检查其是否正常工作? 在调用veryuser()之前是否设置了$ user? 请尝试以下操作:
$this->form_validation->set_rules('user', 'Usuario', 'required|trim|callback_veryuser['.$this->input->post('user').']');
我的建议是在stackoverflow中发布问题之前先阅读文档。
这只是一个小问题,可能不是问题-但如果您使用相同的用户名反复测试-在模型中-更改此设置
if($row_cnt == 1)
{
return true; //el usuario existe
}
多数民众赞成在说,如果只有一行,然后返回true。 但是,如果您在执行回调之前进行了测试,则用户名将超过一行。 更改为
if($row_cnt >= 1)
{
return true; //el usuario existe
}
否则,开始回声,找出问题所在。
我认为问题出在以下代码上:
$row_cnt = $consulta->num_rows;
所以你必须替换这个:
$row_cnt = $consulta->num_rows();
要么
$row_cnt = $consulta->count_all_results
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.