Ir para conteúdo

POWERED BY:

Arquivado

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

§_ladyshaolin_§

com JS + PHP

Recommended Posts

Oi gente, eu peguei um código pra trabalhar com dois combos que achei fácil de entender, mas não está funcionando direito. O primeiro combo mostra todas as linhas de produtos quando a linha for selecionada, no 2º combo aparecem os produtos referentes à quela linha. O primeiro combo funciona bem, mas o segundo não... aparece o seguinte erro:

 

'team' não está definido

 

O código é esse:

 

PHP

[*]<html>

[*]<head>

[*]<title>Auto Drop Down com PhP e MySQL</title>

[*]<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

[*]</head>

[*]

[*]<body bgcolor="#FFFFFF" text="#000000">

[*]

[*]<?php require_once('Connections/dsn.php');

[*]?>

[*]<script LANGUAGE="JavaScript">

[*]team = new Array(

[*]<?php

[*]# Seleciona todos os grupos cadastrados

[*]mysql_select_db($database_dsn, $dsn);

[*]$sql="select * from tb_produtos_linha order by id_linha";

[*]$sql_result=mysql_query($sql);

[*]$num=mysql_numrows($sql_result);

[*]while ($row=mysql_fetch_array($sql_result)){

[*]$conta=$conta+1;

[*] $cod_linha=$row["id_linha"];

[*] echo "new Array(\n";

[*] mysql_select_db($database_dsn, $dsn);

[*] $produto_sql="select * from tb_produtos where linha='$cod_linha'";

[*] $produto_result=mysql_query($produto_sql);

[*] $num_produto=mysql_numrows($produto_result);

[*] if ($num_produto>=1){

[*]# Se ele achar algum subgrupo para o grupo ele marca a palavra Todas

[*] echo "new Array(\"Todas\", 0),\n";

[*] while ($rowx=mysql_fetch_array($produto_result)){

[*] $codigo_produto=$rowx["id_produto"];

[*] $produto_nome=$rowx["nome"];

[*] $conta_produto=$conta_sub+1;

[*] if ($conta_produto==$num_produto){

[*] echo "new Array(\"$produto_nome\", $codigo_produto)\n";

[*] $conta_produto="";

[*] }else{

[*] echo "new Array(\"$produto_nome\", $codigo_produto),\n";

[*] }

[*] }

[*] }else{

[*]#Se ele nao achar subgrupo para o grupo selecionado...

[*] echo "new Array(\"Qualquer\", 0)\n";

[*] }

[*] if ($num>$conta){

[*] echo "),\n";

[*] }

[*]}

[*]echo ")\n";

[*]echo ");\n";

[*]?>

[*]//Inicio da função JS

[*]function fillSelectFromArray(selectCtrl, itemArray, goodPrompt, badPrompt, defaultItem) {

[*]var i, j;

[*]var prompt;

[*]// empty existing items

[*]for (i = selectCtrl.options.length; i >= 0; i--) {

[*]selectCtrl.options = null;

[*]}

[*]prompt = (itemArray != null) ? goodPrompt : badPrompt;

[*]if (prompt == null) {

[*]j = 0;

[*]}

[*]else {

[*]selectCtrl.options[0] = new Option(prompt);

[*]j = 1;

[*]}

[*]if (itemArray != null) {

[*]// add new items

[*]for (i = 0; i < itemArray.length; i++) {

[*]selectCtrl.options[j] = new Option(itemArray[0]);

[*]if (itemArray[1] != null) {

[*]selectCtrl.options[j].value = itemArray[1];

[*]}

[*]j++;

[*]}

[*]// select first item (prompt) for sub list

[*]selectCtrl.options[0].selected = true;

[*]  }

[*]}

[*]// End -->

[*]</script>

[*]<center>

[*]<form name="form1" method="post" action="">

[*] <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Selecione a linha:</font> <b><font face="Verdana, Arial, Helvetica, sans-serif" size="1">

[*] <select name="linha" onChange="fillSelectFromArray(this.form.produto, ((this.selectedIndex == -1) ? null : team[this.selectedIndex-1]));">

[*] <option>Escolha uma Categoria</option>

[*] <?

[*]#Seleciona todos os grupos para setar os valores no combo

[*] mysql_select_db($database_dsn, $dsn);

[*] $sql="select * from tb_produtos_linha order by linha";

[*] $sql_result=mysql_query($sql);

[*] while ($row=mysql_fetch_array($sql_result)){

[*] $cod_linha=$row["id_linha"];

[*] $desc_linha=$row["linha"];

[*] ?>

[*] <option value="<?echo $cod_linha;?>">

[*] <?echo $desc_linha;?>

[*] </option>

[*] <?

[*] }

[*]#Popula o segundo combo de acordo com a escolha no primeiro

[*] ?>

[*] </select>

[*]  </font></b></p>

[*] <p><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><font size="2">Selecione o produto:</font><b>

[*] <select name="produto">

[*] <option>---------------</option>

[*] </select>

[*] </b></font> </p>

[*]</form>

[*]</center>

[*]</body>

[*]</html>

 

Alguem consegue me dar uma luz?

Compartilhar este post


Link para o post
Compartilhar em outros sites

hmmm! Acho q entendi esse jeito também, legal! :) Só + uma coisa (pra variar...) mas como eu faço pra que o segundo combo link para uma página de visualização, tipo pega o código do produto pra fazer um link nesse estilo: www.dominio.com.br/ver_produto.php?cod_produto=1 dá pra deixar pronto no Javascript também? :o

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se a minha pergunta ficou clara, mas resumindo é, como faço pra que o id_produto conste como value no select? tipo assim:<option value=<?php echo id_produto; ?>Tô tentando agregar isso no código javascript mas não tá dando certo... :( Agradeço pela ajuda... :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

tipo assim:

 

PHP

[*]<? $j = 0; 

[*] while ($linha = mysql_fetch_array($sql)) {?> 

[*]  loc[<?=$j?>][0] = "<?=$linha['id_produto']?>"

[*]  loc[<?=$j?>][1] = "<?=$linha['nome']?>"

[*]  <?$j++

[*]  } 

[*] ?> 

 

Ou deixa como você colocou no post anterior?

 

PHP

[*]<? $j = 0; 

[*] while ($linha = mysql_fetch_array($sql)) {?> 

[*] loc[<?=$j?>][0] = "<?=$linha[0]?>"//CAMPO CÓDIGO 

[*] loc[<?=$j?>][1] = "<?=$linha[1]?>"//CAMPO DESCRIÇÃO 

[*] <?$j++

[*] } 

[*]?>

 

 

Porque quando coloco $linha=0 e $linha=1 as informações do 2º combo são omitidas... :mellow:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, não tá funcionando...

 

meu formulário ficou assim:

 

PHP

[*]<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 

[*]<html> 

[*]<head> 

[*]<title>Documento sem título</title> 

[*]<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 

[*]<? 

[*]include "Connections/dsn.php";

[*]mysql_select_db($database_dsn, $dsn);

[*]$sql = mysql_query("SELECT * FROM tb_produtos_linha order by linha");

[*]?> 

[*]<script language="JavaScript" type="text/JavaScript"

[*]function carregar()

[*]Combo1 = document.Cadastro.linha; //ALTERE AQUI PARA SEU FORM E 1º SELECT 

[*]Combo2 = document.Cadastro.produtos; //ALTERE AQUI PARA SEU FORM E 2º SELECT 

[*]var url; 

[*]url = 'remote.php?linha='+Combo1[Combo1.selectedIndex].value; 

[*]Combo2.options.length = 0; 

[*]addItem(Combo2,"Aguarde...carregando","",false,Combo2.length) 

[*]myIframe.location = url; 

[*]Combo2.focus() 

[*]} 

