Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

joelzsbit

Preencher vários inputs de acordo com id escolhido no select

Recommended Posts

Pessoal tenho o seguinte código:

 

<body>
        <label for="cadastro">Cadastro</label>
        <select id="cadastro" name="cadastro" id="">
            <?php
            $busca_segura = $PDO_con->prepare("SELECT * FROM tb_cad_pf WHERE excluido != 'sim' ");
            $busca_segura->execute();
            if ($busca_segura == 1) {
                while ($dados= $busca_segura->fetch(PDO::FETCH_ASSOC)) {
                    $opt .= '<option value="' . $dados['id_cad_pf'] . '">' . $dados['nome'] . '</option>';
                }
            } else {
                $opt = '<option value="0">Nenhum cliente cadastrado</option>';
            }
            echo $opt;
            ?>
        </select>

        <label for="nome">Nome</label>
        <input type="text" id="nome" placeholder="nome" value=""/>

        <label for="sobrenome">Sobrenome</label>
        <input type="text" id="sobrenome" placeholder="nome" value=""/>

        <label for="login">Login</label>
        <input type="text" id="login" placeholder="nome" value=""/>

        <script>

            var nomes = ["", "Tiago", "Rafael", "Marcos", "Tatiane", "Luana"];
            var sobrenomes = ["", "Pereira", "Silva", "Grilhones", "Nascimento", "Piovani"];
            var logins = ["", "tiago_pereira", "rafael_01", "marcos.g2", "taty2017", "luana10"];

            document.getElementById("cadastro").addEventListener('change', function () {
                document.getElementById("nome").value = nomes[this.selectedIndex];
                document.getElementById("sobrenome").value = sobrenomes[this.selectedIndex];
                document.getElementById("login").value = logins[this.selectedIndex];
            });

        </script>
    </body>

Ao selecionar um id no select me retorna o respectivo nome, sobrenome e login nos referidos inputs. Por exemplo se eu selecionar o 3 id ele vai preencher os inputs nome: Rafael, Sobrenome: Silva e login: rafael_01. Até ai tudo bem, esta funcionando.

A duvida é como que faço para que no "var nomes",  "var sobrenomes" e "var logins" vir direto do banco de acordo com o id escolhido?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente isso: (Não sou muito bom em php).

 

Crie estas variáveis php:

$nome = array();
$sobrenome = array();
$login = array();

 

Acrescente as três linhas abaixo dentro do seu while (lembrando de ajustá-las com os respectivos nomes dos campos da sua tabela).

while ($dados= $busca_segura->fetch(PDO::FETCH_ASSOC)) {
  $opt .= '<option value="' . $dados['id_cad_pf'] . '">' . $dados['nome'] . '</option>';
  $nome = $dados['nome'];
  $sobrenome = $dados['sobrenome'];
  $sobrenome = $dados['login'];	
}

Agora esse será seu código javascript:

<script>
  
  var nomes = new Array();
  var sobrenomes = new Array();
  var logins = new Array();
  
  <?php 
  foreach($nome as $key => $value) { 
    printf("nomes[%d] = '%s';", $key, $value); // Imprime nomes[0] = '(primeiro nome)'; 
  } 

  foreach($sobrenome as $key => $value) { 
    printf("sobrenomes[%d] = '%s';", $key, $value); // Imprime sobrenomes[0] = '(primeiro sobrenome)'; 
  } 

  foreach($login as $key => $value) { 
    printf("logins[%d] = '%s';", $key, $value); // Imprime logins[0] = '(primeiro login)'; 
  } 

  ?> 
  document.getElementById("cadastro").addEventListener('change', function(){
    document.getElementById("nome").value = nomes[this.selectedIndex];
    document.getElementById("sobrenome").value = sobrenomes[this.selectedIndex];
    document.getElementById("login").value = logins[this.selectedIndex];
  });

</script>
    

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz assim:

