Ir para conteúdo

POWERED BY:

Arquivado

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

gabriel_nunes

Submit de vários forms

Recommended Posts

Boa tarde pessoal,

 

To com uma dúvida que é a seguinte, tenho uma página de cadastro na qual possui um <select> para convênios médicos e outro para planos destes convênios.

 

O Problema é que conforme eu escolho o convênio os planos se alteram e no final eu preciso juntar essas informações com as demais do fulano e enviar.

 

A Troca do planos esta ocorrendo no onchange do convênio com a função submit() em um form separado das demais informações.

 

Tem alguma forma de fazer isso ou alguma outra coisa?

 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por que você fez assim? Por que separou em dois formulários distintos?

 

Dessa forma, solução existe, mas vai contra todas as boas práticas da programação, que seria após o último evento onChange ter sido disparado (supondo um sistema de não apenas dois combos), você atribuir os valores selecionados à elementos hidden previamente criados no outro formulário.

 

Mas é feio fazer isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

eae Bruno Augusto beles?

 

Então é andei pesquisando e de fato é erradão fazer mas seria mesmo para não criar uma página a mais e extender o cadastro do cidadão.

 

E também pelo fato de conter a opção "já sou cadastrado" que ao marcar desabilitaria os demais campos pedindo apenas ao usuário a inserção do código dele.

 

Mas estou aceitando sugestões inclusive a maneira correta hehehe.

 

Cheguei a criar um form com hidden's que após todo o preenchimento recebia os valores dos formulários e o botão chamava uma função JS que fazia o envio deste formulário.

 

Abs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posta o que você já tem e vamos ver o quão séria vai ser a cirurgia. :lol:

Compartilhar este post


Link para o post
Compartilhar em outros sites

eae Bruno Augusto...mals a demora..

 

então separei os formulários pra simplificar porém cai numa outra questão.

 

na página tenho o seguinte código.

 

