Codeigniter form_validation всегда возвращает false

Я пытаюсь добавить запись в свою базу данных и проверить свою форму. Однако мой form_validation всегда возвращает false.

Это моя точка зрения. Я использую модальное окно для хранения этой формы.

<form class="form-horizontal" role="form" method="GET" action="<?php echo base_url('Contacts_/addcontact'); ?>">
    <div class="form-group">
      <label for="usr">First Name</label>
      <input type="text" class="form-control" name="inputFirstName" placeholder="First Name">
    </div>
    <div class="form-group">
      <label for="usr">Last Name</label>
      <input type="text" class="form-control" name="inputLastName" placeholder="Last Name">
    </div>
    <div class="form-group">
      <label for="usr">Contact Number</label>
      <input type="text" class="form-control" name="inputContactNumber" placeholder="Contact Number">
    </div>
    <div class="form-group">
      <label for="usr">Address:</label>
      <input type="text" class="form-control" name="inputAddress" placeholder="Address">
    </div>
    <div class="form-group">
      <label for="usr">Email Address:</label>
      <input type="text" class="form-control" name="inputEmailAddress" placeholder="Contact Number">
    </div>
    <div class="form-group">
        <label for="usr">Picture:</label>
        <input type="file" class="form-control" name="inputPicture"></br>
    </div>
    <div class="modal-footer">
      <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
      <button type="submit" class="btn btn-primary" name="action">Add</button>
    </div> 
</form>

это мой контроллер

public function addcontact(){
    $this->load->helper('url');
    $this->load->model('contacts');
    $this->load->library('form_validation');

    $first_name = $this->input->get('inputFirstName');
    $last_name = $this->input->get('inputLastName');
    $contact_number = $this->input->get('inputContactNumber');
    $address = $this->input->get('inputAddress');
    $email_address = $this->input->get('inputEmailAddress');

    $this->form_validation->set_rules($first_name, 'First Name', 'required|max_length[35]');
    $this->form_validation->set_rules($last_name, 'Last Name', 'required|max_length[35]');
    $this->form_validation->set_rules($contact_number, 'Contact Number', 'required|exact_length[11]|numeric');
    $this->form_validation->set_rules($address, 'Address', 'required|min_length[5]|max_length[255]');
    $this->form_validation->set_rules($email_address, 'Email Address', 'required|min_length[10]|max_length[255]|valid_email');

    if($this->form_validation->run() == TRUE){
        if(!isset($_GET['inputPicture'])){
            $this->contacts->addContactsNoPic($first_name, $last_name, $contact_number, $address, $email_address);
        }
        else{
            $image = 'assets/images/' . $_GET['inputPicture'];
            $this->contacts->addContacts($first_name, $last_name, $contact_number, $address, $email_address, $image);
        }

        $data['title'] = 'Address Book';
        $data['contacts_info'] = $this->contacts->getContacts();
        $this->load->view('home', $data);
    }
    else{
        $data['title'] = 'Address Book';
        $data['err_add'] = 1;
        $data['contacts_info'] = $this->contacts->getContacts();
        $this->load->view('home', $data);
    }

}

А это моя модель. У меня есть две функции: одна, если вы не ввели изображение, и одна, если вы этого не сделали.

function addContacts($first_name, $last_name, $contact_number, $address, $email_address, $image){

    $new_contact_data = array(
        'first_name' => $first_name,
        'last_name' => $last_name,
        'contact_number' => $contact_number,
        'address' => $address,
        'email_address' => $email_address,
        'picture' => $image,
    );

    $this->db->insert('contacts', $new_contact_data);
}

function addContactsNoPic($first_name, $last_name, $contact_number, $address, $email_address){

    $new_contact_data = array(
        'first_name' => $first_name,
        'last_name' => $last_name,
        'contact_number' => $contact_number,
        'address' => $address,
        'email_address' => $email_address,
    );

    $this->db->insert('contacts', $new_contact_data);
}

Спасибо вам за помощь

PS: я даже пытался установить для всех своих правил просто «обязательный», но моя form_validation всегда возвращает false, независимо от того, что я ввожу.

