Ir para conteúdo

POWERED BY:

Arquivado

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

haruan

[Resolvido] Erro com jquery mudando combobox

Recommended Posts

Bom Dia,

 

estou usando jquey para mudar os itens de uma combobox quando seleciono um item em outra.

 

Com 1 dupla de de boxes funciona normal, agora se eu coloco mais 1 dupla, a segunda dupla chama a função da primeira combo.

 

Os scripts que mudam as combos sao os scripts abaixo.

 

$('#ref').change(
                    function()
                    {
                        $('#subref').html('<option value="">Loading...</option>');

                        $.post(
                            'ajax/subreferente.php',{ref:$(this).val()},function(resposta)
                            {
                                $('#subref').html(resposta);
                            }
                        );
                    }
                );

			$('#banco').change(
                    function()
                    {
                        $('#cartao').html('<option value="">Loading...</option>');

                        $.post(
                            'ajax/card.php',{banco:$(this).val()},function(resposta)
                            {
                                $('#cartao').html(resposta);
                            }
                        );
                    }
                );

o os combos ref e subref funcionam certinho,

agora os combos banco e cartao, quando mudo o combo banco

o combo cartao retorna o seguinte erro

Imagem Postada

 

alguem tem ideia de o que que eu fiz errado?

sou novo com jquery

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poste o conteudo do arquivo: ajax/subreferente.php

 

Com 1 dupla de de boxes funciona normal, agora se eu coloco mais 1 dupla, a segunda dupla chama a função da primeira combo.

não entendi isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando soh tem os combobox ref e subref, funciona normalmente,

quando tenho ref e subref, e banco e cartao,

a dupla banco e cartao chama o arquivo subreferente.php, mas ele devia chamar o arquivo card.php,

e eu nao sei porque o jquery esta chamando o arquivo errado.

 

Seguem os codigos dos arquivos

 

subreferente.php

 

<? require_once("../includes/require.php"); ?>
<?
$ref = $_POST["ref"];
	
 global $conn;

$SQL = "SELECT 
            id,  
            nome 
        FROM 
            fsubreferente 
        WHERE 
            freferente_id=".$ref; 

$varContent .= "<option value=''>-- Select --</option>\n";

$rs=mysql_query($SQL,$conn);

		for($i=0;$row=mysql_fetch_array($rs);$i++)
		{
			$varCodSubRef=$row['id'];
			$varStrNameSubRef=$row['nome'];
			$varContent .= "<option value='$varCodSubRef'>$varStrNameSubRef</option>\n";
		}
			echo $varContent;

?>

card.php

 

<? require_once("../includes/require.php"); ?>
<?
$banco = $_POST["banco"];
	
 global $conn;

$SQL = "SELECT 
            id,  
            nome 
        FROM 
            fcartao
        WHERE 
            fbanco_id=".$banco; 

$varContent .= "<option value=''>-- Select --</option>\n";

$rs=mysql_query($SQL,$conn);

		for($i=0;$row=mysql_fetch_array($rs);$i++)
		{
			$varCodCartao=$row['id'];
			$varStrNameCartao=$row['nome'];
			$varContent .= "<option value='$varCodCartao'>$varStrNameCartao</option>\n";
		}
			echo $varContent;

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

No Firefox, com a extensão Webdeveloper, você tem a opção "Visualizar Código-Fonte gerado".

 

Execute o primeiro change() e acesse essa opção e veja se os atributos value do combo afetado pelo primeiro estão sendo preenchidos adequadamente.

 

Pergunto pelo fato de o retorno AJAX do seu primeiro combo ficou esquisito misturando aspas duplas e simples. Eu aconselharia você concatenar:

 

$varContent .= "<option value='" . $varCodSubRef . "'>" . $varStrNameSubRef . "</option>\n";

 

Se os valores estiverem certos, adicione outro para de aspas duplas na sua query pois do jeito que está, isso:

 

"SELECT id, nome FROM fcartao WHERE fbanco_id=".$banco;

Retorna, num print, isso:

SELECT id, nome FROM fcartao WHERE fbanco_id=VALOR DO COMBO
Quando deveria retornar:

SELECT id, nome FROM fcartao WHERE fbanco_id="VALOR DO COMBO"
Isto é, com o valor envolvido peas aspas.

 

Sugiro trocar sua query para:

 

'SELECT id, nome FROM fcartao WHERE fbanco_id="' . $banco . '"';

 

P.S.: Você não está se preocupando com a segurança de sua apicação. Deveria verificar desde o básico [isset(), empty() ] até os tratamentos imples [trim(), addslashes() ] e escapar os valores as função PHP mysql_real_escape_strig()

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza, corrigi os itens,

e os valores estao sendo retornados corretamente.

mas o erro na combobox permanece

 

<tr>
                          <td>Banco:</td>
                          <td><select name="banco" id="banco">
                          <option value="">Selecione</option>

                                                        <option value="1">asd</option>
                                                      </select></td>
                        </tr>
                        <tr>
                          <td>Cartao:</td>
                          <td><select name="cartao" id="cartao"><br>
<b>Warning</b>:  mysql_query(): supplied argument is not a valid MySQL-Link resource in <b>/Users/toor/Sites/fluxo/ajax/subreferente.php</b> on line <b>17</b><br>

<br>
<b>Warning</b>:  mysql_fetch_array(): supplied argument is not a valid MySQL result resource in <b>/Users/toor/Sites/fluxo/ajax/subreferente.php</b> on line <b>19</b><br>
-- Select --
-- Select --
-- Select --
asdasd
</select></td>
                        </tr>