[*]

[*]function inicia()

[*]local1 = new Array()

[*]var maximo1, i; 

[*]local1 = myIframe.loc; 

[*]maximo1 = local1.length; 

[*]Combo2.options.length = 0; 

[*]addItem(Combo2,'Selecione o produto','',false,Combo2.length)

[*]for (i=0;i<maximo1;i++)

[*]addItem(Combo2,local1[1],local1[0],false,Combo2.length)

[*]} 

[*]} 

[*]

[*]function addItem(obj,strText,strValue,blSel,intPos){

[*]  var newOpt,i,ArTemp,selIndex;

[*]  selIndex = (blSel)?intPos:obj.selectedIndex;

[*]  newOpt = new Option(strText,strValue);

[*]  Len = obj.options.length+1

[*]  if (intPos > Len) return

[*]  obj.options.length = Len

[*]  if (intPos != Len) {

[*] ArTemp = new Array();

[*] for(i=intPos;i<obj.options.length-1;i++)

[*]  ArTemp = Array(obj.options.text,obj.options.value);

[*] for(i=intPos+1;i<Len;i++)

[*]  obj.options = new Option(ArTemp[i-1][0],ArTemp[i-1][1]);

[*]  }

[*]  obj.options[intPos] = newOpt;

[*]  if (selIndex > intPos)

[*] obj.selectedIndex = selIndex+1;

[*]  else if (selIndex == intPos)  

[*] obj.selectedIndex = intPos;

[*]}

