Autor Tópico: [AJUDA URGENTE] Habilitar / Desabilitar Select  (Lida 1870 vezes)

Offline Tatiana Carrazzoni

  • Newbie
  • *
  • Mensagens: 0
  • Karma: +0/-0
    • Ver Perfil
[AJUDA URGENTE] Habilitar / Desabilitar Select
« em: Janeiro 10, 2008, 11:45:25 am »
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!!

Offline ilovehentai

  • Newbie
  • *
  • Mensagens: 0
  • Karma: +0/-0
    • Ver Perfil
    • http://
[AJUDA URGENTE] Habilitar / Desabilitar Select
« Responder #1 em: Janeiro 11, 2008, 01:03:15 am »
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

Código: [Seleccione]



<?php



$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

Código: [Seleccione]

<?php



require_once("conexao.php");

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

Código: [Seleccione]



//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

Código: [Seleccione]



<!-- não vou perder muito tempo com o HTML, tenho a certeza que serás capaz de fazer as validações XHTML

  todas por ti -->



<html>

<head>

  <title>ComboBox menu</title>

</head>

<body>



 <form name="form1" method="Post">

  <select name="selectCat">



  <?php

//vamos repetir aqui todos os resultados obtidos na query

//Colocarmos o nome por entre as tags option e colocamos o id como value

do{



$option = "<option value ="";

$option .= $row[\\'id\\'];

$option .= "">";

$option .= $row[\\'nome\\'];

$option .= "</option>";



echo $option;



} while ($row_carrinho = mysql_fetch_assoc($carrinho));



  ?>



  </select>

  <input type="hidden" value="ok" name="selectoption" />

  <!-- o input escondido ser para o codigo php saber quando foi executado um POST ao servidor -->

  <input type="submit" value="Seleccionar" />



 </form>



</body>

</html>

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

Código: [Seleccione]



//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

Código: [Seleccione]



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

Código: [Seleccione]



<?php



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



$cbx = "<select>";

do{

$cbx .= "<option value="";

$cbx .= $rowSub[\\'id\\'];

$cbx .= "">";

$cbx .= $rowSub[\\'nome_sub\\'];

$cbx .= "</option>";



} while ($rowSub = mysql_fetch_assoc($resultadoSub));



$cbx .= "</select>";



}



?>

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:

Código: [Seleccione]



<?php



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);





}



<!-- não vou perder muito tempo com o HTML, tenho a certeza que serás capaz de fazer as validações XHTML

  todas por ti -->



<html>

<head>

  <title>ComboBox menu</title>

</head>

<body>



 <form name="form1" method="Post">

  <select name="selectCat">



  <?php

//vamos repetir aqui todos os resultados obtidos na query

//Colocarmos o nome por entre as tags option e colocamos o id como value

do{



$option = "<option value ="";

$option .= $row[\\'id\\'];

$option .= "">";

$option .= $row[\\'nome\\'];

$option .= "</option>";



echo $option;



} while ($row_carrinho = mysql_fetch_assoc($carrinho));



  ?>



  </select>

  <input type="hidden" value="ok" name="selectoption" />

  <!-- o input escondido ser para o codigo php saber quando foi executado um POST ao servidor -->

  <input type="submit" value="Seleccionar" />



 <?php



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



 $cbx = "<select>";

 do{

  $cbx .= "<option value="";

  $cbx .= $rowSub[\\'id\\'];

  $cbx .= "">";

  $cbx .= $rowSub[\\'nome_sub\\'];

  $cbx .= "</option>";



 } while ($rowSub = mysql_fetch_assoc($resultadoSub));



 $cbx .= "</select>";



 }



 ?>



 </form>



</body>

</html>

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:

Offline Tatiana Carrazzoni

  • Newbie
  • *
  • Mensagens: 0
  • Karma: +0/-0
    • Ver Perfil
[AJUDA URGENTE] Habilitar / Desabilitar Select
« Responder #2 em: Janeiro 11, 2008, 11:03:13 am »
Quando me referi a select, n foi do sql, foi ao select tag <select>..

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

Offline XsTeAl

  • Newbie
  • *
  • Mensagens: 0
  • Karma: +0/-0
    • Ver Perfil
    • http://www.gud.us/en/?xsteal
[AJUDA URGENTE] Habilitar / Desabilitar Select
« Responder #3 em: Janeiro 11, 2008, 01:22:10 pm »
espero qeu percebas

Código: [Seleccione]
<?php

 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

 

?>

<table width="800" border="0" cellspacing="0" cellpadding="0" align="center">

  <tr><td><table width="800" border="0" cellspacing="0" cellpadding="0" bgcolor="#999aaa">

  <tr>

<td height="41">Adicionar Filme </td>

  </tr>

</table>

</td></tr><tr><form name="form" method="post" action="adicionar.php">

 <?php

 

echo \\'<select name="genero">\\';

while($linha = mysql_fetch_assoc($consultacidade))

{

echo \\'<option value="\\'.$linha[\\'id\\'].\\'">\\'.$linha[\\'cidade\\'].\\'\\'.$linha[\\'preco\\'].\\'</option>\\';

 

}

echo \\'</select>\\';

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

?>

 <input name="Novo" type="submit" id="Novo" value="Novo" />

 </label></td>

  </form>

  </tr>

</table>

Offline ilovehentai

  • Newbie
  • *
  • Mensagens: 0
  • Karma: +0/-0
    • Ver Perfil
    • http://
[AJUDA URGENTE] Habilitar / Desabilitar Select
« Responder #4 em: Janeiro 11, 2008, 02:13:04 pm »
Citar
Quando 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)

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49