Jump to content
Fórum Script Brasil
  • 0

(Resolvido) ID segundo combo p/ gravar no BD


supinet

Question

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 to comment
Share on other sites

13 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152k
    • Total Posts
      651.6k
×
×
  • Create New...