Ir para conteúdo

POWERED BY:

Arquivado

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

spacedb

[Resolvido] Select onchange + PHP + Consulta SQL

Recommended Posts

Seguinte galera, beleza? Então tipo, eu tenho uma ficha técnica e essa ficha técnica está associada a uma categoria.

Quero listar todas as fichas técnicas dessa categoria através de um formulário com select à partir do evento onchange...

 

Só que não to conseguindo, alguém poderia me ajudar? Obrigado!

 

Index.php - Aqui eu estou listando todas as categorias dentro do select.

 

<form>
<?php
require 'config.php';
	$result = mysql_query("SELECT * FROM fs_categoria");

	echo "<select name=\"categoria\" onchange=\"showUser(this.value)\">";

	while($row = mysql_fetch_array($result))
	{
	echo "<option value='" . $row['nomeCategoria'] . "'>" . $row['nomeCategoria'] . "</option>";
	}
	echo "</select>";

?>
</form>

 

Pagina de consulta - PHP - Aqui eu gostaria de listar as fichas técnicas de acordo com a categoria escolhida pelo usuário.

<?php
$q=$_GET["q"];

require 'config.php';

$sql="SELECT * FROM fs_ficha_tecnica WHERE nomeCategoria = '".$q."'";

$result = mysql_query($sql);


echo "<table border='1'>
<tr>
<th>Nome fantasia</th>
<th>Contrato</th>
<th>Categoria</th>
<th>Segmento</th>
<th>Telefone</th>
</tr>";

while($row = mysql_fetch_array($result))
  {
  echo "<tr>";
  echo "<td>" . $row['nomeFantasia'] . "</td>";
  echo "<td>" . $row['contratoFt'] . "</td>";
  echo "<td>" . $row['nomeCategoria'] . "</td>";
  echo "<td>" . $row['nomeSegmento'] . "</td>";
  echo "<td>" . $row['tel1'] . "</td>";
  echo "</tr>";
  }
echo "</table>";

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Fabio, desculpe na verdade isso ficou um tanto confuso! A função JS não existe mais,

eu usei um script que encontrei no google com essa função mas não deu certo, eu deveria ter mudado!

 

Mas o lance é, eu não sei nada de onchange.. nem quero que seja ajax! Só preciso que funcione,

de alguma forma eu preciso que essa variavel $q=$_GET["q"]; Se refira ao Value="" do Select,

e eu acho que falta também um query string, mas também sou leigo nisso..

 

Fiquei até 4h da manhã ontem e não consegui resolver o problema.. :ermm:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mude aqui para:

 

<form>
<?php
require 'config.php';
	$result = mysql_query("SELECT * FROM fs_categoria");

	echo "<select name=\"categoria\" onchange=\"window.location='index.php?categoria='+this.value\">";

	while($row = mysql_fetch_array($result))
	{
	echo "<option value='" . $row['idCategoria'] . "'>" . $row['nomeCategoria'] . "</option>";
	}
	echo "</select>";

?>
</form>

 

 

 

Mude aqui para:

 

<?php
$sSelectedCat=$_GET["categoria"];

require 'config.php';

$sql="SELECT * FROM fs_ficha_tecnica WHERE idCategoria = '".$sSelectedCat."'";

$result = mysql_query($sql);


echo "<table border='1'>
<tr>
<th>Nome fantasia</th>
<th>Contrato</th>
<th>Categoria</th>
<th>Segmento</th>
<th>Telefone</th>
</tr>";

while($row = mysql_fetch_array($result))
  {
  echo "<tr>";
  echo "<td>" . $row['nomeFantasia'] . "</td>";
  echo "<td>" . $row['contratoFt'] . "</td>";
  echo "<td>" . $row['nomeCategoria'] . "</td>";
  echo "<td>" . $row['nomeSegmento'] . "</td>";
  echo "<td>" . $row['tel1'] . "</td>";
  echo "</tr>";
  }
echo "</table>";

?>

 

Acho que isso já resolve seu problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Maykonn, solução mais simples que eu imaginava! eheheh

aparentemente é isso mesmo! Mas deu o seguinte erro:

 

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\Projeto_final\getft.php on line 19

 

A linha 19 é essa:

while($row = mysql_fetch_array($result))

Código completo já com as modificações:

<?php
$sSelectedCat=$_GET["categoria"];
require 'config.php';

$sql="SELECT * FROM fs_ficha_tecnica WHERE idCategoria = '".$sSelectedCat."'";

$result = mysql_query($sql);


echo "<table border='1'>
<tr>
<th>Nome fantasia</th>
<th>Contrato</th>
<th>Categoria</th>
<th>Segmento</th>
<th>Telefone</th>
</tr>";

while($row = mysql_fetch_array($result))
  {
  echo "<tr>";
  echo "<td>" . $row['nomeFantasia'] . "</td>";
  echo "<td>" . $row['contratoFt'] . "</td>";
  echo "<td>" . $row['nomeCategoria'] . "</td>";
  echo "<td>" . $row['nomeSegmento'] . "</td>";
  echo "<td>" . $row['tel1'] . "</td>";
  echo "</tr>";
  }
echo "</table>";

?>

