terça-feira, 27 de novembro de 2018

‘Combo’ dinâmico cidades-estados SEM Ajax


Hoje veremos como criar aqueles famosos combos dinâmicos (ou menus “select options”) tipo cidades-estados (o 2º ‘combo’ altera-se conforme a opção selecionada no 1º) usando PHP, o banco de dados Mysql e apenas um comando javascript.
Siga os passos:
Primeiro crie em seu banco de dados uma tabela de estados:


CREATE TABLE `estados` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `nome` varchar(50) NOT NULL,
  `uf` char(2) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

E a seguir uma tabela de cidades:

CREATE TABLE `cidades` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `nomeCidade` varchar(100) NOT NULL,
  `idEstado` int(10) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `cidade` (`nomeCidade`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

-          Obs: Não esqueça a coluna “idEstado”; ela é que relaciona as duas tabelas, ok?

Agora insira alguns registros para teste (se quiser, aproveite e treine 1 pouco tb sua SQL, fazendo algumas consultas).

A seguir vamos ao código PHP; como é realmente bem simples já reproduzi abaixo:

<?php
// conexao

$consulta = $db->prepare("select * from estados");
$consulta->execute();
?>

<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Teste selects dinamicos</title>
<script type="text/JavaScript">
</script>
</head>

<body>

<form action="" method="post" name="form1" id="form1">

<label class="control-label"></label>
<label>
<select name="estado" id="estado" onChange="submit(estado.value)" >
  <option value="">Selecione o estado:</option>
  <?php
while($row = $consulta->fetch(PDO::FETCH_OBJ)){
?>
  <option value="<?php echo $row->id;?>"><?php echo $row->uf;?></option>
  <?php
}
?>
</select>
</label>

<?php

if(isset($_POST['estado'])){
$idEstado=$_POST['estado'];
$consulta2 = $db->prepare("select * from cidades where IDestado='$idEstado'");
$consulta2->execute();

?>
&nbsp;
<label>
<select name="cidades" id="cidades" onChange="submit(cidades.value)">
<option value="">Selecione a cidade: </option>

<?php
while($row2 = $consulta2->fetch(PDO::FETCH_OBJ)){
?>

<option value="<?php echo $row2->id;?>"><?php echo $row2->nomeCidade;?></option>

<?php
} }
?>
</select>
</label>
<br />
</form>

</body>
</html>

E é isso aí! Observe que a “mágica” toda é feita pelo comando onChange="submit(estado.value)", que envia o “value” do estado selecionado (no caso, o “ID”) para a 2ª consulta ($consulta2).

Caso queira mais dicas sobre relacionamento de tabelas, veja aqui: