Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

JQUERY + INPUT + PHP

Galera bom dia ,

tenho um input , onde ao executar uma ação o mesmo é preenchido através de um código jquery que atribui o value para ele , ao receber via $this->input->post("nomedoinput"); o valor chega no post zerado .

Obs : o name esta correto.

6 respostas

Opa, Marcelo. Beleza?

Como você está preenchendo com jquery?

Posta mais detalhes pra gente poder te ajudar melhor.

Marcelo, boa noite!

Se no PHP está tudo correto, provavelmente jQuery está com algo errado, seguem alguns exemplos de como deve ser feito:

Exemplo de html:

<form id="meuformulario">
    <input type="text" name="nome-do-campo1" id="id-do-campo1" data-qualquer-outro-atributo>
    <input type="text" name="nome-do-campo2" id="id-do-campo2" data-qualquer-outro-atributo>
</form>

Para Alterar os valores dos campos acima, você pode fazer das seuintes formas:

Exemplo 1 - Alterar apenas o primeiro campo

<script>
    $(document).ready(function(){

        // pode ser alterado assim:
        // acessando o id direto
        $("#id-do-campo1").val('novo valor');

        // pelo name
        $("[name=nome-do-campo1]").val('novo valor');

        // no caso de usar o name ou qualquer outro atributo, o ideal é indicar qual elemento vamos usar
        // o jQuery lista pela ordem criada no DOM
        // no caso nosso campo com o id id-do-campo1, seria assim:
        // a funçao eq recebe o índice iniciado em 0
        $("[name=nome-do-campo1]").eq(0).val('novo valor');

        // ou podemos indica a alteração do primeiro campo do tipo text do formulário
        $("#meuformulario input[type=text]").eq(0).val('novo valor');


        // ou podemos acessar por qualquer outro atributo
        // sim, esse que coloquei com data-qualquer-outro-atributo, realmente funciona
        $("[data-qualquer-outro-atributo]").eq(0).val('novo valor')

    });
</script>

Como mostrei acima, em alguns casos é necessário indicar o índice do campo, pois nos dados de utilizar atributos que podem ser repetidos, como a classe, o tipo, etc... O jquery monta uma lista de itens, só não é necessário quando usamos o ID, que por regra deve sempre ser único no DOM Ou se tivermos um único elemento com aquele atributo.

Exemplo 1 - Alterar apenas o segundo campo

<script>
    $(document).ready(function(){

        $("#id-do-campo2").val('novo valor');

        $("[name=nome-do-campo2]").val('novo valor');

        $("#meuformulario input[type=text]").eq(1).val('novo valor');

        $("[data-qualquer-outro-atributo]").eq(1).val('novo valor')

    });
</script>

Ou podemos alterar vários campos que compartilham dos mesmos atributos, veja:

<script>
    $(document).ready(function(){
        $("#meuformulario input[type=text]").val('novo valor');

        $("[data-qualquer-outro-atributo]").val('novo valor')
    });
</script>

No exemplo acima, eu não indico o índice, então o jquery altera todos os campos que compartilham os mesmos atributos.

Outra coisa que você deve verificar, é se está enviando ao servidor de forma correta.

Se for o caso, diga se está usando ajax e como está montando, ou seja o envio é feito recarregando a página, enviando assim via cabeçalho HTTP.

Galera eu resolvi da seguinte maneira , eu pego os dados do formulário via jquery e mando um post via $.post para meu controller do codeigniter , ai.. meu controle recebe os valores do post e realiza a chamada da minha model e concluindo a operação, dessa forma funcionou... o que vocês acham?

Adriano Maciel da Silva e Carlos Vinicius dos Santos Dias me falam o ponto de vista de vocês em relação ao fluxo feito por mim , e muito obrigado pela a colaboração de todos :)

solução!

Marcelo, bom dia!

Cara, se funcionou, perfeito.

Esse fluxo eu acredito que seja perfeito, tudo depende do que você precisa.

Eu particularmente prefiro enviar as requisições de outra forma, pois eu normalmente exibo alguma mensagem de retorno ao usuário ou executo alguma outra coisa no html, mesmo em casos de erro.

Eu costumo enviar assim:

<script>
    // exemplo 1, enviando os dados direto do formulário
    function enviarDados()
    {
        $.ajax({
            url: 'minha/url', // link do controller que receberá os dados
            type: 'post', // verbo HTTP
            data: $("#idMeuFormulario").serialize(), // serialziando os dados do formulário para envio
            dataType: 'json', // em caso de retorno de dados, eu uso sempre json, este parâmetro é opcional
            success: function(retorno){
                // fazer alguma coisa, ou avisar o usuário
                console.log( retorno );
            },
            error: function( error ){
                console.log("Oops!");
                console.log( error );
            }
        });
    }
</script>

<script>
    // exemplo 2, tratando os dados antes de enviar
    function enviarDados()
    {
        // pegando campo a campo
        // o $.trim limpa espaços e quebras de linha antes e depois da string
        var nome     = $.trim( $("#idCampoNome").val() );
        var email    = $.trim( $("#idCampoEmail").val() );
        var telefone = $.trim( $("#idCampoTelefone").val() );

        // posso fazer qualquer coisa com os dados, como validar
        // regex de validação de email
        var regex = /\S+@\S+\.\S+/;

        // testando o email
        if( !regex.test( email ) )
        {
            alert("Oops! O email informado é inválido!");

            // o retorno falso, impede a função de prosseguir
            return false;
        }

        // no caso abaixo, não quero retorno
        // então não informo o dataType e não uso as funções success ou error
        $.ajax({
            url: 'minha/url', // link do controller que receberá os dados
            type: 'post', // verbo HTTP
            // montando o objeto com os dados para envio
            // a chave é como o name dos campos
            data: {
                nome     : nome, // equivalente a <input type="text" name="nome" value="Adriano Maciel">
                email    : email, // equivalente a <input type="text" name="email" value="meu@email.com">
                telefone :  telefone // equivalente a <input type="text" name="telefone" value="11 11111-11111">
            }
        });


        // muita atenção ao usar o dataType : 'json'
        // o servidor é obrigatório retornar uma string json, caso contrário
        // a função de erro é disparada
        // no server você precisaria retornar algo mais ou menos assim:
        // echo json_encode( ["retorno" => "sucesso"] );
        //
        // Esse é apenas um exemplo, pode ser qualquer coisa, desde que em formato json
    }
</script>

Vlw Brother pela dica.