Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Bruno S. Ferreira

Select Estados Só PHP

Recommended Posts

Boa noite;

eu tenho um BD com estados, cidades e bairros pronto.. Só que eu queria selecionar estado que abre cidades que abre bairros.. 
Sei que daá pra fazer de várias formas mas eu queria apenas em php se desse..

eu penso que poderia montar 3 select... tipo... SELECT * FROM cidades WHERE (aqui eu queria a escolha dos estados no select anterior)

não preciso que fiquem oculto antes de escolherem... mas preciso que se escolherem um estado.. só apareçam as cidades dele e o mesmo pro bairro..

Como eu poderia fazer?

<select name="estados" id="uf"> 
          <option>Selecione o Estado: </option>
          <?php $uf = $con->query("SELECT * FROM estado"); ?>
          <?php while($user = mysqli_fetch_array($uf)){ ?>
          <option value="<?php echo $user['uf']; ?>"><?php echo $user['nome']; ?></option>
          <?php } ?>
 </select> 

no próximo select abaixo deste eu queria que fosse utilizado o $uf escolhido

 

Se possível só em php..

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você usar somente PHP + HTML, ficaria pouco intuitivo e quebraria o UX (User eXperience). De qualquer forma, você pode fazer da seguinte forma:

<form>
    <select name="pais" id="pais"> 
        /** options **/
    </select>
    <button type="submit" name="submit" value="0">selecionar país</button>
  
    <select name="estados" id="uf"> 
        /** options **/
    </select>
    <button type="submit" name="submit" value="0">selecionar UF</button>
    
    <select name="cidades" id="cidade"> 
        /** options **/
    </select>
  
     /*** demais inputs ***/
  
    <button type="submit" name="submit" value="1">selecionar UF</button>
</form>

Para que o PHP receba o estado escolhido, você precisa submeter o formulário. Não existe outra forma de enviar dados para o PHP, apenas a forma que submete o formulário é diferente.

 

Agora repare nos buttons, o name e o value de cada button. Para diferenciar o button que é seleção do que é envio, existe o value. Se o value dele for 0, significa que está apenas enviando algum valor selecionado para o PHP. Se o valor for 1, significa que está submetendo o novo form.

 

No caso do submit do form, teria que validar da seguinte forma:

<?php

if (isset($_POST['submit']) && $_POST['submit'] == 1)
{
    /** realiza o insert/envio do formulário **/
}

Para os selects, basta apenas validar se veio valor e incluir a pesquisa.

<select name="pais" id="pais"> 
    <option>Selecione o País: </option>
    <?php
        $pais = $con->query("SELECT * FROM estado");

        while($user = mysqli_fetch_array($pais)) {
            //aqui irá validar qual foi o pais escolhido (caso haja um) e irá marcar a opção como selecioanda.
            $selected = isset($_POST['pais']) && $_POST['pais'] == $user['pais'] ? 'selected="selected"' : ""; ?>
            <option value="<?php echo $user['pais']; ?>" <?= $selected; ?> ><?php echo $user['nome']; ?></option>
        <?php } ?>
 </select>

<select name="estados" id="uf"> 
    <option>Selecione o Estado: </option>
    <?php
        if (isset($_POST['pais']) && $_POST['pais'] > 0)
        {
            $uf = $con->prepare("SELECT * FROM estado WHERE pais = ?");
            $uf->bind_param("s" , $_POST['pais']);
            $uf->execute();
        }
        else
        {
            $uf = $con->query("SELECT * FROM estado");
        }

        while($user = mysqli_fetch_array($uf)) {
            //aqui irá validar qual foi a UF escolhida (caso haja uma) e irá marcar a opção como selecioanda.
            $selected = isset($_POST['uf']) && $_POST['uf'] == $user['uf'] ? 'selected="selected"' : ""; ?>
            <option value="<?php echo $user['uf']; ?>"><?php echo $user['nome']; ?></option>
        <?php } ?>
 </select>

Esta é a teoria com um pouco de prática.

 