<body>
        <label for="cadastro">Cadastro</label>
        <select id="cadastro" name="cadastro" id="">
            <?php

            $busca_segura = $PDO_con->prepare("SELECT * FROM tb_cad_pf WHERE excluido != 'sim' ");
            $busca_segura->execute();
            if ($busca_segura == 1) {
                while ($dados= $busca_segura->fetch(PDO::FETCH_ASSOC)) {
                    $opt .= '<option value="' . $dados['id_cad_pf'] . '">' . $dados['nome'] . '</option>';
                    $nome .= $dados['nome']; // criei o array incluido  .=
                    $sobrenome .= $dados['sobrenome']; // criei o array incluido .=
                    $login .= $dados['login'];	// criei o array incluido .=
                }
               
            } else {
                $opt = '<option value="0">Nenhum cliente cadastrado</option>';
            }
            echo $opt;
      
            ?>
        </select>

        <label for="nome">Nome</label>
        <input type="text" id="nome" placeholder="nome" value=""/>

        <label for="sobrenome">Sobrenome</label>
        <input type="text" id="sobrenome" placeholder="sobrenome" value=""/>

        <label for="login">Login</label>
        <input type="text" id="login" placeholder="login" value=""/>

<script>
       
var nomes  = <?php echo $nome ?>; 
var sobrenomes = <?php echo $sobrenome ?>;
var logins = <?php echo $login ?>;
  
  <?php 
  foreach($nome as $key => $value) { 
    printf("nomes[%d] = '%s';", $key, $value); // Imprime nomes[0] = '(primeiro nome)'; 
  } 

  foreach($sobrenome as $key => $value) { 
    printf("sobrenomes[%d] = '%s';", $key, $value); // Imprime sobrenomes[0] = '(primeiro sobrenome)'; 
  } 

  foreach($login as $key => $value) { 
    printf("logins[%d] = '%s';", $key, $value); // Imprime logins[0] = '(primeiro login)'; 
  } 

  ?> 

            document.getElementById("cadastro").addEventListener('change', function () {
                document.getElementById("nome").value = nomes[this.selectedIndex];
                document.getElementById("sobrenome").value = sobrenomes[this.selectedIndex];
                document.getElementById("login").value = logins[this.selectedIndex];
            });

        </script>
        
    </body>

Não mostra erro, mesmo assim não preenche os campos, note que criei os arrays colocando ".= " nas variáveis ($nome, $sobrenome e $login) do php, sera que é ai o problema?

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 horas atrás, Eziquiel disse:

Creio que sim. Utilize sem o "." (ponto). Ajuste apenas os nomes dos campos dentro do while.

Retirei os pontos, no while ja estão com o nome dos campos da tabela.

 

4 horas atrás, wessleysanttos disse:

Amigo, é possível também fazer por ajax 

Weslsley, com Ajax, não tentei ainda... mas pelo que sei teria que criar um arquivo externo. Mas ai para cada input terei que criar um arquivo externo? se for assim ai fica mais trabalhoso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Precisa não. 

Olha, da uma olhada nesse tutorial:

http://clubedosgeeks.com.br/programacao/listando-registro-de-banco-de-dados-mysql-com-ajax-json-e-php

 

Ao invés de fazer a chamada ajax no $(document).ready(), tu faria no .onchange do select.

E ao invés de printar os dados em uma table, tu coloca nos input. 

Tenta seguir ele e qualquer duvida posta ai.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@wessleysanttos o lugar do listener do evento ficar é indiferente...

 

Veja um exemplo de jQuery:

<select name="funcionarios" id="funcionarios">
	<option value="">-- Selecione --</option>
	<option value="1">Funcionario 1</option>
	<option value="2">Funcionario 2</option>
</select>

<script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>

<script type="text/javascript">
$(document).ready(function() {
	//onchange....
	$( "#funcionarios" ).bind( "change", function() {
		var funcionarioSelecionado = $(this).val();
		alert(funcionarioSelecionado);
	});	
});
</script>

Live Demo:

https://fiddle.jshell.net/5qm9700r/

 

 

É a 'mesma' coisa que:

<select name="funcionarios" id="funcionarios" onchange="alert(this.value)">
	<option value="">-- Selecione --</option>
	<option value="1">Funcionario 1</option>
	<option value="2">Funcionario 2</option>
</select>

Live Demo:

https://fiddle.jshell.net/qwsvhtcq/

 

Que também é possível fazer sem jQuery:

<select name="funcionarios" id="funcionarios" onchange="alert(this.value)">
	<option value="">-- Selecione --</option>
	<option value="1">Funcionario 1</option>
	<option value="2">Funcionario 2</option>
</select>


<script type="text/javascript">
	document.getElementById("funcionarios").addEventListener("change", function() {
		alert(this.value);	
	});
</script>

Live demo sem jQuery + Listener:

https://fiddle.jshell.net/3tedze11/1/

 

 

 

Pode parecer que o segundo jeito é melhor em todos os casos.

Porem como evento fica inline qualquer linha que exija uma leitura ou muitos códigos fica complicado de ler.

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal com ajuda de vocês e com pesquisa na net, consegui fazer e esta funcionando da forma que queria, apenas tive que incluir um arquivo externo para fazer a busca no banco, mas não precisou fazer vários arquivos para cada input como imaginava:

 

No meu arquivo teste.php ficou assim:

 

<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
        <script type="text/javascript">
            $(document).ready(function () {
                $("select[name='nome']").change(function () {
                    var nome = $("input[name='nome']");
                    var sobrenome = $("input[name='sobrenome']");
                    var login = $("input[name='login']");

                    $(nome).val('Carregando...');
                    $(sobrenome).val('Carregando...');
                    $(login).val('Carregando...');

                    $.getJSON(
                            'function.php', // arquivo externo que faz as buscas no banco.
                            {id_cad_pf: $(this).val()},
                    function (json)
                    {
                        $(nome).val(json.nome);
                        $(sobrenome).val(json.sobrenome);
                        $(login).val(json.login);
                    }
                    );
                });
            });
        </script>

    </head>
    <body>
        <form action="" method="post">
            <label>Nome: </label>
            
            <select name="nome">
                <option value="">Seleciona um Usuario: </option>
                <?php
                include 'function19.php';
                echo montaSelect();
                ?>
            </select>
            
            <label>Nome: <input name="nome" type="text" disabled="disabled" value="" /></label>
            <label>Sobrenome: <input type="text" name="sobrenome" value="" /></label>
            <label>login: <input type="text" name="login" value="" /></label>
        </form>
    </body>
</html>

Ai no meu arquivo function.php fiz assim:

 

<?php
require_once("../DAO/conn.class.php");
require_once("../classes/classes.class.php");
$classe = new myclass;

function montaSelect() {
    $PDO_con = conectar();
    $busca_segura = $PDO_con->prepare("SELECT * FROM tb_cad_pf WHERE excluido != 'sim' ");
    $busca_segura->execute();
    if ($busca_segura == 1) {
        while ($dados = $busca_segura->fetch(PDO::FETCH_ASSOC)) {
            $opt .= '<option value="' . $dados['id_cad_pf'] . '">' . $dados['nome'] . '</option>';
        }
    } else {
        $opt = '<option value="0">Nenhum cliente cadastrado</option>';
    }
    return $opt;
}

/**
 * função que devolve em formato JSON os dados do cliente
 */
function retorna($id) {
    $PDO_con = conectar();
    $id = (int) $id;

    $busca_id = $PDO_con->prepare("SELECT * FROM tb_cad_pf WHERE id_cad_pf = '$id'");
    $busca_id->execute();

    $arr = Array();
    if ($busca_id == 1) {
        while ($dados_id = $busca_id->fetch(PDO::FETCH_ASSOC)) {
            $arr['nome'] = $dados_id['nome'];
            $arr['sobrenome'] = $dados_id['sobrenome'];
            $arr['login'] = $dados_id['codigo'];
        }
    } else
        $arr[] = 'endereco: não encontrado';

    return json_encode($arr);
}