<form method="post" name="frmConv">						
 <fieldset>														
    <legend><h3>Dados do convênio</h3></legend>
    <br />
    <label>Convênio:</label>
    <select name="selConvenio" onchange="submit()">									
        <?
        	$convenio = "";
               if(isset($_POST['selConvenio'])) {
       		$_SESSION['idConvenio'] = $_POST['selConvenio'];
	}

	$qryConv = "select ID_CAD005, C05_RAZAOSOCIAL from TBCAD005 order by C05_RAZAOSOCIAL ASC";

	$conteudoConv = ibase_query($conCliente, $qryConv);

       	while($convenio = ibase_fetch_object($conteudoConv)) {
                  if($_SESSION['idConvenio'] == $convenio->ID_CAD005) { 
		echo "<option name='selConvenio' selected='selected' value='" . $convenio->ID_CAD005 . "'>" . $convenio->C05_RAZAOSOCIAL ."</option>\n";
                  }else {											
		echo "<option name='selConvenio' value='" . $convenio->ID_CAD005 . "'>" . $convenio->C05_RAZAOSOCIAL ."</option>\n";
                  }
       	?>
</select>								
<br /><br />
<label>Plano: </label>
<select name="selPlano">									
<?
   $plano = "";
          $idConvenio = $_SESSION['idConvenio'];
          $qryPlano = "select ID_CAD011, C11_DESCRICAO from TBCAD011 where ID_CAD005 =" . $idConvenio . " order by C11_DESCRICAO ASC";

          if(!empty($idConvenio)) { 
	$qryPlano = "select ID_CAD011, C11_DESCRICAO from TBCAD011 where ID_CAD005 =" . $idConvenio . " order by C11_DESCRICAO ASC";
	$conteudoPlano = ibase_query($conCliente, $qryPlano);

	while($plano = ibase_fetch_object($conteudoPlano)) {
               	echo "<option name='selPlano' value='" . $plano->ID_CAD011 . "'>" . $plano->C11_DESCRICAO ."</option>\n";
	}
   }
?>
       </select>								
<br /><br />
   </fieldset>	
</form>

 

o problema é que no onchange do convenio eu do o submit pra poder selecionar o plano e só após isso eu teria que enviar essas informações para a página seguinte.

 

não sei o que fazer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então cara, isso é errado.

 

Ao meu ver, o evento onChange() existe justamente para você não submeter o formulário como nesses casos.

 

No onChange() você dispara um AJAX para um outro URL que lista os dados e retorna aquilo que montará o menu.

 

Assim você terá umapágina com o formulário trabalhando com outra(s) nos bastidores para montar o formulário final, o qual passará por um único submit para, normalmente, um terceiro URL, do programa receptor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

oi @gabriel_nunes,

 

aqui tem um script meu usando jQuery para fazer a dependência entre combos:

http://wbruno.com.br/2009/10/06/combos-dependentes-ajax-jquery/

Compartilhar este post


Link para o post
Compartilhar em outros sites

oi William Bruno

 

Valeu pela ajuda...vou estudar melhor esse material assim que conseguir algo ou empacar eu respondo aki..

 

grato pela ajuda o/

 

esqueci de perguntar algo..

 

pra usar jquery preciso instalar alguma biblioteca ou é copiar, colar e adaptar o código?

 

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

-> William

tem um trecho no código

    $.getJSON(//esse método do jQuery, só envia GET  
        'selConvenio.php',//script server-side que deverá retornar um objeto jSON  
        {idConvenio: idConvenio},//enviando a variável  

 

porém para fazer o while no arquivo .php eu preciso de dois parametros a mais alem do idConvenio só que são variaveis php..então minha duvida é como posso passar mais essas duas variaveis?

 

-> Lucas Guima

vlw por responder o motivo msm da duvida foi se no servidor onde vai hospedar minhas páginas eu preciso ter a biblioteca instalada.

 

 

grato pela ajuda o/

Compartilhar este post


Link para o post
Compartilhar em outros sites

porém para fazer o while no arquivo .php eu preciso de dois parametros a mais alem do idConvenio só que são variaveis php..então minha duvida é como posso passar mais essas duas variaveis?

Tá vendo essa linha:

 

{idConvenio: idConvenio},//enviando a variável

Isso é um objeto JavaScript.

 

Você pode adicionar tantas variáveis quantas precisar, separando-as por vírgulas sendo sempre "em pares", separados pelo dois-pontos:

 

{
   idConvenio: idConvenio,
   outraVariavel: outroValor,
   outraVariavel: outroValor,
   outraVariavel: outroValor,
   outraVariavel: outroValor
},//enviando a variável

 

vlw por responder o motivo msm da duvida foi se no servidor onde vai hospedar minhas páginas eu preciso ter a biblioteca instalada.

Você não "instala" nada.

 

Você apenas coloca uma tag script apontando pro URL onde o arquivo se encontra, seja no seu próprio host ou em outro externo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Salve,

 

Eu de novo...

 

Cara fiz tudo certinho adaptei o código pro banco de dados que utilizo aqui e coloquei la o <script> do jquery no inicio mas o que acontece é.

 

Seleciono o comboBox de convênios e ai ele trava o navegador depois que libera não acontece nada.

 

Segue código

 

Página principal

<? 
session_start();
$idCliente = 2;
$pacienteCad = "nao";
$cartPac = 11;
$nomePac = "teste";
$telPac = 11;
$celPac = 11;
$current = "agenda";

require("../conexao/mysql.php");

$conteudoEstab = mysql_query("select * from TB_ESTABELECIMENTO where ID_ESTABELECIMENTO =" . $idCliente);
$estab = mysql_fetch_array($conteudoEstab);

$ipEstab = $estab['IP_ESTABELECIMENTO'];
$bdEstab = "C:\Desenvolvimento\Database\DESENVOLVIMENTO.FDB";

$conCliente = ibase_connect($ipEstab . ":" . $bdEstab, "pwd", "dba");	
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  <head>
     <title>WebAgenda</title>
     <link href="../styles/styles.css" rel="stylesheet" type="text/css" media="screen" />
     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
     <script type="text/javascript">  
$(document).ready(function(){//inicio o jQuery  
  	$("select[name='selConvenio']").change(function(){  
            var idConvenio = $(this).val();//pegando o value do option selecionado  
     var ipEstab = document.getElementById('ipEstab');  
     var bdEstab = document.getElementById('bdEstab');  

     $.getJSON(//esse método do jQuery, só envia GET  
         'carrega_plano.php',  
         {
        	idConvenio: idConvenio,
               	ipEstab: ipEstab,
               	bdEstab: bdEstab
          },  

          function(data){  

               var option = new Array();  
                      resetaCombo('selPlano');//resetando o combo  
	       $.each(data, function(i, obj){  
                         option[i] = document.createElement('option');//criando o option  
                         $( option[i] ).attr( {value : obj.id} );//colocando o value no option  
                         $( option[i] ).append( obj.nome );//colocando o 'label'  
                         $("select[name='selPlano']").append( option[i] );//jogando um à um os options no próximo combo  
               });  
	   });  
         });  
      });   

    /* função pronta para ser reaproveitada, caso queria adicionar mais combos dependentes */  
    function resetaCombo( el )  
    {  
        $("select[name='"+el+"']").empty();//retira os elementos antigos  
      	           var option = document.createElement('option');                    
	   $( option ).attr( {value : '0'} );  
	   $( option ).append( 'Escolha' );  
	   $("select[name='"+el+"']").append( option );  
    }  
   </script>
...

          <select name="selConvenio" id="selConvenio">									
     	   <?
	$convenio = "";
	$qryConv = "select ID_CAD005, C05_RAZAOSOCIAL from TBCAD005 order by C05_RAZAOSOCIAL ASC";
	$conteudoConv = ibase_query($conCliente, $qryConv);

 	        while($convenio = ibase_fetch_object($conteudoConv)) {
	     echo "<option name='selConvenio' value='" . $convenio->ID_CAD005 . "'>" . $convenio->C05_RAZAOSOCIAL ."</option>\n";
         	}
   ?>
  	   </select>								
  	   <br /><br />
	   <select name="selPlano" id="selPlano">									
       <option value="">SELECIONE</option>				
   </select>								
 	</fieldset>	
     </form>
...

 

PHP

<?
$plano = "";

	function intGet( $campo ){  
       return isset( $_GET[$campo] ) ? (int)$_GET[$campo] : 0;  
  }   

function retornoId($idConv){
	$conCliente = ibase_connect({$ipEstab} . ":" . {$bdEstab}, "pwd", "dba");	
	$qryPlano = "select ID_CAD011, C11_DESCRICAO from TBCAD011 where ID_CAD005 = {$idConv} order by C11_DESCRICAO ASC";

	$conteudoPlano = ibase_query($conCliente, $qryPlano);

	$json = array();		

	while($plano = ibase_fetch_object($conteudoPlano)) {
		$json[] = array('descricao'=> utf8_encode($plano->C11_DESCRICAO), 'idConv'=>$plano->ID_CAD011);
	}

	return json_encode($json);
}	
?>

 

Não sei onde estou errando...se puderem me quebrar esse galho ainda agradeço

 

Abs o/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Difícil dizer sem você nos nomear os códigos a seus respectivos arquivos.

 

Por exemplo, sua requisição AJAX é feita para uma página carrega_plano.php. Mas qual o código dessa página? Seria esse segundo, apenas descrito como "PHP"?

 

Se for, quem está invocando a função retornoId()? Apenas declarar a função no arquivo não basta, tem de invocá-la, informando à seus argumentos os valores vindos via $_GET.

 

Mais... Seu HTML está uma bagunça tremenda. JavaScript no <head> não está 100% errado,só é ruim para performance, mas tem HTML da página dentro dessa tag, não tem <body>, teu Mform>não está abrindo...

 

Enfim... Sugestão? Começa a página do zero.Primeiro monta o HTML certo, depois coloca os primeiros PHP's para funcionar (pode até "falsificar um ID para testar). Tudo certinho, desfaz a "falsificação" e monta o AJAX.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eae man...

 

Sim o "PHP" é o carrega_plano.php de fato deveria ter colocado o nome correto.

 

Sobre o javascript esta assim para finalidades de teste e desenvolvimento...depois faço a coisa certa hehehe..

 

Quanto a página fui eu que tirei na hora de postar aqui coloquei só o que pra mim era necessário que era o form e os combos tanto que coloquei os "..." no meio do código.

 

Se for o caso mando de novo o html completo.

 

Sobre não chamar a função isso é o que esta no tuto do amigo lá.

 

Como posso arrumar to pesquisando que nem um doido por soluções mas ta difícil.

 

Abs,

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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