Программно сделать «$ this-> form_validation-> run ()» и вернуть false

0

Моя цель состоит в двух шагах

Шаг 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');
    }
}

HTML

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>

PS

Я знаю обратные вызовы, но как я могу запустить один обратный вызов для двух полей (имя пользователя и пароль)? Если я сделаю:

$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
    }
}
  • 0
    Вам нужно будет изменить свою логику, похоже, что обратные вызовы codeigniters не могут отправить 2 параметра ... но вы можете использовать $_POST ;)
  • 1
    @Kyslik Как оказалось, я могу отправить два параметра в функцию обратного вызова check_valid() :)
Теги:
codeigniter
validation

2 ответа

0

Попробуй это:

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, значения уже обрезаны.

  • 0
    Но как бы вы передали сообщение об ошибке в представление login в login если $ this-> check_valid () возвращает false?
  • 0
    Использование flashdata - хороший способ. ellislab.com/codeigniter/user-guide/libraries/sessions.html
0
public function check_valid() {
    $un = $_POST['username'];
    $pw = $_POST['password'];
    if(trim($un) == '' || trim($pw) == '') {
        return false; 
    } else {
        // check for valid login
    }
}

попробуйте эту логику

  • 0
    Я знаком с этой частью. Я предполагаю, что вы пропустили ту часть, где я указал, что я не уверен, как передать сообщение об ошибке в случае неудачной проверки входа в систему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню