Codeigniter несколько URL-адресов при выполнении form_validation-> run ()

0

У меня есть файл register_page.php в папке views, которая является только формой регистра. Когда вы нажимаете кнопку регистрации и говорите, что пароль не соответствует, он должен, чтобы пароль не совпал после нажатия кнопки отправки. Однако после того, как вы введете пароль и он все еще не соответствует, он ничего не делает, он просто дублирует URL.

Например, URL-адрес, когда пароль не соответствует: http://localhost/dayone/user/register_user URL-адрес, когда пароль еще не соответствует: http://localhost/dayone/user/user/register_user В этот момент, форма пуста, все значения удаляются, и когда вы нажимаете enter, не заполняя ничего, он не показывает никаких ошибок, но URL-адрес говорит: http://localhost/dayone/user/user/register_user

Что вызывает это?

Мой контроллер user.php:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class User extends CI_Controller {

    public function index()
    {

        $this->load->view('includes/header');
        $this->load->view('register_page'); 
        $this->load->view('includes/footer');
    }



    public function register_user () {
        $this->load->library('form_validation');

        //rules to become a registered user

        $this->form_validation->set_rules('first_name', 'First Name', 'required|trim|min_length[3]|max_length[20]|xss_clean');
        $this->form_validation->set_rules('last_name', 'Last Name', 'required|trim|min_length[3]|max_length[20]|xss_clean');
        $this->form_validation->set_rules('email', 'Email', 'required|trim|min_length[6]|max_length[50]|valid_email|is_unique[users.email]|xss_clean');
        $this->form_validation->set_rules('password', 'Password', 'required|trim|min_length[6]|max_length[50]|matches[password_conf]|xss_clean');
        $this->form_validation->set_rules('password_conf', 'Confirm Password', 'required|trim|min_length[6]|max_length[50]|xss_clean');

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

        //user didn't validate, send back to login form and show errors

        $this->load->view('includes/header');
        $this->load->view('register_page'); 
        $this->load->view('includes/footer');

        } else {
        //successful registration
        $this->load->view('login'); 
        }

    }
}

Мой resister_page.php (с регистрационной формой):

<!DOCTYPE html>
<html lang="en">

<body>

    <div id="container" class="page">

        <div>
            <section class="container">
                <h2 class="block-title block-title--bottom">Login</h2>

                <div class="login">

                <?php echo validation_errors('<p class="alert-market">'); ?>

                 <form class="contact" id="contact-form" name="contact-form" method="post" action="user/register_user">
                  <!--- FIRST NAME --->
                <input class="contact__field" value="<?php echo set_value('first_name'); ?>" name="first_name" id="first_name" type="text" placeholder="First Name">
                    <!--- LAST NAME --->
                <input class="contact__field" value="<?php echo set_value('last_name'); ?>" name="last_name" id="last_name" type="text" placeholder="Last Name">
                 <!--- EMAIL --->
                <input class="contact__field" value="<?php echo set_value('email'); ?>" name="email" id="email" type="email" placeholder="Email">


                <!--- PASSWORD --->        
              <input class="contact__field" name="password" id="password" type="password" placeholder="Password">
                <!--- CONFIRM PASSWORD --->   
              <input class="contact__field" name="password_conf" id="password_conf" type="password" placeholder="Confirm Password">

                        <a class="login__callback" href="#">Forgot password?</a>            
                        <input class="btn btn--decorated btn-warning login__btn"  value = "Login" name="submit" type="submit">
               <?php echo form_close(); ?>

                </div>
            </section><!-- end container -->
        </div>

    </div><!-- /#page -->

</body>
</html>

Я понятия не имею, что вызывает это.

  • 0
    Зачем использовать echo form_close() когда вы не используете echo form_open() ? IMO, используйте form_open() чтобы форма была правильно создана, включая скрытые поля CSRF. Как правило, в CodeIgniter вы не можете отправить форму, если не включили правильное значение токена CSRF в данные формы.
  • 0
    Извините, я новичок в Php / codeigniter. Но как мне заменить мой код и реализовать form_open() ?
Показать ещё 3 комментария
Теги:
codeigniter

2 ответа

0

Первый помощник формы использования для открытия

<?php echo form_open('user/register_user');?>

Затем измените свои правила пароля для паролей, такие как (совпадение с подтвердите пароль на пароль): -

$this->form_validation->set_rules('password', 'Password', 'required|trim|min_length[6]|max_length[50]|xss_clean');
$this->form_validation->set_rules('password_conf', 'Confirm Password', 'required|trim|min_length[6]|max_length[50]|matches[password]|xss_clean');

Тогда ваша другая часть должна быть перенаправлением, а не загружать представление снова, как

else {
  // success register
  redirect('login');
}
0

Вместо этого:

<form class="contact" id="contact-form" name="contact-form" method="post" action="user/register_user">

Вы можете использовать это:

<?php echo form_open('user/register_user');?>

Который также равен этому:

<form method="post" accept-charset="utf-8" action="http://localhost/dayone/user/register_user"/>

Предполагая, что ваш base_url в вашем config.php равен:

$config['base_url'] = 'http://localhost/dayone/';

Я предлагаю вам потратить время на чтение дополнительной информации о Руководстве пользователя CodeIgniter .

РЕДАКТИРОВАТЬ:

Не забудьте загрузить свою форму и помощники URL. Вы можете загрузить их в autoload.php в приложении /config

$autoload['helper'] = array("url","form");

Или

Создайте функцию __contruct() и загрузите там свои помощники и модели.

Пример:

function __construct()
    {
        parent::__construct();
        $this->load->model('sample_model');
        $this->load->helper('url');
        $this->load->helper('form');
    }

Конструкторы полезны, если вам нужно установить некоторые значения по умолчанию или запустить процесс по умолчанию при создании экземпляра класса. Конструкторы не могут вернуть значение, но могут выполнять некоторую работу по умолчанию.

--From CodeIgniter - Контроллеры в конструкторах классов

Ещё вопросы

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