Eu mudei o location do primeiro arquivo também pra getft.php? e index.php? e da na mesma..

 

echo "<select name=\"categoria\" onchange=\"window.location='getft.php?categoria='+this.value\">";

Mudei também nos 2 arquivos a tupla idCategoria para idCat, mas mesmo assim continua o mesmo erro. É possível ver na URL que ele está pegando o idCat, a conexão com o banco está normal!

 

MUITO OBRIGADO!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\Projeto_final\getft.php on line 19

 

Ou a $_GET está indo errada, ou a query não está retornando nenhum resultado.

O nome do campo de id é idCategoria mesmo?

 

printa isso: $sql="SELECT * FROM fs_ficha_tecnica WHERE idCategoria = '".$sSelectedCat."'";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu já mudei idCategoria para idCat que é o correto,

da pra ver no URL que está pegando o id da categoria certinho, porém continua o mesmo erro!

 

Acho que o problema está no $_GET mesmo, acrescentei tbm no method do form tanto get como post e também da na mesma...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso aqui retorna oque?

print $iTotal = mysql_num_rows($result);

 

Faça um if verificando se $iTotal > 0 e então só faça o while caso a condição seja verdadeira.

Caso contrário escreva, exemplo:

 

"Nenhum registro encontrado".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado pela força, já resolvi o problema!!

 

Faltava a chave estrangeira idCat da tabela fs_categoria na tabela fs_ficha_tecnica,

A variavel da consulta tbm tava errada, tava $sql mas deveria ser $result...

 

Valeuuuuuuuuuuuu :clap:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só mais uma dúvida, deu tudo certo e tal..

 

Mas quando eu clico por exemplo na categoria "Salão de festas",

as fichas dos salões são exibidas. Porém o select retorna para a primeira categoria da lista que é "Cerimonial social".

 

Alguém saberia me dizer um método ou algum eventos simples pra exibir sempre a opção escolhida pelo usuário?

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Além desse lance de voltar sempre pro primeiro resultado ainda tem um outro problema que acabei de perceber,

o primeiro resultado da lista nunca entra mesmo clicando várias vezes.

 

Testei deixar o primeiro espaço em branco mas sei lá, pode ser só uma questão de estética mas não ficou legal pq o select sempre volta a ficar branco! Imagem Postada

 

Será que tem alguma solução pra isso? Talvez um elseif no meio do select resolveria? Como eu poderia fazer isso?

 

Brigado! Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só mais uma dúvida, deu tudo certo e tal..

 

Mas quando eu clico por exemplo na categoria "Salão de festas",

as fichas dos salões são exibidas. Porém o select retorna para a primeira categoria da lista que é "Cerimonial social".

 

Alguém saberia me dizer um método ou algum eventos simples pra exibir sempre a opção escolhida pelo usuário?

 

Abraços.

 

 

 

Boa tarde spacedb, vamos lá:

<form>
<?php
require 'config.php';
       $result = mysql_query("SELECT * FROM fs_categoria");

       echo "<select name=\"categoria\" onchange=\"window.location='index.php?categoria='+this.value\">";

       while($row = mysql_fetch_array($result))
       {
           if($sSelectedCat == $row['idCategoria'])
              echo "<option value='" . $row['idCategoria'] . "' selected>" . $row['nomeCategoria'] . "</option>";
           else
               echo "<option value='" . $row['idCategoria'] . "'>" . $row['nomeCategoria'] . "</option>";
       }
       echo "</select>";

?>
</form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Além desse lance de voltar sempre pro primeiro resultado ainda tem um outro problema que acabei de perceber,

o primeiro resultado da lista nunca entra mesmo clicando várias vezes.

 

Testei deixar o primeiro espaço em branco mas sei lá, pode ser só uma questão de estética mas não ficou legal pq o select sempre volta a ficar branco! Imagem Postada

 

Será que tem alguma solução pra isso? Talvez um elseif no meio do select resolveria? Como eu poderia fazer isso?

 

Brigado! Imagem Postada

Isso acontece porque o primeiro resultado já está selecionado, portanto se clicar nele novamente não ocorrerá o evento onChange.

Para resolver isso trocar onChange pelo evento onClick. Ou, você pode colocar como primeira option <option>Selecione</option> e então fazer o while.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Massa Maykonn, salvou minha vida novamente! :joia:

 

Fiquei confuso aqui no inicio mas foi pq a variavel $sSelectedCat tava declarada no outro arquivo daí ñ tava funcionando, mas daí eu mudei a variavel para este arquivo e funcionou beleza!! Imagem Postada

 

Mais uma vez, muito obrigado!! Eu sabia que era só fazer um if-else, só ñ sabia como! ehehehehhe Imagem Postada

 

Valeu mesmo!!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Massa Maykonn, salvou minha vida novamente! :joia:

 

Fiquei confuso aqui no inicio mas foi pq a variavel $sSelectedCat tava declarada no outro arquivo daí ñ tava funcionando, mas daí eu mudei a variavel para este arquivo e funcionou beleza!! Imagem Postada

 

Mais uma vez, muito obrigado!! Eu sabia que era só fazer um if-else, só ñ sabia como! ehehehehhe Imagem Postada

 

Valeu mesmo!!!!!

Imagem Postada

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.