Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) ID segundo combo p/ gravar no BD


supinet

Pergunta

Bom dia!

Prezados Senhores,

Esse é meu primeiro post e para cria-lo já rodei por 32 páginas antes, para tentar entender o que eu estou precisando e não consegui. Tenho certeza que para os que estão mais habituados com Ajax, rapidamente vão entender e me ajudar, espero.

Então:

Estamos desenvolvendo uma solução, onde o usuário através de um combo chamado princial, seleciona uma operadora de telefonia:

As operadora são listas no combo e quando selecionadas, utilizando o onChange, chama a função que carrega o segundo combo com as faturas dessa operadora.

NECESSIDADE:

Pegar o ID do segundo combo para que eu possa gravar no banco de dados.

---chamada do arquivo com o JS

<script language="javascript" type="text/javascript" src="arquivo_ajax.js"></script>
--- Primeiro combo listando diretamente do BD
<select name="principal" onChange="java script:mudar(this.value);">
---Segundo combo carregado pela DIV ---Como pegar esse ID aqui que o usuário selecionou para que eu possa gravar no banco de dados
<td>FATURA</td>
    <td><div id="mostraCombo">
    <select name="combofinal">
        <option>SELECIONE UMA OPERADORA PRIMEIRO</option>
      </select>
    </div>
--- arquivo_ajax.js
//CRIA A VARIÁVEL RETORNO
var retorno;
function CarregaArquivo(url,valor)
{
    retorno = null;
    //CRIA O OBJETO HttpRequest PARA O RESPECTIVO NAVEGADOR
    //Mozilla Fire Fox / Safari ...
    //
    if (window.XMLHttpRequest) {
        retorno = new XMLHttpRequest();
        //SETA A FUNÇÃO QUE SERÁ CHAMADA QUANDO O AJAX DER UM RETORNO
        retorno.onreadystatechange = processReqChange;
         //ABRE A REQUISIÇÃO AJAX, PASSANDO O MÉTODO DE ACESSO, URL E O PARÂMETRO
        retorno.open("GET", url+'?principal='+valor, true);
        //INICIA O TRANSPORTA DOS OBJETOS NA REQUISIÇÃO
        retorno.send(null);
    } else if (window.ActiveXObject) {
        //
        //IE
        //
        retorno = new ActiveXObject("Microsoft.XMLHTTP");
        if (retorno) {
            //SETA A FUNÇÃO QUE SERÁ CHAMADA QUANDO O AJAX DER  UM RETORNO
            retorno.onreadystatechange = processReqChange;
            //ABRE A REQUISIÇÃO AJAX, PASSANDO O MÉTODO DE ACESSO, URL E O PARÂMETRO
            retorno.open("GET", url+'?principal='+valor, true);
            //INICIA O TRANSPORTA DOS OBJETOS NA REQUISIÇÃO
            retorno.send();
        }
    }
}
//FUNÇÃO QUE TRATA O RETORNO DO AJAX
function processReqChange()
{
    //CASO O STATUS DO AJAX SEJA OK, CHAMA A FUNÇÃO mudar()
    //A LISTA COMPLETA DOS VALORES readyState É A SEGUINTE:
    //0 (uninitialized) 
    //1 (a carregar) 
    //2 (carregado) 
    //3 (interactivo) 
    //4 (completo) 
    if (retorno.readyState == 4)
    {
        if(retorno.status == 200) 
            {
                //PROCURA PELA DIV MOSTRACOMBO E INSERE O OBJETO
                document.getElementById('mostraCombo').innerHTML = retorno.responseText;
            } 
                else 
                {
                    //MOSTRA UM ALERTA AO OBTER UM RETORNO DE OK.
                    alert("Houve um problema ao obter os dados:n" + retorno.statusText);
                }
   }
}

//FUNÇÃO MUDAR, QUE CHAMA AS INFORMAÇÕES PASSADAS NO PARÂMETRO E CARREGA O ARQUIVO EXTERNO
function mudar(valor)
{
    //CARREGA O ARQUIVO EXTERNO DO AJAX
    CarregaArquivo("mostra_combo.php",valor);
}

