[AJUDA URGENTE] Habilitar / Desabilitar Select

Started by Tatiana Carrazzoni, January 10, 2008, 11:45:25 AM

Previous topic - Next topic

Tatiana Carrazzoni

Tenho dois selects num formulário, um categoria e outro subcategoria.

O campo subcategoria vai estar desabilitado até que selecione uma categoria.
Depois de selecionar uma categoria, habilitar o select de subcategoria, carregando apenas as subcategorias relacionadas a categoria selecionada.

Os dados estão no banco de dados, e as páginas são em php.

A tabela categoria tem o seguintes campos: id, nome
A tabela subcategoria tem o seguintes campos: id_sub, nome, nome_sub (o campo nome vem da tabela categoria).


Espero que alguém me ajude!!

ilovehentai

Ola bem vinda ao forum!

Quando referes que tens 2 SELECT, estas a te referir a duas querys SQL do tipo SELECT? (por exemplo: "SELECT * FROM QualquerCoisa")

Se for isso vamos ver então:

Nas tuas tabelas pareces ter um erro, ou seja aconselhava a que na tabela sub-categoria em vez de armazenares o nome da categoria, deverias armazenar o ID da categoria, através de uma chave estrangeira;

+-----------------------+
|    CATEGORIA                        
+-----------------------+
|
|     KEY ID
|     NOME
|
+-----------------------+

+-----------------------+
|   SUBCATEGORIA
+------------------------
|   KEY ID_SUB
|   FKEY ID_CAT
|   NOME_SUB
|
+------------------------

Ok peço desculpa pelo desenho ... hehe mas é o melhor que consegui fazer agora  

Bem agora se bem percebi, na página em PHP vais ter uma comboBox e seleccionas uma categoria e depois de seleccionares a categoria, vão te aparecer numa segunda comboBox uma lista de sub-categorias disponíveis para essa mesma categoria.

Bem para conseguir este resultado vais necessitar de colocar obviamente a primeira comboBox num formulário HTML quando seleccionar a categoria por acontecer duas coisas, na primeira basta apenas seleccionar a categoria e ele envia um POST ou então depois de seleccionar a categoria clicar num botão para enviar o primeiro POST, a diferença é que na primeira opção necessitas de Javascript e na segunda apenas necessitas de um botão. Vamos seguir a segunda opção:

Aqui vamos nos!  8)

Primeiro necessitas de uma conexão a base de dados, algo deste género







$server = "localhost";

$username = "root";

$password = "";



$con = mysql_pconnect($server, $username, $password);



if(!$con){



die(utf8_encode(\\'Não foi possível conectar: \\' ). mysql_error());

}



?>

Ok assim já possuímos a nossa conexão a base de dados, basta apenas colocá-la num ficheiro por exemplo:
conexao.php

Agora vamos ao nosso ficheiro que permite fazer a selecção iremos chamá-lo de select.php:

bem começamos no nosso ficheiro por incluir a nossa conexão a base de dados





require_once("conexao.php");

Agora necessitamos de criar uma consulta a base de dados e conseguir saber todas as categorias que existem nelas assim




//Seleccionamos primeiro a nossa base de dados a variavel $con refere-se a conexao



$db = mysql_select_db("nomeBD", $con);

if(!$db){



die(utf8_encode(\\'Não foi possível seleccionar a BD\\').mysql_error());



}



//Criamos agora a nossa query MySQL

$Query = "SELECT * FROM categoria";

$resultado = mysql_query($Query, $con) or die(mysql_error());



//Ok agora vamos associar os valores de cada linha a um array



$row = mysql_fetch_assoc($resultado);



//Podemos se queremos saber quantas linhas foram retornadas na query



$TotalResultados = mysql_num_rows($resultado);



?>

prontos agora vamos inserir todos os resultados dentro da nossa comboBox
para isso criamos um formulário e dentro do mesmo a combobox e um botão do tipo submit












  ComboBox menu







 

 

 

 

 



 






Agora que temos a nossa 1Ã,º query que preenche o nosso menu select vamos inserir mais php no inicio do nosso ficheiro, esse código irá verificar se houve um post ao servidor, ou seja vai saber se alguem carregou no botão e seleccionou uma categoria.

então por baixo da linha - $TotalResultados = mysql_num_rows($resultado); acrescentamos o seguinte




//vamos ver se o input hidden foi enviado por post e caso tenha sido se o seu value é igual a "ok"

