Проверка формы не работает CodeIgniter 3 - PullRequest
0 голосов
/ 09 мая 2020
public function blog_create()
{
    $this->load->library('form_validation');
    $this->form_validation->set_rules("email", 'Email', "trim|required|valid_email|max_length[100]");
    $this->form_validation->set_rules("password", "Password", "trim|required|min_length[8]");
    $blog_name = $this->input->post('name');
    $blog_des = $this->input->post('description');
    $user_id = $this->session->userdata('user_id');

    if ($this->form_validation->run() == TRUE){
        $pass = $this->Blog_Model->blog_insert($blog_name,$blog_des,$user_id);
        if ($pass === TRUE) {
             $this->session->set_flashdata('blogin','Blog Was Inserted');
             return redirect('dashboard?success="success"');

        }

    }
    redirect('dashboard?rr="error"');
}

Проверка формы не работает, я не знаю, что не так, я поместил validation_error в свой индексный файл, но он все еще не показывает никаких ошибок

Ответы [ 3 ]

1 голос
/ 09 мая 2020

Вместо того, чтобы проверять:

If($this->form_validation->run() == true)
{
   // Do what needs to be done when validation passes
}

Попробуйте проверить обратное:

if($this->form_validation->run() == false)
{
  // Do something if validation fails
}

else
{
   // Do what needs to be done when validation passes
 }

В большинстве слабо типизированных языков что-то, что не false, не обязательно true . Проверка формы гарантированно ответит false, если проверка не удалась, но вы не должны предполагать, основываясь только на этом факте, что успешная проверка даст ответ true

1 голос
/ 09 мая 2020

Итак, я создал демо с вашим кодом, и он у меня сработал. Проблема здесь, как я вижу, должна заключаться в том, что вы не печатаете сообщение success или error в view. Я написал приведенный ниже код и при необходимости сделал пояснения в комментариях. Посмотри, поможет ли это тебе.

Просмотр (Форма блога)

<?php $this->load->view('your-path/vwError'); // load a view to show errors ?> 

<form method="POST" action="<?php echo base_url('form'); ?>">
    <input type="text" name="email">
    <input type="password" name="password">
    <input type="submit" value="Submit" > 
</form>

Просмотр (Ошибка)

if($this->session->flashdata('message')){
    $message = $this->session->flashdata('message');
}

if($this->session->flashdata('error')){
    $error = $this->session->flashdata('error');
}

<?php if (!empty($message)): ?>
<div class="alert alert-success"> <!-- your-style-here, I've used bootstrap here(Green background) -->
    <a class="close" data-dismiss="alert">×</a>
    <?php echo $message; ?>
</div>
<?php endif; ?>

<?php if (!empty($error)): ?>
<div class="alert alert-danger"> <!-- your-style-here, I've used bootstrap here(Red background) -->
    <a class="close" data-dismiss="alert">×</a>
    <?php echo $error; ?>
</div>
<?php endif; ?>

Контроллер

function form(){

    $this->form_validation->set_rules("email", 'Email', "trim|required|valid_email|max_length[100]");
    $this->form_validation->set_rules("password", "Password", "trim|required|min_length[8]");

    if($this->form_validation->run() == TRUE){  // validation successful

        // get the value if the validation is successful otherwise it's just extra code
        $blog_name = $this->input->post('name');
        $blog_des = $this->input->post('description');
        $user_id = $this->session->userdata('user_id');

        $pass = $this->Blog_Model->blog_insert($blog_name,$blog_des,$user_id); // your-logic

        if ($pass === TRUE) {

            $this->session->set_flashdata('message', 'Blog Was Inserted');

            redirect('your-url-here');

        } // you can also set a flashdata here in {else} condition if the data isn't saved ie returns FALSE
    }else{  // validation failed

        $this->session->set_flashdata('error', validation_errors()); // store the validation errors in flashdata

        $this->load->view('your-blog-form-view');   // You probably don't want to redirect as you'd want to retain the previous input value from the user.
    }
}
1 голос
/ 09 мая 2020

сначала отладьте свой код и сообщите мне, правильно ли работает проверка

$user_id = $this->session->userdata('user_id');

if ($this->form_validation->run() == FALSE) {
  echo validation_errors();     
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...