Home
Button Mobile Webdesign em Foco
Newsletter Webdesign em Foco
Support Webdesign em Foco
Contribuition Webdesign em Foco
Doe para a Webdesign em Foco
Suporte da Webdesign em Foco
Fechar

Menu Dependente de Estado e Cidade com PHP, Javascript e MySql

21/08/2022

Nesse tutorial vamos aprender como criar um menu dependente de estado que ao ser selecionado abrirá as cidades relativas àquele estado. Utilizaremos PHP e Javascript.

Select de Estados e Cidades

Banco de Dados

O primeiro passo é criar o banco de dados com os estados e suas cidades relativas. Para isso, basta cópiar este código e salvar no PhpMyAdmin conforme explicado no vídeo.

A estrutura de arquivos do nosso projeto ficará assim:

Estrutura do Projeto de Estados e Cidades

index.php

A index vai abrigar o nosso html com os selects:

<?php
include('class/ClassEstados.php');
$objEstados = new ClassEstados();
?>
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>

    <select name="estado" id="estado">
        <option value="">Selecione o Estado</option>
      <?php foreach ($objEstados->getEstados() as $estado) { ?>
            <option value="<?php echo $estado->id;  ?>"><?php echo $estado->nome; ?></option>
      <?php } ?>
    </select>

    <br><br>

    <select name="cidade" id="cidade" disabled="disabled">
        <option value="">Selecione a Cidade</option>
    </select>


    <script src="assets/js/javascript.js"></script>
</body>
</html>

class/ClassConect.php

Essa é a classe de conexão do PHP ao banco de dados:

<?php
class ClassConect
{
    public function conectaDB()
    {
        try{
            return $con=new \PDO("mysql:host=localhost;dbname=sistema","root","");
        }catch (\PDOException $erro){
            return $erro->getMessage();
        }
    }
}

class/ClassEstados.php

Essa classe retorna todos os estados do banco de dados:

<?php
include('ClassConect.php');

class ClassEstados extends ClassConect
{

    public function getEstados()
    {
        $estados = $this->conectaDB()->prepare('select * from estados');
        $estados->execute();
        return $fEstados = $estados->fetchAll(\PDO::FETCH_OBJ);
    }

}

assets/js/javascript.js

No javascript pegaremos o valor do estado e buscaremos via ajax no banco as cidades relacionadas àquele Estado.

(function(win,doc){
    'use strict';

    doc.querySelector('#estado').addEventListener('change',async(e)=>{
       let reqs = await fetch('../../controllers/CidadeController.php',{
           method:'post',
           headers:{
               'Content-Type':'application/x-www-form-urlencoded'
           },
           body:`estado=${e.target.value}`
       });
       let ress = await reqs.json();
       let selCidades = doc.querySelector('#cidade');
       selCidades.options.length = 1;
       ress.map((elem,ind,obj)=>{
           let opt = doc.createElement('option');
           opt.value = elem.id;
           opt.innerHTML = elem.nome;
           selCidades.appendChild(opt);
       });
       selCidades.removeAttribute('disabled');
    });
})(window,document);

class/ClassCidades.php

Na classe de cidades buscaremos as cidades que tenham a coluna id_estado igual ao buscado pelo usuário:

<?php
include('ClassConect.php');

class ClassCidades extends ClassConect
{

    public function getCidades($idEstado)
    {
        $cidades = $this->conectaDB()->prepare('select * from cidades where id_estado = ?');
        $cidades->bindValue(1,$idEstado);
        $cidades->execute();
        return $fCidades = $cidades->fetchAll(\PDO::FETCH_OBJ);
    }

}

controllers/CidadeController.php

O controlador de cidades vai receber a requisição do javascript, vai solicitar as informações através da ClassCidades e devolver as cidades ao javascript como resposta:

<?php
include ('../class/ClassCidades.php');
$objCidades = new ClassCidades();
echo json_encode($objCidades->getCidades($_POST['estado']));

Por hoje é só! Sucesso nos códigos e na vida!

Receba as aulas da Webdesign em Foco em Seu Email
Suporte Webdesign em Foco

Posts Relacionados

Calendário / Agenda com PHP & JS - #14 Arrastando e Redimensionando Eventos
Neste vídeo vamos aprender como realizar o redimensionamento e o araste de eventos no Full Calendar atualizando a data e hora automaticamente no banco.
Saiba mais!
Formatando Datas no formato brasileiro e americano - PHP, JS e Python
Neste tutorial vamos aprender como trabalhar com formatação de datas (americana e brasileira) em três linguagens de programação: PHP, Python e Javascript.
Saiba mais!
PHP
PHP é uma das principais linguagens de programação utilizada nas plataformas web. Isso porque além de ser uma linguagem leve, o PHP é robusto.
Saiba mais!