---mostra_combo “consulta sql referenciando a operadora para trazer as “faturas””

   $sqlFatura = "SELECT FAT.FAT_ID AS ID, FAT.VALOR AS VALOR, FAT.FAT_MES_REF AS MES FROM COM_FATURA FAT WHERE FAT.OPE_ID = '".$_GET['principal']."'";

  $sqlFatura = ociparse($obj,$sqlFatura) or die("Erro");
                 ociexecute($sqlFatura,OCI_DEFAULT);
   while (ocifetch($sqlFatura))
       {
?>       
          <option value="<?= ociresult($sqlFatura,'ID');?>"><? echo ociresult($sqlFatura,'MES');?> </option>
<?
       }
       ocifreestatement($sqlFatura);
       ocilogoff($sqlFatura); 
?>
</select>

$fat_id = $_POST['combofinal'];

$sql4 = ociparse($obj,"INSERT INTO COM_MOV_LIGACAO_FIXO (OPE_ID, FAT_ID, NUMERO, DATA_LIGACAO, NUMERO_DISCADO, HORA_INICIO, DURACAO, VALOR, TRONCO, TIPO_LIGACAO)  VALUES('$ope_id','$fat_id','$telefone', TO_DATE('$dataLigacao','DD/MM/YYYY'),'$numeroDiscado', TO_DATE('$horaInicio','HH24:MI:SS'), TO_DATE('$duracao','HH24:MI:SS'), '$valor','$tronco', '$tipoLigacao')") or die("Erro");

Espero que tenha passado a minha necessidade, quem puder ajudar desde já agradeço

Link para o comentário
Compartilhar em outros sites

13 respostass a esta questão

Posts Recomendados

  • 0

Foi exatamente isso que tentei! Porém esse combofinal, serve somente para mostrar para o usuário que ele deve primeiramente selecionar uma operadora. Então quando ele seleciona a operadora carrega-se a DIV com os dados da fatura dessa operadora, ai entra a questão como pegar o ID:

<td>FATURA</td>

<td><div id="mostraCombo"> <<<<-------essa é a DIV que foi processa através do Ajax, como pegar o ID da fatura?

<select name="combofinal"> <<<<<-------aqui é o que vem diretamente, só para avisar o usuário que ele tem que escolher uma operadora antes.

<option>SELECIONE UMA OPERADORA PRIMEIRO</option>

</select>

</div>

Obrigado!

Link para o comentário
Compartilhar em outros sites

  • 0

Na verdade seria o da: <td><div id="mostraCombo"> que é processada pelo ajax.

Que provem desse arquivo:

<?php include("conexao.php"); ?>
  <select name="resultado">
  <option>SELECIONE UMA FATURA</option>
<?php

   $sqlFatura = "SELECT FAT.FAT_ID AS ID, FAT.VALOR AS VALOR, FAT.FAT_MES_REF AS MES FROM COM_FATURA FAT WHERE FAT.OPE_ID = '".$_GET['principal']."'";

  $sqlFatura = ociparse($obj,$sqlFatura) or die("Erro");
                 ociexecute($sqlFatura,OCI_DEFAULT);
   while (ocifetch($sqlFatura))
       {
?>       
          <option value="<?= ociresult($sqlFatura,'ID');?>"><? echo ociresult($sqlFatura,'MES');?> </option>
<?
       }
       ocifreestatement($sqlFatura);
       ocilogoff($sqlFatura); 
?>
</select>

Como pegar essa ID, sendo que o valor processado esta lá na outra página em forma de DIV.

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, to perdidinho perdidinho...

você não tá querendo o $_REQUEST["resultado"]; ?????

Não é o combo do resultado que você quer?????

Nossa véi...to viajando....

off-topic: Só eu chamo o select de select ??

Combo pra mim é usar um soco + um chute + um hadouken.

Link para o comentário
Compartilhar em outros sites

  • 0

Eu preciso pegar o valor do ID que veio do banco que estou mostrando nessa DIV

<div id="mostraCombo"> Essa DIV já é o resultado de uma select * from BD.

<script>

alert(document.getElementById('mostraCombo').innerHTML);

</script>

Coloquei um alert para tentar trazer esse resultado, mas trás o seguinte: mostraCombo

Não sei se tem qual a instrução e nem como aplicar para trazer esse ID.

Mas estamos quase lá.

Obrigado novamente!

Link para o comentário
Compartilhar em outros sites

  • 0
eu falo combo porque select da mais ideia de select no banco

Tens razão...e faz sentido.

Vamo tentar resolver essa p***...o problema eu acho não tá no código viu supinet...eu acho é que não estamos falando na mesma lingua mesmo...rsrsrsrs

<div id="mostraCombo">
<select name="resultado">
  <option value="fatura0">Fatura 0</option>
    <option value="fatura1">FATURA 1</option>
     <option value="fatura2">FATURA 2</option>
      <option value="fatura3" selected>FATURA 3</option>

</select>
</div>

Seguinte, vou dividir o código numa seção menor, porque eu to com a pequena impressão de que a coisa ta no html.

$_REQUEST["resultado"];

retorna =>fatura3

document.getElementById('mostraCombo').getElementsByTagName('select')[0].options.value

retorna => fatura3

document.getElementById('mostraCombo').id

retorna o id do mostraCombo, o que é uma idiotice né....

Olha só...você percebe que os options precisam ter um value???

Perceba que no meu html eu coloco um value em cada option, porque senão a variável "resultado" terá valor nulo, pois o burro do computador não sabe qual das opções foi escolhida....

Meu.....se for esse o problema eu vou até ae te bater!! :angry:

Se não for, você vai precisar pensar numa forma de explicar melhor o que você quer, porque eu sou muito lerdo...tenha paciência...demora pra mula aqui desempacar...

Kelabrasssssss

Link para o comentário
Compartilhar em outros sites

  • 0
você tem q fazer a requisição retornar um xml, e com esse xml criar os elementos

Opa, tem algum exemplo dessa situação?

Aqui no caso, depois que o usuário selecionou a operadora no combo principal o onChange, processa passando o valor da operadora e eu recupero processando através do arquivo_ajax.js todas essas faturas através do select * from BD. Até aqui tudo ótimo.

No código abaixo,