/* só se for enviado o parâmetro, que devolve o combo */
if (isset($_GET['id_cad_pf'])) {
    echo retorna($_GET['id_cad_pf']);
}

Só não entendi ali no "function retorna($id)"  onde esta "$id = (int) $id", como que essa variável $id esta com o valor do $id pra fazer a consulta no banco se em nenhum momento eu estou setando esse $id. Para explicar melhor: se no select eu escolho o id 5, como que o $id assume esse valor se nenhum momento ele esta setado que $id esta com '5' .

Compartilhar este post


Link para o post
Compartilhar em outros sites
Citar

Pessoal com ajuda de vocês e com pesquisa na net


Que legal a ideia do forum é essa, ajudar a trilhar o caminho e não percorrer pra ti.

Citar

Para explicar melhor: se no select eu escolho o id 5, como que o $id assume esse valor se nenhum momento ele esta setado que $id esta com '5' .

Como não?


No Trecho em Javascript

 $.getJSON(
    'function.php', // arquivo externo que faz as buscas no banco.
    {id_cad_pf: $(this).val()},
    function (json){
        $(nome).val(json.nome);
        $(sobrenome).val(json.sobrenome);
        $(login).val(json.login);
    }
 );


 
Nesse momento você criou um Objeto em Javascript {}

E passou o parâmetro
 

id_cad_pf = $(this).val()

 Esse cara aqui é o value do Combo selecionado no evento (Lembra do evento?) 'change'

 

Ou seja assim q o evento ocorre é disparado.

 

Só toma cuidado com o escopo do this.

Tenta sempre 'armazenar' ele logo de inicio.
Exemplo:

$("select[name='nome']").change(function () {
    var nome = $("input[name='nome']");
    var sobrenome = $("input[name='sobrenome']");
    var login = $("input[name='login']");
    
    var id_cad_pf_selected = $(this).val();
    $(nome).val('Carregando...');
    $(sobrenome).val('Carregando...');
    $(login).val('Carregando...');
    $.getJSON(
         'function.php'
        ,{id_cad_pf: id_cad_pf_selected}
        ,function (json){
            $(nome).val(json.nome);
            $(sobrenome).val(json.sobrenome);
            $(login).val(json.login);
        }
    );
});


E isso dispara uma requisição HTTP com o _GET[id_cad_pf] = <valor>


Ficando algo assim:

function.php?id_cad_pf=5

 

Tem uma serie bem legal do Zeno explicando um pouco da aba 'NetWork', e como ela te auxilia a ler oq foi enviado.

https://www.youtube.com/watch?v=wsCCACcEtig&list=PLiGzvgwA5Gmgnq5vPjJxW52hDiX3ndL53&index=7

 

 

Recomendo a serie por completo:

https://www.youtube.com/watch?v=XUgfwYzv-WQ&list=PLiGzvgwA5Gmgnq5vPjJxW52hDiX3ndL53

 

Qualquer duvida estamos ai :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.

      Estou com uma dúvida, referente cálculo de valores em tempo real.

      Tenho uma rotina, que faz o cálculo, o problema é mostrar o resultado.

      Quero mostrar o RESULTADO assim: 0,00  ou  0.00

      Abaixo posto o código.
      jQuery('input').on('keyup',function(){ //Remover ponto e trocar a virgula por ponto var m = document.getElementById("pgRest").value; while (m.indexOf(".") >= 0) { m = m.replace(".", ""); } m = m.replace(",","."); //Remover ponto e trocar a virgula por ponto var j = document.getElementById("pgDsct").value; while (j.indexOf(".") >= 0) { j = j.replace(".", ""); } j = j.replace(",","."); m = parseFloat(jQuery('#pgRest').val() != '' ? jQuery('#pgRest').val() : 0); j = parseFloat(jQuery('#pgDsct').val() != '' ? jQuery('#pgDsct').val() : 0); //Mostra o Resultado em Tempo Real jQuery('#pgTroco').val(m - j); <<=== aqui estou errando })  
       
      Grato,
       
      Cesar
       
       
    • Por violin101
      Caro amigos, saudações.

      Tenho uma tabela escrita em JS que funciona corretamente.
       
      Minha dúvida:
      - como devo fazer para quando a Tabela HTML estiver vazia, exibir o LOGO da Empresa ?

      Abaixo posto o script:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'i' ) return;// Não é Ctrl+A, portanto interrompemos o script evt.preventDefault(); //Chama a Função Calcular Qtde X Valor Venda calcvda(); var idProdutos = document.getElementById("idProdutos").value; var descricao = document.getElementById("descricao").value; var prd_unid = document.getElementById("prd_unid").value; var estoque_atual = document.getElementById("estoque_atual").value; var qtde = document.getElementById("qtde").value; var vlrunit = document.getElementById("vlrunit").value; var vlrtotals = document.getElementById("vlrtotal").value; var vlrtotal = vlrtotals.toLocaleString('pt-br', {minimumFractionDigits: 2}); if(validarConsumo(estoque_atual)){ //Chama a Modal com Alerta. $("#modal_qtdemaior").modal(); } else { if(qtde == "" || vlrunit == "" || vlrtotal == ""){ //Chama a Modal com Alerta. $("#modal_quantidade").modal(); } else { //Monta a Tabela com os Itens html = "<tr style='font-size:13px;'>"; html += "<td width='10%' height='10' style='text-align:center;'>"+ "<input type='hidden' name='id_prds[]' value='"+idProdutos+"'>"+idProdutos+"</td>"; html += "<td width='47%' height='10'>"+ "<input type='hidden' name='descricao[]' value='"+descricao+"'>"+descricao+ "<input type='hidden' name='esp[]' value='"+prd_unid+"'> - ESP:"+prd_unid+ "<input type='hidden' name='estoq[]' value='"+estoque_atual+"'></td>"; html += "<td width='10%' height='10' style='text-align:center;'>"+ "<input type='hidden' name='qtde[]' value='"+qtde+"'>"+qtde+"</td>"; html += "<td width='12%' height='10' style='text-align:right;'>"+ "<input type='hidden' name='vlrunit[]' value='"+vlrunit+"'>"+vlrunit+"</td>"; html += "<td width='14%' height='10' style='text-align:right;'>"+ "<input type='hidden' name='vlrtotal[]' value='"+vlrtotal+"'>"+vlrtotal+"</td>"; html += "<td width='12%' height='10' style='text-align:center;'>"+ "<button type='button' class='btn btn-uvas btn-remove-produto' style='margin-right:1%; padding:1px 3px; font-size:12px;' title='Remover Item da Lista'>"+ "<span class='fa fa-minus' style='font-size:12px;'></span></button></td>"; html += "</tr>"; $("#tbventas tbody").append(html); //Função para Somar os Itens do Lançamento somar(); $("#idProdutos").val(null); $("#descricao").val(null); $("#prd_unid").val(null); $("#qtde").val(null); $("#vlrunit").val(null); $("#vlrtotal").val(null); $("#idProdutos").focus(); //Se INCLUIR NOVO produto - Limpa a Forma de Pagamento $("#pgSoma").val(null); $("#pgRest").val(null); $("#pgDsct").val(null); $("#pgTroco").val(null); $("#tbpagar tbody").empty(); }//Fim do IF-qtde }//Fim do Validar Consumo });//Fim da Função btn-agregar  
      Grato,

      Cesar
       
    • Por violin101
      Caros amigos, saudações.

      Estou com uma pequena dúvida se é possível ser realizado.

      Preciso passar 2 IDs para o Sistema executar a função, estou utilizando desta forma e gostaria de saber como faço via JS para passar os parâmetro que preciso.

      Observação:
      Dentro da TABELA utilizei 2 Forms, para passar os IDS que preciso, funcionou conforme código abaixo.
      <div class="card-body"> <table id="tab_clie" class="table table-bordered table-hover"> <thead> <tr> <th style="text-align:center; width:10%;">Pedido Nº</th> <th style="text-align:center; width:10%;">Data Pedido</th> <th style="text-align:center; width:32%;">Fornecedor</th> <th style="text-align:center; width:10%;">Status</th> <th style="text-align:center; width:5%;">Ação</th> </tr> </thead> <tbody> <?php foreach ($results as $r) { $dta_ped = date(('d/m/Y'), strtotime($r->dataPedido)); switch ($r->pd_status) { case '1': $status = '&nbsp;&nbsp;Aberto&nbsp;&nbsp;'; $txt = '#FFFFFF'; //Cor: Branco $cor = '#000000'; //Cor: Preta break; case '2': $status = 'Atendido Total'; $txt = '#FFFFFF'; //Cor: Branco $cor = '#086108'; //Cor: Verde break; case '3': $status = 'Atendido Parcial'; $txt = '#000000'; //Cor: Branco $cor = '#FEA118'; //Cor: Amarelo break; default: $status = 'Cancelado'; $txt = '#FFFFFF'; //Cor: Branco $cor = '#D20101'; //Cor: Vermelho break; } echo '<tr>'; echo '<td width="10%" height="10" style="text-align:center;">'.$r->pd_numero.'</td>'; echo '<td width="10%" height="10" style="text-align:center;">'.$dta_ped.'</td>'; echo '<td width="32%" height="10" style="text-align:left;">'.$r->nome.'</td>'; echo '<td width="10%" height="10" style="text-align:left;"><span class="badge" style="color:'.$txt.'; background-color:'.$cor.'; border-color:'.$cor.'">'.$status.'</span></td>'; echo '<td width="5%" style="text-align:center;">'; ?> <div class="row"> <?php if($this->permission->checkPermission($this->session->userdata('permissao'), 'vPedido')){ ?> <form action="<?= base_url() ?>compras/pedidos/visualizar" method="POST" > <input type="hidden" name="idPedido" value="<?php echo $r->idPedidos; ?>"> <input type="hidden" name="nrPedido" value="<?php echo $r->pd_numero; ?>"> <button class="btn btn-warning" title="Visualizar" style="margin-left:50%; padding: 1px 3px;"><i class="fa fa-search icon-white"></i></button> </form> <?php } if($this->permission->checkPermission($this->session->userdata('permissao'), 'ePedido')){ ?> <form action="<?= base_url() ?>compras/pedidos/editar" method="POST" > <input type="hidden" name="idPedido" value="<?php echo $r->idPedidos; ?>"> <input type="hidden" name="nrPedido" value="<?php echo $r->pd_numero; ?>"> <button class="btn btn-primary" title="Editar" style="margin-left:50%; padding: 1px 3px;"><i class="fa fa-edit icon-white"></i></button> </form> <?php } ?> </div> <?php echo '</td>'; echo '</tr>'; } ?> </tbody> </table> </div>
      Grato,

      Cesar.
    • Por belann
      Olá!
       
      Estou usando o editor quill em uma página html, sem fazer a instalação com npm, mas usando as api´s via internet com http, no entanto não consigo fazer a tecla enter funcionar para mudança de linha, tentei essa configuração abaixo, mas não funcionou.
       
      modules: {       syntax: true,       toolbar: '#toolbar-container',       keyboard: {         bindings: {           enter: {             key: 13,             handler: function(range, context) {                       quill.formatLine(range.index, range.length, { 'align': '' });             }           }  
       
    • Por violin101
      Caros amigos, saudações.
       
      Gostaria de poder tirar uma dúvida com os amigos.
       
      Como faço uma função para Comparar a Data Digitada pelo o Usuário com a Data Atual ?

      Data Digitada:  01/09/2024
       
      Exemplo:
      25/09/2024 é menor que DATA Atual  ====> mensagem: informe uma data válida.
      25/09/2024 é igual DATA Atual ===> o sistema libera os INPUT's.
       
      Como faço uma comparação com a Data Atual, para não Deixar Gravar Data retroativa a data Atual.
       
      Grato,
       
      Cesar
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.