OK, tentei de outra maneira. Tenho dois selects com o mesmo nome "tipologia" e com querys diferentes para carregar os valores diferentes nas options.
Ambas estão ao início como ocultas. Se clicar no tipo de imóvel Habitação aparece a "sub3", senão se clicar no tipo de imóvel Comercial aparece a "sub4".
Na tabela tipologia ficou conforme a imagem em baixo em que o id_combo se for igual a 1 mostra os resultados na "sub3", se for 2 mostra na "sub4".
Reformulando a função para:
Código (Javascript):function setVisibility(id, visibility) {
document.getElementById(id).style.display = visibility;
}
e adicionando os atributos onchange e onclick nos radiobuttons.
E assim, com esta abordagem consegui fazer o adicionar.
O código com que ficou o adicionar:
Código (PHP):<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Adicionar Imóvel</title>
<!--CSS está fora do html, mas aqui coloco assim para colocar tudo de uma vez -->
<style type="text/css">
#sub3 {
display: none;
width: 141px;
}
#sub4 {
display: none;
width: 144px;
}
</style>
<script language="Javascript">
function setVisibility(id, visibility) {
document.getElementById(id).style.display = visibility;
}
</script>
</head>
<body >
<form name="form1" method="post" action="adicionar_imovel.php" enctype="multipart/form-data">
<label>Tipo de imóvel:</label>
<input type="radio" value="1" name="id_tpimovel" id="id_tpimovel" onchange="setVisibility('sub4', 'none');" onclick="setVisibility('sub3', 'inline');";>Habitação
<input type="radio" value="2" name="id_tpimovel" id="id_tpimovel" onchange="setVisibility('sub3', 'none');" onclick="setVisibility('sub4', 'inline');";>Comercial<br /><br />
<label>Tipologia:</label>
<select name="tipologia" id="sub3">
<?php
require 'config/connect.php';
$qrytip = "SELECT * FROM tipologia WHERE id_combo = '1' ORDER BY id_tipologia";
$restip = mysql_query($qrytip);
while($linhatip = mysql_fetch_array($restip)){
?>
<option value="<?php echo $linhatip['designacao'];?>"><?php echo $linhatip['designacao'];?></option><br/>
<?php
}
?>
</select>
<select name="tipologia" id="sub4">
<?php
require 'config/connect.php';
$qrtip2 = "SELECT * FROM tipologia WHERE id_combo = '2' ORDER BY id_tipologia";
$restip2 = mysql_query($qrtip2);
while($linhatip2 = mysql_fetch_array($restip2)){
?>
<option value="<?php echo $linhatip2['designacao'];?>"><?php echo $linhatip2['designacao'];?></option><br/>
<?php
}
?>
</select><br/><br/>
<input class="ok_btn1_" type="submit" name="Submit" value="Adicionar" />
</form>
</body>
</html>
Agora o editar estou a fazer assim:
Código (PHP):<?php
require 'config/connect.php';
$idp= @$_GET['id'];
$sqlz = mysql_query("SELECT * FROM imoveis where id = '$idp'");
while($linha1 = mysql_fetch_array($sqlz)){
$id = $linha1['id'];
}
//querys
$qry_imovel = "SELECT * FROM imoveis WHERE id = '$idp';";
$exe_imoveis = mysql_query($qry_imovel);
$imovel = @mysql_fetch_array($exe_imoveis, MYSQL_ASSOC);
$qry_tipologias = "SELECT * FROM tipologia WHERE id_combo = '1' ORDER BY id_tipologia ASC;";
$exa_tipologias = mysql_query($qry_tipologias);
$qry_tipologias2 = "SELECT * FROM tipologia WHERE id_combo = '2' ORDER BY id_tipologia ASC;";
$exa_tipologias2 = mysql_query($qry_tipologias2);
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Editar Imóvel</title>
<!--CSS está fora do html, mas aqui coloco assim para colocar tudo de uma vez -->
<style type="text/css">
#sub3 {
display: none;
width: 141px;
}
#sub4 {
display: none;
width: 144px;
}
</style>
<script language="Javascript">
function setVisibility(id, visibility) {
document.getElementById(id).style.display = visibility;
}
</script>
</head>
<body >
<?php
$idp= $_GET['id'];
$sql = mysql_query("SELECT * FROM imoveis WHERE id = '$idp' ORDER BY id DESC");
while($rs = mysql_fetch_array($sql)){
$id = $rs['id'];
$id_tpimovel = $rs['id_tpimovel'];
$tipologia = $rs['id_tipologia'];
}
?>
<form method="post" action="teste.php?id=<?php echo $id ?>" enctype="multipart/form-data"><br />
<label>Tipo de imóvel:</label>
<input type="radio" name="id_tpimovel" id="id_tpimovel" onchange="setVisibility('sub4', 'none');" onclick="setVisibility('sub3', 'inline');"; value="1" <?php if(@$id_tpimovel == "1"): ?>checked="checked"<?php endif; ?> />Habitação
<input type="radio" name="id_tpimovel" id="id_tpimovel" onchange="setVisibility('sub3', 'none');" onclick="setVisibility('sub4', 'inline');" value="2" <?php if(@$id_tpimovel == "2"): ?>checked="checked"<?php endif; ?> />Comercial<br /><br />
<label>Tipologia:</label>
<select name="tipologia" id="sub3" <?php if($id_tpimovel == "1"): ?>style="display: inline;"<?php endif; ?> >
<?php
while($tipologia = mysql_fetch_array($exa_tipologias)){
?>
<!-- id_tipologia como chave estrangeira -->
<option <?php if($imovel["id_tipologia"] == $tipologia["designacao"]): ?>selected="selected"<?php endif; ?> value="<?php echo $tipologia["designacao"]; ?>"><?php echo $tipologia["designacao"]; ?></option>
<?php
}
?>
</select>
<select name="tipologia" id="sub4" <?php if($id_tpimovel == "2"): ?>style="display: inline;"<?php endif; ?>>
<?php
while($tipologia2 = mysql_fetch_array($exa_tipologias2)){
?>
<!-- id_tipologia como chave estrangeira -->
<option <?php if($imovel["id_tipologia"] == $tipologia2["designacao"]): ?>selected="selected"<?php endif; ?> value="<?php echo $tipologia2["designacao"]; ?>"><?php echo $tipologia2["designacao"]; ?></option>
<?php
}
?>
</select><br/><br/>
<input class="ok_btn1_" type="submit" name="button" id="button" value="Actualizar" />
</form>
</body>
</html>
Aqui estou a ir buscar o que está seleccionado com o selected e se pretender alterar a option tanto na sub3 como na sub4 ele alterar.
O que está a acontecer é que só está a alterar as options relativas à opção do tipo de imóvel Comercial, ou seja, na "sub4".
Se mudar para o tipo de imóvel Habitação, a qual irá carregar a "sub3" e se seleccionar alguma option daí, não está a alterar.
Por exemplo, no adicionar, adicionei o imóvel como sendo Comercial e com tipologia Industrial (conforme a imagem:
). Se eu alterar para Loja Comercial, Escritório, Armazém, Terreno, Venda de Negócio, Loja com Escritório ou Garagem a alteração é feita sem problemas.
Mas se quiser alterar para o tipo de imóvel Habitação para tipologia Lojas (conforme a imagem:
) ou qualquer opção deste select, ele não assume a alteração.
Na BD mantém a tipologia do tipo Comercial Industrial e não assume a alteração para o tipo de imóvel habitação tipologia Lojas, por exemplo.
O que poderá estar a acontecer?
O raciocínio é o mesmo. Se está a alterar na sub4, supostamente também devia de alterar na sub3.
Obrigado pela ajuda.
Cumprimentos,
AndreLC