Не выводить сообщения об ошибках формы - PullRequest
0 голосов
/ 12 февраля 2012

У меня есть форма, которая не выводит никаких сообщений об ошибках. Я что-то пропустил?

Модель:

function createUser($username = NULL ,$passwordHash = NULL ,$firstname = NULL ,$lastname = NULL ,$email = NULL,$group = NULL ,$active = NULL)
    {
        $data = array('userName' => $username, 'userFirstName' => $firstname, 'userLastName' => $lastname, 'userEmail' => $email, 'userPassword' => sha1($passwordHash), 'userGroup' => $group, 'userActive' => $active);

        $this->db->insert('users',$data);

        return TRUE;
    }

Вид:

<h1><?php echo $companyName; echo nbs(1);?> - <?php echo $pageTitle; ?></h1>

<?php
if($success == TRUE) {
echo '<section id = "validation">Page Updated</section>';   
}
?>
    <p>Error: <?php echo validation_errors();?> </p>
    <div class="formContent">
        <form action="createUser" method="post">
            <fieldset class="control-group">
                <label for="userName">User Name: <input type="text" name="userName"  value="<?php echo set_value('userName'); ?>" placeholder="User Name"></label>
                <label for="userPassword">User Password: <input type="password" name="userPassword" value="<?php echo set_value('userPassword'); ?>" placeholder="User Password"></label>
                <label for="userFirstName">First Name: <input type="text" name="userFirstName" value="<?php echo set_value('userFirstName'); ?>" placeholder="First Name"></label>
                <label for="userLastName">Last Name: <input type="text" name="userLastName" value="<?php echo set_value('userLastName'); ?>" placeholder="Last Name"></label>
                <label for="userEmail">E-Mail: <input type="text" name="userEmail" value="<?php echo set_value('userEmail'); ?>" placeholder="Admin E-mail"></label>
                <label for="userGroup"> User Group:
                    <select name="userGroup" value="<?php echo set_value('userGroup'); ?>">
                        <option value="select">Please Select</option>
                        <option value="admin">Admin Group</option>
                        <option value="user">User Group</option>
                    </select>
                </label>
                <label for="userActive"> User Active:
                        <select name="userActive" value="<?php echo set_value('userActive'); ?>">
                            <option value="select">Please Select</option>
                            <option value="yes">Yes</option>
                            <option value="no">No</option>
                        </select>
                </label>
                <button type="submit" class="btn-primary">Create</button>
                </fieldset>
        </form>
    </div>

Контроллер:

    public function index()
    {
        $data['companyName'] = $this->core_model->companyName();
        $data['success'] ="";
        $data['pageTitle'] = "Create User";
        $this->load->view('admin/assets/header', $data);
        $this->load->view('admin/createUser', $data);
        $this->load->view('admin/assets/footer');

        if($this->input->post('submit'))
        {
                $this->form_validation->set_rules('userName', 'User Name', 'trim|required|xss_clean|callback_username_check');
                $this->form_validation->set_rules('userPassword', 'User Password', 'trim|required|xss_clean|sha1');
                $this->form_validation->set_rules('userFirstName', 'First Name', 'trim|required|xss_clean');
                $this->form_validation->set_rules('userLastName', 'Last Name', 'trim|required|xss_clean');
                $this->form_validation->set_rules('userEmail', 'E-Mail', 'trim|required|xss_clean');
                $this->form_validation->set_rules('userGroup', 'User Group', 'trim|required|xss_clean');
                $this->form_validation->set_rules('userActive', 'User Active', 'trim|required|xss_clean');

            if ($this->form_validation->run() == FALSE) {

                $data['companyName'] = $this->core_model->companyName();
                $data['success'] ="";
                $data['pageTitle'] = "Create User";
                $this->load->view('admin/assets/header', $data);
                $this->load->view('admin/createUser', $data);
                $this->load->view('admin/assets/footer');
            }else{

            $username = $this->input->post('userName',TRUE);
            $password = $this->input->post('userPassword', TRUE);
            $firstname = $this->input->post('userFirstName', TRUE);
            $lastname = $this->input->post('userLastName',TRUE);
            $email = $this->input->post('userEmail',TRUE);
            $group = $this->input->post('userGroup',TRUE);
            $active = $this->input->post('userActive', TRUE);

            $this->db->escape($username);
            $this->db->escape($password);
            $this->db->escape($firstname);
            $this->db->escape($lastname);
            $this->db->escape($email);
            $this->db->escape($group);
            $this->db->escape($active);

            $passwordHash = $this->encrypt->sha1($password);

            if ($this->core_model->createUser($username,$passwordHash,$firstname,$lastname,$email,$group,$active)) 
            {
                $data['success'] = TRUE;
                $data['companyName'] = $this->core_model->companyName();
                $data['pageTitle'] = "Create User";
                $this->load->view('admin/assets/header', $data);
                $this->load->view('admin/createUser', $data);
                $this->load->view('admin/assets/footer');
            }else{
                $data['companyName'] = $this->core_model->companyName();
                $data['pageTitle'] = "Create User";
                $this->load->view('admin/assets/header', $data);
                $this->load->view('admin/createUser', $data);
                $this->load->view('admin/assets/footer');
            }
        }   
        }
    }

        function __username_check($userName){
        {
            if ($userName == $user->$userName) {

                $this->form_validation->set_message('username_check','Sorry the chosen username %s is taken!');

                return false;
            }else{
                return true;
            }

        }

    }

}