Se você usar o mínimo de javascript, deverá colocar um submit ao realizar o evento onChange no select. O que melhoraria bastante a UX, pois, é bem pouco "usual" ter que apertar em um button para selecionar o estado.

 

Ainda melhor, seria utilizar ajax, pois, não precisaria ter que recarregar a página toda a vez.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Gabriel,

Eu consegui do jeito que eu queria mas estando cada select numa página.. dai eu consegui tb utilizando onchange="document.forms['menuForm'].submit()   mas ele da um refresh e apaga o campo anterior.

não conheço nada de Ajax mas vou ter q começar a tentar

 

--- Eu fiz assim

--------------------------

Conexão....

<form action="" method="post" name="menuForm">
<select name="cidade" onchange="document.forms['menuForm'].submit();">
  <option value="0">Escolha a Opção</option>
      <?php $uf = $con->query("SELECT * FROM m2_localidade_bairro WHERE localidade_municipio_id='$bairro' ORDER BY titulo ASC"); ?>
          <?php while($user = mysqli_fetch_array($uf)){ ?>
          <option value="<?php echo $user['id']; ?>"><?php echo $user['titulo']; ?></option>
          <?php } ?>
</select>
</form><br>


-----------------------------
1 deste para estado/cidade e bairro.. funcionou bem.. mas 1 em cada página

Compartilhar este post


Link para o post
Compartilhar em outros sites

É uma possibilidade também, melhor da que eu sugeri. Normalmente, uma alternativa é o uso de abas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Errei ao postar incorretamente.. valeu por dar um toque..
Vou tentar abas mesmo.. boa ideia..

Heim.. já aproveitando que pode estar online.. veja se consegue me dar um auxilio..

estou tendo dificuldade com acentuação vinda do bd

já usei iso.. utf etc.. eu tenho outros bancos mas eu que inseria os dados e não tinha este problema mas pegando um pronto de estados e cidades esta vindo com este problema..

no meta eu usava o utf8 ok.. vi postagens sobre iso e alguns dados eu importava com o iso e deu certo mas este não ta dando e só estou encontrando com o charset latin1 

