Pass value to variable

0

I need the variable $idestados to get the value of the state id when an option is selected but I'm getting ugly from ajax and jquery so I want to know if you have a better option to do that.

The $anuncio is a class that makes select in the table states of bdd through selEstados() and returns an array with all information, it also has selCidades(id_estado) that does the same with the bdd cities table but it gets the state id as a parameter:

 <select name="estados" id="estados" ">                                    
    <option value="0" selected disabled>Selecione um estado</option>
    <?php 
    $estados=$anuncio->selEstados();
    foreach ($estados as $estado){
       echo '<option value="'.$estado['id'].'">'.$estado['sigla'].'- 
     '.$estado['nome'].'</option>';
    }

    ?>
 </select><br>
 <select name="cidades" id="cidades" >
    <option value="0">Selecione um estado primeiro...</option>
    <?php
        $cidades=$anuncio->selCidades($idestados);
        foreach ($cidades as $cidade){                                            
            echo '<option value"'.$cidade['nome'].'">'.$cidade['nome'].'</option>';
        }
    ?>

 </select>

this code

require_once "anuncio.php";
$anuncio =  new anuncio();
$estados= $anuncio->selEstados();
print_r($estados);

produces this result:

alsothe

require_once"anuncio.php";
$anuncio =  new anuncio();
$cidades= $anuncio->selCidades();
print_r($cidades);

will produce the same effect but with the names of the cities and the state id instead of the acronym

    
asked by anonymous 22.04.2018 / 01:00

3 answers

1

The @LipESprY example illustrates exactly what you need, however sucess and error are obsolete and have changed to done and fail :

$(function(){
    $('#estados').on('change', function(){
        $.ajax({
            url: 'getcidades.php',
            data: 'estado=' + $('#estados').val(),
            dataType: "json",
            method: 'POST',
            cache: false,
            beforeSend: function() {
                console.log($('#estados').val());
            }
         }).done(function(data) {
                let options;
                $.each(data, function(chave, valor){
                    options += "<option value=\""+valor+"\">"+valor+"</option>";
                });
                $('#cidades').html(options);
        }).fail(function(e) {
                console.log(e);
        });
    });
});
    
22.04.2018 / 06:57
1
  

Could you give me an example of how it would work based on the code I went through?

Form file ( .php ):

<?php
    // INICIALIZAÇÃO DAS VARIÁVEIS:
    $estados = array("RIO DE JANEIRO", "ESPÍRITO SANTO", "MINAS GERAIS", "BAHIA");
?>

<!-- CARREGAMENTO DO JQUERY -->
<script src="scripts/jquery-1.12.0.min.js" type="text/javascript"></script>

<select name="estados" id="estados">
    <option value="0" selected disabled>Selecione um estado</option><?php
    //$estados=$anuncio->selEstados();
    foreach ($estados as $estado) {
        echo "<option value=\"".$estado."\">".$estado."</option>";
    } ?>
</select>

<br>

<select name="cidades" id="cidades">
    <option value="0">Selecione um estado primeiro...</option>
</select>

<script type="text/javascript">
    $(function(){
        $('#estados').on('change', function(){
            $.ajax({
                url: 'getcidades.php',
                data: 'estado=' + $('#estados').val(),
                dataType: "json",
                method: 'POST',
                cache: false,
                beforeSend: function() {
                    console.log($('#estados').val());
                },
                success: function(data) {
                    let options;
                    $.each(data, function(chave, valor){
                        options += "<option value=\""+valor+"\">"+valor+"</option>";
                    });
                    $('#cidades').html(options);
                },
                error: function(e) {
                    console.log(e);
                }
            });
        });
    });
</script>

File that handles the Ajax request getcidades.php ):

<?php
    header('Content-Type: application/json');

    if ($_POST['estado']) {
        switch($_POST['estado']) {
            case "RIO DE JANEIRO":
                $cidades = array("RIO DE JANEIRO", "SÃO GONÇALO", "NITERÓI");
                break;
            case "ESPÍRITO SANTO":
                $cidades = array("VITÓRIA", "GUARAPARY", "VILA VELHA");
                break;
            case "MINAS GERAIS":
                $cidades = array("BELO HORIZONTE", "VIÇOSA", "JUIZ DE FORA");
                break;
            case "BAHIA":
                $cidades = array("SALVADOR", "PORTO SEGURO", "JUAZEIRO");
                break;
        }
        echo json_encode($cidades);
    }
  • Of course it's very simple! It is just a copy for you to adapt as needed ...

  • Note that for this example the jQuery library was used in version 1.12 ! If you use a newer version, you should be aware of deprecation and successive removal of the success and error attributes used in this code.

  

Deprecation Notice: The jqXHR.success (), jqXHR.error (), and jqXHR.complete () callbacks are removed as of jQuery 3.0. You can use jqXHR.done (), jqXHR.fail (), and jqXHR.always () instead.

     

Read Recommendation: jQuery.ajax ()   

Special thanks to Guilherme Costamilam for notifying and updating the code with jQuery on version 3 .

    
22.04.2018 / 02:29
0

I resolved this:

<select name="estados" id="estados" title="Selecione um Estado">
    <option value="0" selected disabled>Selecione um estado</option>
    <?php
      $feachall=$anuncio->selEstados();
      foreach ($feachall as $estados){
         echo '<option value="'.$estados['id'].'">'.$estados['nome'].'</option>';
      }                      
     ?>
</select><br>
<select name="cidades" id="cidades"  >
     <option value="0">Selecione um estado primeiro...</option>


</select><br>

the script

<script>
$("#estados").on("change",function(){
let idEstado = $("#estados").val();
$.ajax({
    url: 'pega_cidades.php',
    type: 'POST',
    data:{id:idEstado},
    beforeSend: function(){

        $("#cidades").html("Carregando...");
    },
    success: function(data){

        $("#cidades").html(data);
    },
    error: function(){

        $("#cidades").html("Houve um erro ao carregar");
    }
  });
});

</script>

and the page pega_cidades.php

<?php
    require_once'../cerebro/conectarbdd.php';
    $db = new conectarbdd;
    $conexao=$db->conectar();
    $conexao->exec("SET CHARACTER SET utf8");
    $pegaCidades=$conexao->prepare("SELECT * FROM cidades WHERE 
    estados_id='".$_POST['id']."'" );
    $pegaCidades->execute();
    $fetchall = $pegaCidades->fetchAll();

    foreach ($fetchall as $cidades){

      echo '<option value="'.$cidades['nome'].'">'.$cidades['nome'].'</option>';
  }
    
23.04.2018 / 20:30