O problema é que na função do jquery ele deveria chamar o arquivo ajax/card.php

 

$('#banco').change(
                    function()
                    {
                        $('#cartao').html('<option value="">Loading...</option>');

                        $.post(
                            'ajax/card.php',{banco:$(this).val()},function(resposta)
                            {
                                $('#cartao').html(resposta);
                            }
                        );
                    }
                );

E nao o arquivo ajax/subreferente.php, como aparece.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse erro ai não é no jQuery não.

Nem tinha como ser.. poste esse arquivo onde você constrói os combobox aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sao aqueles 2 ali em cima que falaram para eu concatenar.

 

card.php

<? require_once("../includes/require.php"); ?>
<?
$banco = $_POST["banco"];
	
 global $conn;

$SQL = "SELECT 
            id,  
            nome 
        FROM 
            fcartao
        WHERE 
            fbanco_id='$banco'";

$varContent .= "<option value=''>-- Select --</option>\n";

$rs=mysql_query($SQL,$conn);

		for($i=0;$row=mysql_fetch_array($rs);$i++)
		{
			$varCodCartao=$row['id'];
			$varStrNameCartao=$row['nome'];
			$varContent .= "<option value='".$varCodCartao."'>".$varStrNameCartao."</option>\n";
		}
			echo $varContent;

?>

subreferente.php

<? require_once("../includes/require.php"); ?>
<?
$ref = $_POST["ref"];
	
 global $conn;

$SQL = "SELECT 
            id,  
            nome 
        FROM 
            fsubreferente 
        WHERE 
            freferente_id='$ref'"; 

$varContent .= "<option value=''>-- Select --</option>\n";

$rs=mysql_query($SQL,$conn);

		for($i=0;$row=mysql_fetch_array($rs);$i++)
		{
			$varCodSubRef=$row['id'];
			$varStrNameSubRef=$row['nome'];
			$varContent .= "<option value='".$varCodSubRef."'>".$varStrNameSubRef."</option>\n";
		}
			echo $varContent;

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você concatenou só o valor da variável a ser retornada e não a query.

 

Isso:

 

$SQL = "SELECT id, nome FROM fsubreferente WHERE freferente_id='$ref'";

Se printar retorna isso:

 

SELECT id, nome FROM fsubreferente WHERE freferente_id='$ref'
Sendo o valor da coluna usada no WHERE igual a $ref, ao invés do conteúdo que $ref representa.

 

Nessa mudança que fez na query, basta fechar as aspa dupla antes e depois da variável:

 

$SQL = "SELECT id, nome FROM fsubreferente WHERE freferente_id='" . $ref' . "';

Faça essa mudança na query e experimente executar seu script FORA do AJAX, setando um valor existente manualmente para $ref.

 

Se aparecerem os options (que talvez apareçam apenas no código fonte devido ausência da tag <select>), beleza, o erro estava na sua query.

 

Mas, se ainda assim não funcionar, dá uma ohada no primeiro exemplo de uso de val(), que refere-se a um dropdown.

 

Pode ser que no seu caso em particular você deva usá-lo ao invés de chamar val() diretamente a partir de seletor (como mostra o segundo exemplo).

 

Mas é só especulação.

 

P.S.: Você testou o resultao com a opção da WebDeveloper Toolbar (extensão do Firefox), aós o JavaScript ter sido gerado, para confirmar se os values estavam sendo preenchidos adequadamente?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você concatenou só o valor da variável a ser retornada e não a query.

 

Isso:

 

$SQL = "SELECT id, nome FROM fsubreferente WHERE freferente_id='$ref'";

Se printar retorna isso:

 

SELECT id, nome FROM fsubreferente WHERE freferente_id='$ref'
Sendo o valor da coluna usada no WHERE igual a $ref, ao invés do conteúdo que $ref representa.

 

Isso nao esta 'certo'

O php interpreta sim, variaveis dentro de strings com aspas duplas.

 

Faca o teste, e vera que oque disse nao eh real Imaggens.

 

Era isso aqui:

http://forum.imasters.com.br/index.php?/topic/365795-combos-dependentes-ajax-jquery/

 

que você esta tentando fazer?

Coloque um:

$rs=mysql_query($SQL,$conn) or die( mysql_error() );
para ver o motivo das querys falharem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pior que eu ia escrever o infame "salvo engano de minha parte", mas acabei esquecendo.

 

Acabei ficando na dúvida pois misturando-se aspas duplas e simples acaba gerando confusão. Depois que comecei a concatenar os meus scripts (segundo um artigo no PHP Brasil) nunca mais tive problema.

 

Desculpem pelo engano.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Problema corrigido,

 

alterei o nome do arquivo "ajax/subreferente.php" para "ajax/subref.php" e parou de dar erro,

o item

<? require_once("../includes/require.php"); ?>
do arquivo card

puxava um arquivo de requires

com o seguinte codigo

 

<?
require_once('usuario.php');
require_once('banco.php');
require_once('cartao.php');
require_once('fluxo.php');
require_once('referente.php');
require_once('subreferente.php');
require_once('connect-local.php');
?>

e esse arquivo acabava dando um require no arquivo subreferente.php do ajax.

 

Valeu a ajuda, e as dicas pra deixar as coisas ali organizadas.

Vou dar uma estudada em tudo que vocês me passaram.

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.