if((isset($_POST[\\'selectoption\\']) && ($_POST[\\'selectoption\\'] == "ok")){



$host = $_SERVER[\\'HTTP_HOST\\'];

$caminho = rtrim($_SERVER[\\'PHP_SELF\\'], \\'/\\\\');

$cat = $_POST[\\'selectCat\\'];



//Reencaminhos para a própria página

header("Location: http://$host$caminho?cat=$cat");





}

No código anterior fazemos um redireccionamento a própria página contudo acrescentamos algo de interessante a url, uma variável de url, ou seja a nossa url irá se parecer com o seguinte
http://localhost/select.php?cat=3

neste caso o utilizador seleccionou da lista a categoria que possui o ID igual a 3 se fosse o 5 seria:
http://localhost/select.php?cat=5

Bem agora para concluirmos e ja estou aqui a teclar a prai 1h precisamos apenas de ir buscar esse número e executar uma query que nos diga;

se este número existe queremos seleccionar todas as subcategorias que possuem um id_cat igual a esse mesmo número.

então continuando no código php teremos o seguinte




if((isset($_GET[\\'cat\\']) && ($_GET[\\'cat\\'] != "")){



$getCat = $_GET[\\'cat\\'];



$querySub = sprintf("SELECT * FROM subcategoria where id_cat = %s", mysql_real_escape_string($getCat));

$resultadoSub = mysql_query($querySub, $con) or die(mysql_error());

$rowSub = mysql_fetch_assoc($resultadoSub);

$TotalResultadosSub = mysql_num_rows($resultadoSub);





}

Bem agora só temos que popular a nossa nova comboBox a seguir a primeira comboBox acrescentamos o seguinte







if((isset($_GET[\\'cat\\']) && ($_GET[\\'cat\\'] != "")){



$cbx = "";



}



?>

E prontos essa comboBox só irá aparecer quando seleccionarmos uma categoria e estará populada com as sub categorias.

Recompilando tudo para o nosso ficheiro ficará com algo que tenha este aspecto:







require_once("conexao.php");



//Seleccionamos primeiro a nossa base de dados a variavel $con refere-se a conexao



$db = mysql_select_db("nomeBD", $con);

if(!$db){



die(utf8_encode(\\'Não foi possível seleccionar a BD\\').mysql_error());



}



//Criamos agora a nossa query MySQL

$Query = "SELECT * FROM categoria";

$resultado = mysql_query($Query, $con) or die(mysql_error());



//Ok agora vamos associar os valores de cada linha a um array



$row = mysql_fetch_assoc($resultado);



//Podemos se queremos saber quantas linhas foram retornadas na query



$TotalResultados = mysql_num_rows($resultado);



//vamos ver se o input hidden foi enviado por post e caso tenha sido se o seu value é igual a "ok"

if((isset($_POST[\\'selectoption\\']) && ($_POST[\\'selectoption\\'] == "ok")){



$host = $_SERVER[\\'HTTP_HOST\\'];

$caminho = rtrim($_SERVER[\\'PHP_SELF\\'], \\'/\\\\');

$cat = $_POST[\\'selectCat\\'];



//Reencaminhos para a própria página

header("Location: http://$host$caminho?cat=$cat");





}





if((isset($_GET[\\'cat\\']) && ($_GET[\\'cat\\'] != "")){



$getCat = $_GET[\\'cat\\'];



$querySub = sprintf("SELECT * FROM subcategoria where id_cat = %s", mysql_real_escape_string($getCat));

$resultadoSub = mysql_query($querySub, $con) or die(mysql_error());

$rowSub = mysql_fetch_assoc($resultadoSub);

$TotalResultadosSub = mysql_num_rows($resultadoSub);





}











  ComboBox menu







 


 

 

 

 



 


 if((isset($_GET[\\'cat\\']) && ($_GET[\\'cat\\'] != "")){



 $cbx = "";



 }



 ?>



 







Muito mais deve ser feito ainda neste código, tais como verificar que nenhuma query tenho 0 por resultado, é também necessário fechar as ligações abertas a base de dados entre outras coisas.

Não testei o que cá escrevi, estou a teclar a mais de 1h30 e estou bastante cansado, qualquer erro que possa surgir peço desculpa, contudo acho que os conceitos são suficientes por si.

Espero ter ajudado de alguma forma. Existem sempre dezendas maneiras de fazer a mesma coisa, esta é apenas uma. Apartir daqui é só uma questão de criatividade.

Cumps.  :wink:

Tatiana Carrazzoni

Quando me referi a select, n foi do sql, foi ao select tag <select>..

se puder me ajudar nesse sentindo agradeço...

XsTeAl

espero qeu percebas


 include(\\'conexao/config.php\\');//ficheiro de conexao a BD

 

$consultacidade = mysql_query(\\'SELECT id, cidade, preco  FROM cidades ORDER BY cidade ASC\\');//faz a consulta na bd dos campos que queres

 

?>



 

 
 

echo \\'\\';

//o codigo a cima mostra os valores id-cidade-preco

?>

 

 

 

 



 



 

Adicionar Filme



ilovehentai

QuoteQuando me referi a select, n foi do sql, foi ao select tag <select>..

se puder me ajudar nesse sentindo agradeço...

É a mesma coisa, no exemplo que te dei tens as duas comboBox (tag select)