[*]</script> 

[*]

[*]</head> 

[*]

[*]<body> 

[*]<div style="DISPLAY: none; POSITION: absolute" align="left"> 

[*]<IFRAME src name="myIframe" id="myIframe" width="400" height="100" marginwidth="0" marginheight="0"></IFRAME> 

[*]</div> 

[*]<form action="teste_produto.php" method="post" name="Cadastro"> 

[*] <p>Linha:<br>

[*] <select name="linha" onChange="carregar();"> 

[*] <option value="">- Linha -</option> 

[*] <? 

[*] while($dados=mysql_fetch_array($sql)) { 

[*] echo "<option value=\"" . $dados["id_linha"] . "\">" . $dados["linha"] . "</option>"

[*] } 

[*] ?> 

[*] </select>

[*] <br> 

[*]Produtos:<br>

[*]<select name="produtos">

[*]</select> 

[*] </p>

[*] <p>

[*] <input type="submit" name="Submit" value="Ok">

[*]</form> 

[*]</body> 

[*]</html>

 

o remote assim:

 

PHP

[*]<? 

[*]include "Connections/dsn.php"

[*]

[*]mysql_select_db($database_dsn, $dsn);

[*]$linha_cod = $_GET['linha']

[*]$auxsql = "SELECT nome FROM tb_produtos WHERE linha='{$linha_cod}' order by nome"

[*]$sql = mysql_query($auxsql)

[*]if(!$sql){echo mysql_error();exit();} 

[*]?> 

[*]

[*]<script> 