Colei um cod php .. um html.. e ambos nao deram efeito.. Sabe dizer o que eu poderia fazer?
O problema ta só no acento agudo 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por daemon
      Boa tarde,
       
      Eu tenho uma rotina que faz uma leitura do arquivo .xml de vários sites.

      Eu consigo pegar o tópico e a descrição, e mostrar a imagem que esta na pagina do link.
      Para isso utilizo esta função:
      function getPreviewImage($url) { // Obter o conteúdo da página $html = file_get_contents($url); // Criar um novo objeto DOMDocument $doc = new DOMDocument(); @$doc->loadHTML($html); // Procurar pela tag meta og:image $tags = $doc->getElementsByTagName('meta'); foreach ($tags as $tag) { if ($tag->getAttribute('property') == 'og:image') { return $tag->getAttribute('content'); } } // Se não encontrar og:image, procurar pela primeira imagem na página $tags = $doc->getElementsByTagName('img'); if ($tags->length > 0) { return $tags->item(0)->getAttribute('src'); } // Se não encontrar nenhuma imagem, retornar null return null; } // Uso: $url = "https://example.com/article"; $imageUrl = getPreviewImage($url); if ($imageUrl) { echo "<img src='$imageUrl' alt='Preview'>"; } else { echo "Nenhuma imagem encontrada"; }  
      Mas estou com um problema, esta funcão funciona quando coloco em uma pagina de teste.php. Preciso mostrar em uma página inicial diversas fotos de todos os links. (No caso acima só funciona 1).
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, me permita tirar uma dúvida com os amigos.

      Tenho um Formulário onde o Usuário digita todos os Dados necessários.

      Minha dúvida:
      --> como faço após o usuário digitar os dados e salvar, o Sistema chamar uma Modal ou mensagem perguntando se deseja imprimir agora ?

      Grato,
       
      Cesar
    • Por Carcleo
      Tenho uma abela de usuarios e uma tabela de administradores e clientes.
      Gostaria de uma ajuda para implementar um cadastro
       
      users -> name, login, passord (pronta) admins -> user_id, registratiom, etc.. client -> user_id, registratiom, etc...
      Queria ajuda para extender de user as classes Admin e Client
      Olhem como estáAdmin
      <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Admin extends User {     use HasFactory;            protected $fillable = [         'name',         'email',         'password',         'registration'     ];      private string $registration;     public function create(         string $name,          string $email,          string $password,         string $registration     )     {         //parent::create(['name'=>$name, 'email'=>$email, 'password'=>$password]);         parent::$name = $name;         parent::$email = $email;         parent::$password = $password;         $this->registration = $registration;     } } User
      <?php namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class User extends Authenticatable {     /** @use HasFactory<\Database\Factories\UserFactory> */     use HasFactory, Notifiable;     static string $name;     static string $email;     static string $password;     /**      * The attributes that are mass assignable.      *      * @var list<string>      */     protected $fillable = [         'name',         'email',         'password',     ];          /**      * The attributes that should be hidden for serialization.      *      * @var list<string>      */     protected $hidden = [         'remember_token',     ];     /**      * Get the attributes that should be cast.      *      * @return array<string, string>      */     protected function casts(): array     {         return [             'email_verified_at' => 'datetime',             'password' => 'hashed',         ];     }          public function roles() : BelongsToMany {         return $this->belongsToMany(Role::class);     }       public function hasHole(Array $roleName): bool     {                 foreach ($this->roles as $role) {             if ($role->name === $roleName) {                 return true;             }         }         return false;     }         public function hasHoles(Array $rolesName): bool     {                 foreach ($this->roles as $role) {             foreach ($rolesName as $rolee) {             if ($role->name === $rolee) {                 return true;             }          }         }         return false;     }         public function hasAbility(string $ability): bool     {         foreach ($this->roles as $role) {             if ($role->abilities->contains('name', $ability)) {                 return true;             }         }         return false;     }     } Como gravar um Admin na tabela admins sendo que ele é um User por extensão?
      Tentei assim mas é claro que está errado...
      public function store(Request $request, Admin $adminModel) {         $dados = $request->validate([             "name" => "required",             "email" => "required|email",             "password" => "required",             "registration" => "required"         ]);         $dados["password"] =  Hash::make($dados["password"]);                  $admin = Admin::where("registration",  $dados["registration"])->first();                  if ($admin)              return                    redirect()->route("admin.new")                             ->withErrors([                                 'fail' => 'Administrador já cadastrados<br>, favor verificar!'                   ]);                            $newAdmin = $adminModel->create(                                    $dados['name'],                                    $dados['email'],                                    $dados['password'],                                    $dados['registration']                                 );         dd($newAdmin);         $adminModel->save();         //$adminModel::create($admin);                  return redirect()->route("admin.new")->with("success",'Cadastrado com sucesso');     }  
    • Por violin101
      Caros amigos, saudações.
       
      Gostaria de tirar uma dúvida com os amigos, referente a PDV.
       
      Estou escrevendo um Sistema com Ponto de Vendas, a minha dúvida é o seguinte, referente ao procedimento mais correto.

      Conforme o caixa vai efetuando a venda, o Sistema de PDV já realiza:
      a baixa direto dos produtos no estoque
      ou
      somente após concretizar a venda o sistema baixa os produtos do estoque ?
       
      Grato,
       
      Cesar
       
    • Por violin101
      Caros amigos do grupo, saudações e um feliz 2025.
       
      Estou com uma pequena dúvida referente a Teclas de Atalho.

      Quando o Caps Lock está ativado o Comando da Tecla de Atalho não funciona.
      ou seja:
      se estiver para letra minúscula ====> funciona
      se estiver para letra maiúscula ====> não funciona
       
      Como consigo evitar essa falha, tanto para Letra Maiúscula quanto Minúscula ?

      o Código está assim:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'r' ) return;// Não é Ctrl+r, portanto interrompemos o script evt.preventDefault(); });  
      Grato,
       
      Cesar
×

Informação importante

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