if(retorno.status == 200) 
            {
            //PROCURA PELA DIV MOSTRACOMBO E INSERE O OBJETO
            document.getElementById('mostraCombo').innerHTML = retorno.responseText;
dentro ainda do arquivo_ajax.js faz percorrer todo o outro arquivo que o usuário vai ver e nesse arquivo é tem uma DIV chamada: mostraCombo:
<td><div id="mostraCombo">
logo ele coloca aqui o meu comboBox, que é uma
select * from DB

em outro arquivo chamado mostra_combo.php com as informações da fatura da referida operadora.

Como a DIV é mostrada em outro arquivo, aquele arquivo que o usuário só vê, creio que antes tenho que pegar esse ID no arquivo mostra_combo.php ou no arquivo_ajax.js e levar para o importar.php que o arquivo que eu realizo o INSERT no BD.

Eu não sei como pegar o valor desse ID que é o meu faturaId que eu busco do BD.

Porém se eu consigo mandar a DIV para lá, também deve ter um jeito de mandar os valores que eu puxo do BD.

Link para o comentário
Compartilhar em outros sites

  • 0

Boa tarde!

Prezados, obrigado pelo apoio, a situação foi resolvida:

<tr>
    <td>FATURA</td>
    <td><div id="mostraCombo">    
      <select name="combofinal" disabled="disabled">
        <option>SELECIONE UMA OPERADORA PRIMEIRO</option>
      </select></div></td>
      &lt;script language="JavaScript" type="text/JavaScript">
       var sele = document.getElementById('mostraCombo').getElementsByTagName('select')[0];
       var valorSelecionado = sele.options[sele.selectedIndex].value;
      </script>
  </tr>
.
.
.
$fat_id = $_POST['resultado'];
.
.
.
INSERT BD. (commit...)

por: http://forum.wmonline.com.br/index.php?showtopic=189378

Obrigado: Alex Hiroshi

supiNet

Link para o comentário
Compartilhar em outros sites

  • 0

<tr>

<td>FATURA</td>

<td><div id="mostraCombo">

<select name="combofinal" disabled="disabled">

<option>SELECIONE UMA OPERADORA PRIMEIRO</option>

</select></div></td>

&lt;script language="JavaScript" type="text/JavaScript">

var sele = document.getElementById('mostraCombo').getElementsByTagName('select')[0];

var valorSelecionado = sele.options[sele.selectedIndex].value;

</script>

</tr>

.

.

.

$fat_id = $_POST['resultado'];

.

.

.

INSERT BD. (commit...)

:huh:

$_REQUEST["resultado];

retorna =>fatura3

document.getElementById('mostraCombo').getElementsByTagName('select')[0].options.value

retorna => fatura3

Vai entender....O que importa é que funcionou né.

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Pessoal,

Sei que esses posts são bem antigos, mas quem sabe alguém dessa turma ainda esteja ativo no fórum.

Estou com o mesmo problema e não entendi como ficaria a solução que vocês adotaram para resolver esse caso.

Tenho os seguintes códigos:

teste_combo.php

<?php

//includes:
require("./includes/class_pag.php");

$pag = new cl_pagDetalhes();
$pag->cabecalho('taRequisicao');

?>
<body>
     <select name="estado" id="estado" onChange="CarregaCidades(this, 'lista_cidades')">
        <option selected="selected" value="null">Selecione um estado...</option>
        <?php
          $vwSecao = new cl_vwCentroCustoRequisicao();
          $vwSecao->selCentroCusto();
            while( $vwSecao->pop() ) {
              echo "\n<option value=\"";
              echo $vwSecao->req("IDCentroCusto");
              echo "\">";
              echo $vwSecao->req("NomeCentroCusto");
              echo "</option>\n";
            }
        ?>      
        </select>
<br>
<br>
<div id='lista_cidades'>Selecione um estado primeiro…</div>
<br>
<br>
<?php
  $IdCidade = $_POST['valorSelecionado'];
  echo "Id da Cidade = " + $IdCidade;
?>
</body>

&lt;script type="text/javascript">
//<![CDATA[
function CarregaCidades( SelectEstado, div_destino )
{
  // Nova requisio AJAX do prototype
  alert(SelectEstado.value);
  new Ajax.Request('backend.php?estadoId=' + SelectEstado.value,
  {
    method     : 'get',
    onCreate:function()
    {
      $(div_destino).innerHTML = 'Carregando as cidades...';
    }, // onCreate
    onComplete : function(transport)
    {
      if(transport.status==200)
      {
        $(div_destino).innerHTML = transport.responseText; 
      } // transport.status
    } // onComplete
  }); // ajax Request
} // function CarregaCidades
//]]>
</script>
backend.php
<?php
//includes:
require("./includes/class_pag.php");
$pag = new cl_pagDetalhes();
$pag->cabecalho('taRequisicao');
?>
<select id="cidade" name="cidade"  onChange="Atualiza_Dados();">
  <option selected="selected" value="null">Selecione um estado...</option>
<?php
  $get["estadoId"] = trt_numInt($get["estadoId"]);  
  echo "Teste:" + $get["estadoId"];
  $vwFuncionario = new cl_vw_Funcionario();
  $vwFuncionario->selFuncionario($get["estadoId"]);
  //$vwFuncionario->selFuncionario(403);
  while( $vwFuncionario->pop() ) {
    echo "\n<option value=\"";
    echo $vwFuncionario->req("IDFuncionario");
    echo "\">";
    echo $vwFuncionario->req("NomeFuncionario");
    echo "</option>\n";
  }
?>      
</select>

&lt;script type="text/javascript">
  function Atualiza_Dados() {
       var valorSelecionado = document.getElementById('cidade').getElementsByTagName('select')[0].options.value;
       $_REQUEST["valorSelecionado"];
       //var valorSelecionado = sele.options[sele.selectedIndex].value;  
  }
// -->
</script>

Peço para que não liguem para os nomes, pois é somente um teste. Como faço para retornar o id do combo de funcionários ?

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...