[*]  loc = new Array(<?=mysql_num_rows($sql)?>

[*]  for (i=0; i <?=mysql_num_rows($sql)?>; i++) { 

[*] loc = new Array(2) 

[*] for (j=0; j < 2; j++) { 

[*] loc[j] = "0" 

[*] } 

[*] } 

[*]

[*] <? $j = 0; 

[*] while ($linha = mysql_fetch_array($sql)) {?> 

[*]  loc[<?=$j?>][0] = "<?=$linha['id_produto']?>"

[*]  loc[<?=$j?>][1] = "<?=$linha['nome']?>"

[*]  <?$j++

[*]  } 

[*] ?> 

[*] parent.inicia();

[*]</script>

[*]

[*]</html>

 

e a página que estou tentando testar pegando o id do produto tá assim:

 

PHP

[*]<?php require_once('../Connections/dsn.php')?>

[*]<?php

[*]$cod_produto = $_GET["produtos"];

[*]mysql_select_db($database_dsn, $dsn);

[*]$query_ver_produto = "SELECT id_produto, nome, imagem, conteudo, dimensoes, codigo, descricao FROM tb_produtos WHERE id_produto = '$cod_produto'";

[*]$ver_produto = mysql_query($query_ver_produto, $dsn) or die(mysql_error());

[*]$row_ver_produto = mysql_fetch_assoc($ver_produto);

[*]$totalRows_ver_produto = mysql_num_rows($ver_produto);

[*]?>

[*]

[*]

[*]<html>

[*]<head>

[*]<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

[*]<title>Untitled Document</title>

[*]</head>

[*]

[*]<body>

[*]<p><img src="adm/img_produtos/"<?php echo $row_ver_produto['imagem']?>">

[*] <br>

[*] <?php echo $row_ver_produto['nome']?></p>

[*]<p><?php echo $row_ver_produto['descricao']?></p>

[*]<p><?php echo $row_ver_produto['dimensoes']?></p>

[*]<p><?php echo $row_ver_produto['codigo']?></p>

[*]</body>

[*]</html>

[*]<?php

[*]mysql_free_result($ver_produto);

[*]?>

 

Não vejo nada errado... só tenho dúvidas se devo usar $_GET ou $_POST pra pegar o id do produto, mas já tentei das duas formas e não deu certo. :mellow:

Consegue ver algo de errado? :huh:

Compartilhar este post


Link para o post
Compartilhar em outros sites

apareceu isso no código:

 

PHP

[*]

[*]<script> 

[*]  loc = new Array(1) 

[*]  for (i=0; i < 1; i++) { 

[*] loc = new Array(2) 

[*] for (j=0; j < 2; j++) { 

[*] loc[j] = "0" 

[*] } 

[*] } 

[*]

[*]  

[*]  loc[0][0] = ""

[*]  loc[0][1] = "Demaquilante"

[*]

[*] parent.inicia();

[*]</script>

[*]

[*]</html>

 

e também um erro:

 

Linha: 16

Caracter: 5

O objeto não dá suporte para a propriedade ou método.

Compartilhar este post


Link para o post
Compartilhar em outros sites

era só um </html> que eu tinha esquecido de tirar mesmo hehe!! se você puder dar uma olhada aqui talvez dê pra entender melhor o que acontece, ou melhor oq não acontece... :(

 

qdo. clicar no botão Ok, gostaria que fosse passado o id do produto pra outra página mas não está acontecendo... http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, nada aparece... a única coisa que vejo diferente em meu script é que no primeiro combo peço pra buscar as informações da tabela tb_produtos_linha e no remote.php peço pra buscar as informações da tabela tb_produtos. :mellow:

Compartilhar este post


Link para o post
Compartilhar em outros sites

É esse: :mellow:

 

PHP

[*]<?php require_once('../Connections/dsn.php')?>

[*]<?php

[*]$cod_produto = $_POST["produtos"];

[*]mysql_select_db($database_dsn, $dsn);

[*]$query_ver_produto = "SELECT id_produto, nome, imagem, conteudo, dimensoes, codigo, descricao FROM tb_produtos WHERE id_produto = '{$cod_produto}'";

[*]$ver_produto = mysql_query($query_ver_produto, $dsn) or die(mysql_error());

[*]$row_ver_produto = mysql_fetch_assoc($ver_produto);

[*]$totalRows_ver_produto = mysql_num_rows($ver_produto);

[*]?>

[*]

[*]

[*]<html>

[*]<head>

[*]<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

[*]<title>Untitled Document</title>

[*]</head>

[*]

[*]<body>

[*]<p><img src="adm/img_produtos/<?php echo $row_ver_produto['imagem']; ?>">

[*] <br>

[*] <?php echo $row_ver_produto['nome']?></p>

[*]<p><?php echo $row_ver_produto['descricao']?></p>

[*]<p><?php echo $row_ver_produto['dimensoes']?></p>

[*]<p><?php echo $row_ver_produto['codigo']?></p>

[*]</body>

[*]</html>

[*]<?php

[*]mysql_free_result($ver_produto);

[*]?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah! entendi!! Deixando a cláusula WHERE, tá assim:

 

SELECT id_produto, nome, imagem, conteudo, dimensoes, codigo, descricao FROM tb_produtos WHERE id_produto = ''

 

é, aí tá errado, ele não tá pegando o valor da variável... :mellow:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse foi o resultado:

 

PHP

[*]

[*]<script> 

[*]  loc = new Array(1) 

[*]  for (i=0; i < 1; i++) { 

[*] loc = new Array(2) 

[*] for (j=0; j < 2; j++) { 

[*] loc[j] = "0" 

[*] } 

[*] } 

[*]

[*]  

[*]  loc[0][0] = "Demaquilante"

[*]  loc[0][1] = "Demaquilante"

[*]

[*] parent.inicia();

[*]</script>

Compartilhar este post


Link para o post
Compartilhar em outros sites

É isso, :) eu só alterei o SELECT do remote.php de:

 

"SELECT nome FROM tb_produtos WHERE linha='{$linha_cod}' order by nome"

 

para:

 

"SELECT id_produto, nome FROM tb_produtos WHERE linha='{$linha_cod}' order by nome"

 

E agora sim, entendi o porque do $linha[0] e $linha[1]!!

Funcionou direitinho!! http://forum.imasters.com.br/public/style_emoticons/default/yay.gif

Obrigada mais uma vez!! http://forum.imasters.com.br/public/style_emoticons/default/bye1.gif

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.