Ir para conteúdo
Edeg

Combobox estados e cidades PHP MYSQL

Recommended Posts

estou tentando fazer um combobox de estados e cidades, porem quando seleciono o estado a cidade nao carrega. consigo trazer os estado do banco, mas as cidades nao carrega.

 

alguem poderia me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites
<?php // astudy.php
// mysql: TABLE `tbcidades` (`id` int AUTO_INCREMENT pk,`uf` varchar(2),`cidade` varchar(45))
$mysqli=new mysqli("localhost","root","","astudy");
if(!isset($_GET['uf'])){
    $query=$mysqli->query("select uf from tbcidades group by uf order by uf");
    echo "<form>";
    echo "<input list='uf' name='uf' placeholder='selecione o estado'>";
    echo "<datalist id='uf'>";
    while($row=$query->fetch_assoc()){echo "<option value=".$row['uf'].">";}
    echo "</datalist></form>"; exit;}
$uf=$_GET['uf'];
echo "estado: $uf  <input type=submit value='mudar de estado' onclick=location.replace('astudy.php')>";
$query=$mysqli->query("select cidade from tbcidades where uf='$uf' order by cidade");
echo "<p><input list='cidades' placeholder='selecione a cidade'>";
echo "<datalist id='cidades'>";
while($row=$query->fetch_assoc()){echo "<option value=".$row['cidade'].">";}
echo "</datalist>";

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 23/10/2022 at 11:04, Edeg disse:

alguem poderia me ajudar?

Podemos sim, mas poste mais informações para sabermos qual é o seu real problema

 

Se for o caso mete isso no google:

cidades estados github

Verás um infinidade de projetos que nem depende de um banco de dados no girhub

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia.

Eu uso evento onchange no select dos estados para fazer uma chamada a uma função AJAX para retornar as cidades correspondentes.

O que acontece muito, são erros na execução no PHP. Abre o console do navegador e verifica se esta retornando algum erro.

Precisa debugar e postar aqui.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

estou tentando funcao no ajax com onchage.

let selectEstado = document.getElementById('id_estado');
 
selectEstado.onchange = () => {
    let selectCidade = document.getElementById('id_cidades');
    let valor = selectEstado.value;
    fetch("select_cons_municipio.php=" + valor)
    .then(response => {
        return response.text();
 
    })
    .then(texto => {
        selectCidade.innerHTML = texto;
    });
   
}

 

porem o que me da erro e no código php.

<?php
include_once("conect.php");
 
$id_estado = $_GET['id_estado'];
 
$query = $conn->prepare("SELECT id, nome
FROM  cidades
WHERE estados_id=:estados_id
ORDER BY nome ASC");
 
$data = ['estados_id' => $id_estado];   //linha 11
$query->execute($data);                        // linha 12
 
$registros = $query->fetchAll(PDO::FETCH_ASSOC);


 
foreach($registros as $option){
    ?>
    <option value="<?php echo $option['id']?>"><?php echo $option['nome']?></option>
    <?php
}

 

 

Fatal error: Uncaught Error: Call to a member function execute() on bool in C:\wamp64\www\dev\cons_municipio.php on line 12
( ! ) Error: Call to a member function execute() on bool in C:\wamp64\www\dev\cons_municipio.php on line 12

 

 

não consegui entender o erro.

 

desde já obrigado a todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!
Há uma pá de adequações a serem feitas, para se ter um código mais "robusto".
Mas tentando ir direto ao ponto...

perceba que nesta linha você coloca um sinal de igual

5 hours ago, Edeg said:

fetch("select_cons_municipio.php=" + valor)

 

nesta linha você espera receber a variável id_estado

5 hours ago, Edeg said:

$id_estado = $_GET['id_estado'];



tente assim:

fetch("select_cons_municipio.php?id_estado=" + valor)

e veja se a mensagem de erro muda

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 horas atrás, washalbano disse:

Olá!
Há uma pá de adequações a serem feitas, para se ter um código mais "robusto".
Mas tentando ir direto ao ponto...

perceba que nesta linha você coloca um sinal de igual

 

nesta linha você espera receber a variável id_estado



tente assim:


fetch("select_cons_municipio.php?id_estado=" + valor)

e veja se a mensagem de erro muda

 

4 horas atrás, washalbano disse:

Olá!
Há uma pá de adequações a serem feitas, para se ter um código mais "robusto".
Mas tentando ir direto ao ponto...

perceba que nesta linha você coloca um sinal de igual

 

nesta linha você espera receber a variável id_estado



tente assim:


fetch("select_cons_municipio.php?id_estado=" + valor)

e veja se a mensagem de erro muda

 

primeiramente obrigado pela ajuda.

continua não carregando as cidades, porem agora ao inspecionar a combobox aparece o erro

 

<select name="id_cidades" id="id_cidades"> == $0

( ! ) Fatal error: Uncaught Error: Call to a member function execute() on bool in C:\wamp64\www\dev\cons_municipio.php on line 12
( ! ) Error: Call to a member function execute() on bool in C:\wamp64\www\dev\cons_municipio.php on line 12
Call Stack
#TimeMemoryFunctionLocation
10.0023406992{main}(  )...\cons_municipio.php:0

</select>

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola nao sei se vai te ajudar

get_cidades.php

Faz assim

 

<?php

required_once('config.php');

 

if(!empty($_POST['id_estado'])) { $id = intval($_POST['id_estado']);

//resto do codigo aqui

?>

 

No javascript assim 

 

<script>

function cidades(val) {

$.ajax({

type:"POST",

url: "get_cidades.php",

success: function(data){

  $("#id_estado").html(data);

     }

  });

}

</script>

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
<?php
$municipios=file_get_contents("https://pt.wikipedia.org/wiki/Lista_de_munic%C3%ADpios_do_Brasil");
$arr=array();
$pos0=0;
for($i=1;$i<=5568;$i++){
    $pos1=strpos($municipios,"<li>",$pos0);
    $pos1a=strpos($municipios,"title",$pos1);
    $pos1b=strpos($municipios,">",$pos1a)+1;
    $pos1c=strpos($municipios,"<",$pos1b);
    $pos2=strpos($municipios,"</li>",$pos1);
    $arr[] =substr($municipios,$pos1b,$pos1c-$pos1b)." =>".substr($municipios,$pos1c+6,2);
    $pos0=$pos2;}
$estados=["AC","AL","AP","AM","BA","CE","DF","ES","GO","MA","MT","MS","MG","PA","PB","PR","PE","PI","RJ","RN","RS","RO","RR","SC","SP","SE","TO"];
echo "<select onchange=dynamicdropdown(this.options[this.selectedIndex].value)>";
echo "<option>Selecione um estado</option>";
foreach($estados as $estado){
    echo "<option>$estado</option>";}
echo "</select><p>";
echo "<select id=selCidade>";
echo "<option>Selecione a cidade</option>";
echo "</select>";
?>
<script>
    arr=<?=json_encode($arr)?>;
    function doHTML(list){
        string ="";
        index = 0;
        list.forEach(element => {string += `<option value=${index}>${element}</option>`;});
        return string;}
    function dynamicdropdown(escolha){
        exibir=arr.filter(right)
        selCidade.innerHTML = doHTML(exibir)
        function right(texto){
            ilen=String(texto).length;return escolha==String(texto).substring(ilen,ilen-2)}}
</script>

Aqui tem um erro, coloquei uma função dentro da outra. Mas ele funciona, e eu não precisei mais criar uma variável global para que o conteúdo da variável "escolha" chegasse até à função right.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.