Моя цель состоит в двух шагах
Шаг 1
username
и значения password
Шаг 2
В приведенном выше сценарии мой код контроллера выглядит следующим образом:
$this->form_validation->set_rules('userid', 'Username', 'trim|required');
$this->form_validation->set_rules('password', 'Password', 'trim|required');
if ($this->form_validation->run() == FALSE)
{
$this->load->view('login'); // this works fine if either of one is empty
}
else
{
// I query the database and check if valid or not
if(<not_valid>)
{
// but how to pass the "Login Failed" message in this code block?
/* I'm assuming that if I somehow make "$this->form_validation->run()"
return false, then the message can be passed to the view */
$this->load->view('login');
}
else
{
$this->load->view('dashboard');
}
}
echo validation_errors();
<div class="form-group">
<label for="userid" class="control-label">Enter User ID</label>
<input type="text" id="userid" name="userid"
value="<?php echo set_value('userid'); ?>" class="form-control"
placeholder="Email Address"/>
</div>
<div class="form-group">
<label for="password" class="control-label">Enter Password</label>
<input type="password" id="password" name="password" class="form-control"
placeholder="Secret Password"/>
</div>
Я знаю обратные вызовы, но как я могу запустить один обратный вызов для двух полей (имя пользователя и пароль)? Если я сделаю:
$this->form_validation->set_rules('userid', 'Username', 'callback_check_valid');
$this->form_validation->set_rules('password', 'Password', 'callback_check_valid');
означает ли это, что мне придется вручную проверять пустоту обоих полей? Что-то вроде этого:?
public function check_valid($un, $pw)
{
if(trim($un) == '' || trim($pw) == '')
{
return false;
}
else
{
// check for valid login
}
}
Попробуй это:
if($this->input->post()){
$this->form_validation->set_rules('userid', 'Username', 'trim|required');
$this->form_validation->set_rules('password', 'Password', 'trim|required');
if ($this->form_validation->run()){
$username = $this->input->post('userid');
$password = $this->input->post('password');
if($this->check_valid($username, $password)){
$this->load->view('dashboard');
}else{
$this->load->view('login');
}
}else{
$this->load->view('login');
}
}
Это похоже на то, как я делаю свои проверки входа с помощью codeigniter.
Вы можете оставить вторую проверку отделки от функции check_valid, значения уже обрезаны.
login
в login
если $ this-> check_valid () возвращает false?
public function check_valid() {
$un = $_POST['username'];
$pw = $_POST['password'];
if(trim($un) == '' || trim($pw) == '') {
return false;
} else {
// check for valid login
}
}
попробуйте эту логику
$_POST
;)check_valid()
:)