Codeigniter - array pass to controler

Asked

Viewed 99 times

0

Good afternoon everyone, I have a problem in my code and I would like a help to solve it. It works like this: I receive a form of 3 variables (id_event, quality_user and id_user - the latter comes from a select Multiple with name=usuario_id[]).

I did the test with the console and when selecting in the select Multiple in the form, the information in the POST is correct (usuario_id[] = 1 and username_id[] = 2, when selecting two users, for example).

The point is that when I receive this information in the controller and game in the foreach so that each user received is inserted into the database, only 1 of them is added.

Function code in the controller receiving form data:

public function gerarCertificado(){
    if(esta_logado()){
        $usuario = $this->session->userdata("usuario_logado");

        $id_evento = $this->input->post('id_evento');
        $evento = $this->EventosModel->buscarEvento($id_evento);
        $dadosEvento = array('evento' => $evento);
        $qualidade = $this->input->post('qualidade');

        $id_usuarios_selecionados = $this->input->post('id_usuario');

        foreach ($id_usuarios_selecionados as $id_user) {
            $existeCert = $this->UsuariosModel->verificarCertificado($id_user, $id_evento);
            // usuario selecionado já possui certificado
            if($existeCert){ 
                $this->session->set_flashdata("danger", "Algum dos usuários selecionados já possui certificado para este evento");
                redirect('/eventos/certificados/' . $id_evento);
            // usuario selecionado não possui certificado no evento escolhido --> inserir na tabela certificados
            }else{

                if($this->UsuariosModel->gerarCertificado($id_evento, $id_user, $qualidade)){
                    $this->session->set_flashdata("success", "Certificados gerados!");

                }else{
                    $this->session->set_flashdata("danger", "Erro ao gerar certificados!");
                }
                redirect('/eventos/certificados/' . $id_evento);
            }
        }
    }else{
        redirect('/');
    }
}

Function code on the model you insert into the BD:

public function gerarCertificado($id_evento, $id_user, $qualidade){
    if($this->db->query("insert into certificados (id_evento, id_usuario, qualidade) values ('".$id_evento."','".$id_user."','".$qualidade."')")){
        return TRUE;
    }else{
        return FALSE;
    }
}

In short, when I select more than 1 user in select, the function is only executed 1 with 1 of the selected users.

Thank you!

  • print_r($id_usuarios_selecionados) shows what?

  • because it does not use $this->db->Insert('SUA_TABELA', $SUA_ARRAY)?

1 answer

0

In your explanation of a selection box with the name "user_id[]", but in your code you have:

$id_usuarios_selecionados = $this->input->post('id_usuario');

I think it should be:

$id_usuarios_selecionados = $this->input->post('usuário_id');

Well, anyway, I think the problem may be in the redirect you have in the foreach loop, because if a user has, or not, certified, there is a redirect to another page. This implies that only one record is processed, regardless of how many you have selected.

In my interpretation, you should pass the redirect to after the foreach loop, like this (I also fixed the flash_messages):

foreach ($id_usuarios_selecionados as $id_user) {
    $existeCert = $this->UsuariosModel->verificarCertificado($id_user, $id_evento);
    // usuario selecionado já possui certificado
    if($existeCert){ 
        $this->session->set_flashdata("danger", "Algum dos usuários selecionados já possui certificado para este evento");
        // usuario selecionado não possui certificado no evento escolhido --> inserir na tabela certificados
    } elseif(!$this->UsuariosModel->gerarCertificado($id_evento, $id_user, $qualidade)){
        $this->session->set_flashdata("danger", "Erro ao gerar certificados!");

        // pela tua lógica, vamos parar o loop no primeiro erro que obtivermos, aquando a criação de um certificado novo
        break;
    }
}

$this->session->set_flashdata("success", "Certificados gerados!");

redirect('/eventos/certificados/' . $id_evento);

Browser other questions tagged

You are not signed in. Login or sign up in order to post.