Я также проверил свои значения $this->input->get, и они в порядке, они получают значения, которые я ввел.


person Cronas De Se    schedule 17.09.2015    source источник
comment
Так какое же сообщение об ошибке он возвращает???   -  person RiggsFolly    schedule 17.09.2015
comment
Попробуйте добавить <?php echo validation_errors(); ?> в свое представление, чтобы вы могли увидеть, какое поле не проходит проверку. Проверка состоит из двух частей: 1) хорошая часть, когда все проходят 2) полезная часть, когда вы сообщаете пользователю, что не так   -  person RiggsFolly    schedule 17.09.2015
comment
@RiggsFolly, куда мне поместить это ‹?php echo validation_errors(); ?› Я пытался поместить его в форму (до ‹/form›), но он ничего не возвращает, когда я что-то ввожу.   -  person Cronas De Se    schedule 17.09.2015
comment
Проверьте здесь, куда его поместить. Кстати. У вас есть одна конструкция die() в коде.   -  person Tpojka    schedule 17.09.2015
comment
@Tpojka да, я специально добавил этот кубик, чтобы увидеть, будет ли он отображать кубик (). К сожалению, это не означает, что мой form_validation не возвращает true.   -  person Cronas De Se    schedule 17.09.2015
comment
@Tpojka Я уже добавил validatio_errors() в свой код. он все еще не показывает мне никаких ошибок. И я также попытался сделать что-то очень простое с нуля. Кажется, я тоже столкнулся с той же проблемой.   -  person Cronas De Se    schedule 17.09.2015
comment
@CronasDeSe Сделайте точный базовый пример, подобный этому, из руководства пользователя, чтобы узнать, работает ли он вообще. Вы решили die('asd') из кода?   -  person Tpojka    schedule 17.09.2015
comment
@Tpojka Документация, которую вы мне прислали, сработала. Что мне теперь делать?   -  person Cronas De Se    schedule 17.09.2015
comment
@CronasDeSe Вы удалили die('asd') из кода, который спрашивает вас в третий раз?   -  person Tpojka    schedule 17.09.2015
comment
@Tpojka да, я уже удалил штамп («asd») из своего кода. Я сейчас отредактирую свой пост. Извини. И тем не менее, хотя я уже удалил его, он все равно не работает.   -  person Cronas De Se    schedule 17.09.2015
comment
Давайте продолжим это обсуждение в чате.   -  person Tpojka    schedule 17.09.2015


Ответы (2)


Первым параметром в методе set_rules класса form_validation должно быть имя поля, но вместо этого вы передаете динамически созданные значения. Ваши правила должны быть такими:

$this->form_validation->set_rules('inputFirstName', 'First Name', 'required|max_length[35]');
$this->form_validation->set_rules('inputLastName', 'Last Name', 'required|max_length[35]');
$this->form_validation->set_rules('inputContactNumber', 'Contact Number', 'required|exact_length[11]|numeric');
$this->form_validation->set_rules('inputAddress', 'Address', 'required|min_length[5]|max_length[255]');
$this->form_validation->set_rules('inputEmailAddress', 'Email Address', 'required|min_length[10]|max_length[255]|valid_email');

Кроме того, в вашем теге формы нет enctype="multipart/form-data", который необходим для форм, загружающих данные.

И в-третьих, но самое главное, при использовании формы загрузки вы хотели бы использовать метод POST. Документы.

person Tpojka    schedule 17.09.2015

Правильный синтаксис:

$this->form_validation->set_rules('inputFirstName', 'First Name', 'required|max_length[35]');
$this->form_validation->set_rules('inputLastName', 'Last Name', 'required|max_length[35]');
$this->form_validation->set_rules('inputContactNumber', 'Contact Number', 'required|exact_length[11]|numeric');
$this->form_validation->set_rules('inputAddress', 'Address', 'required|min_length[5]|max_length[255]');
$this->form_validation->set_rules('inputEmailAddress', 'Email Address', 'required|min_length[10]|max_length[255]|valid_email');

http://www.codeigniter.com/user_guide/libraries/form_validation.html

person Jackie    schedule 17.09.2015