/* End of file login.php */
/* Location: ./application/controllers/admin/createUser.php */

1 Ответ

2 голосов
/ 12 февраля 2012

Вам нужно разместить <input> s снаружи <label> </label> тегов!Это основная проблема.

Также:

  1. нет ввода с именем «submit»: ваша кнопка отправки, на самом деле, не имеет атрибута name.И, кстати, так как вы уже используете класс form_validation, эта проверка (if input->post('submit')) является избыточной;
  2. Еще одна избыточная вещь, которую я вижу, это передача TRUE (то есть, наличие xss_cleaned) на вход-> postметод: у вас уже есть множество правил проверки xss_clean, так зачем передавать его снова в этой дорогостоящей дополнительной обработке, если она уже прошла через него во время проверки?
  3. Sidenote, если вы используетеActive Record или привязки запросов, вам не нужно экранировать переменные, поэтому я бы тоже удалил эту часть:)
  4. И я верю, что ваш вызов __username_check() не удастся: функция, для чегокасается правила проверки "callback_", это "username_check";кроме того, двойное подчеркивание обычно используется для «магических методов» в PHP;Вы можете безопасно удалить оба, или, если вы действительно хотите подчеркнуть подчеркивание в имени функции (только одно), вы можете вызвать «callback__check_username».
  5. И вы загружаете три одинаковых представленияраз, почему?Я полагаю, что вы можете переписать весь метод индекса следующим образом:

    function index()
    {
      $this->form_validation->set_rules('userName', 'User Name', 'trim|required|xss_clean|callback_username_check');
        $this->form_validation->set_rules('userPassword', 'User Password', 'trim|required|xss_clean|sha1');
        $this->form_validation->set_rules('userFirstName', 'First Name', 'trim|required|xss_clean');
        $this->form_validation->set_rules('userLastName', 'Last Name', 'trim|required|xss_clean');
        $this->form_validation->set_rules('userEmail', 'E-Mail', 'trim|required|xss_clean');
        $this->form_validation->set_rules('userGroup', 'User Group', 'trim|required|xss_clean');
        $this->form_validation->set_rules('userActive', 'User Active', 'trim|required|xss_clean');
    
        if ($this->form_validation->run() == FALSE) {
    
            $data['success'] ="";
    
        }else{
    
            $username = $this->input->post('userName');
            $password = $this->input->post('userPassword');
            $firstname = $this->input->post('userFirstName');
            $lastname = $this->input->post('userLastName');
            $email = $this->input->post('userEmail');
            $group = $this->input->post('userGroup');
            $active = $this->input->post('userActive');
            $passwordHash = $this->encrypt->sha1($password);
    
            if ($this->core_model->createUser($username,$passwordHash,$firstname,$lastname,$email,$group,$active)) 
            {
                $data['success'] = TRUE;
    
            }      
        }
        $data['companyName'] = $this->core_model->companyName();
        $data['pageTitle'] = "Create User";
        $this->load->view('admin/assets/header', $data);
        $this->load->view('admin/createUser', $data);
        $this->load->view('admin/assets/footer');
    }
    

ОБНОВЛЕНИЕ:

как для проверки имени пользователя, так как v.В версии 2.0 CodeIgniter эта возможность включена в число правил проверки: если вы поместите правило is_unique, оно автоматически запросит базу данных, чтобы проверить это.Синтаксис:

is_unique[table.field]

В вашем случае может быть

 $this->form_validation->set_rules('userName', 'User Name', 'trim|required|is_unique[users.userName]|xss_clean');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...