Jump to content

Como criar um select dinâmico para exibir cidades a partir do banco de dados no CodeIgniter 4?


Ir para a Solução Solucionado por Fernado Von Vougher,

Postagens Recomendadas

Postado

Esse código eu peguei com a Gemini

<?php // cidades.php
namespace App\Models;
use CodeIgniter\Model;
class CidadesModel extends Model
{
    protected $table      = 'cidades';
    protected $primaryKey = 'id';
    public function getCidades()
    {
        return $this->findAll();
    }
}

<?php // Home.php
namespace App\Controllers;
use App\Models\CidadesModel;
class Home extends BaseController
{
    public function index()
    {
        $model = new CidadesModel();
        $dados['cidades'] = $model->getCidades();
        return view('home', $dados);
    }
}

<!DOCTYPE html><!-- home.php -->
<html>
<head>
    <title>Exemplo CodeIgniter 4</title>
</head>
<body>
    <form>
        <select name="cidade">
            <option value="">Selecione uma cidade</option>
            <?php foreach($cidades as $cidade): ?>
                <option value="<?= $cidade['id'] ?>"><?= $cidade['nome'] ?></option>
            <?php endforeach; ?>
        </select>
    </form>
</body>
</html>

Espero que isso lhe ajude.

  • Curtir 2
  • 2 weeks later...
Postado

Muito obrigado pela ajuda, aprendi com essas dicas, já esta rodando quando faço uma INCLUSÃO, mais quando vou fazer uma EDIÇÃO , não aparece o que havia INSERIDO no campo SELECT da tela, Precisa fazer alguma outra rotina para que apareça no campo SELECT da tela o valor INSERIDO para EDITAR? Quando puder orientar na ajuda, agradeço, abraço

Observ.: Esta gravando corretamente no banco de dados. Somente preciso que quando for EDITAR traga no campo cidade o nome cadastrado.

  • Curtir 1
Postado (editado)

Eu não trabalho com o CodeIgniter, assim não sei como lhe ajudar.

A minha praia é o POG (Programação Orientada para Gambiarra), o que segue é um péssimo exemplo de programação, ele só funciona a partir do PHP 8.2.


arquivo /Astudy/cidadeEditar.php
<!-- cidadesEditar.php -->
<table style="width:500px;margin:0 auto">
    <?php foreach($cidades as $cidade): ?>
    <form method=post action=?Cidades.editado>
    <tr><td><?=$cidade->id?><input type=hidden name=id value=<?=$cidade->id?>>
        <td><input name=cidade value="<?=$cidade->nome?>">
        <td><input type=submit>
    </form>
    <?php endforeach;?>
</table>


arquivo /Astudy/cidades.php
<?php
class Cidades 
{
    function inicio()
    {
        $cidades=(new Conn)->select("* from cidades");
        return view('cidadeEditar',['cidades'=>$cidades]);
    }

    function editado()
    {
        $novoNome=$_POST['cidade'];
        $id=$_POST['id'];
        (new Conn)->update("cidades set nome='$novoNome' where id=$id");
        return $this->inicio();
    }
}

arquivo /Astudy/config.php
<?php // config.php

defined('HOST') || define('HOST', 'localhost');
defined('DBNAME') || define('DBNAME', 'teste');
defined('USER') || define('USER','root');
defined('PASSWORD') || define('PASSWORD', '');

spl_autoload_register(fn ($class) => 
    require str_replace('\\', DIRECTORY_SEPARATOR, strtolower($class)) . '.php');

function view($arquivo, $array = null)
{
    if (!is_null($array)){
        foreach ($array as $var => $value)
        {
            ${$var} = $value;
        }
    }
    ob_start();
    include $arquivo . ".php";
    ob_flush();
}

class Conn
{
    private static $pdo;

    public static function instancia()
    {
        if(!self::$pdo)
        {
            self::$pdo=new PDO("mysql:host=".HOST.";dbname=".DBNAME,USER,PASSWORD);
        }
        return self::$pdo;
    }

    function insert($sql)
    {
        return $this->instancia()->query("insert into $sql");
    }
    
    function select($sql)
    {
        $stmt=$this->instancia()->query("select $sql");
        return $stmt->fetchAll(PDO::FETCH_OBJ);
    }
    
    function update($sql)
    {
        return $this->instancia()->query("update $sql");
    }
        
}


arquivo /Astudy/index.php
<?php // index.php
require 'config.php';
$rota='Cidades_inicio';
if($_GET)
{
    if(strpos(key($_GET),"_")==0)
    {
        exit;
    }
    $rota=isset($_GET) ? key($_GET) : $rota;
}
$segmentos=explode('_',$rota);
$nomeControle=$segmentos[0] ?? 'Cidades';
$metodo=$segmentos[1] ?? 'inicio';
$parametro=$segmentos[2] ?? null;
$controle=new $nomeControle();
$controle->$metodo($parametro);


arquivo /Astudy/mysql.sql
CREATE TABLE `cidades` (
  `id` int NOT NULL AUTO_INCREMENT,
  `nome` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

 

Editado por frankhosaka
  • Curtir 2
Postado

Ola Frank, fico grato novamente pela ajuda e orientação, estou iniciando na programação codeigniter 4, não tenho experiência na área, mais estou tentando encontrar uma solução prática para o problema na edição. Gostei do código apresentado. pena que não é para codeigniter 4, mais dei uma olhada, entendi o conceito aplicado. Valeu pela dedicação,  Vou tentando, caso conheça alguém que tenha conhecimentos com Codeigniter 4 e posso orientar-me , agradeço.Grande abraço

  • Curtir 1
Postado (editado)

Estudei um pouco de codeignitor, e consegui isso:

mysql.teste.cidades(id,nome) (1,'Diadema')

arquivo .env
atabase.default.hostname = localhost
database.default.database = teste
database.default.username = root
database.default.password = 
database.default.DBDriver = MySQLi
database.default.DBPrefix =
database.default.port = 3306

arquivo app > Config > Routers.php
use CodeIgniter\Router\RouteCollection;
use App\Controllers\Cidades;
$routes->get('/',[Cidades::class,'inicio']);
$routes->post('cidadeEditado',[Cidades::class,'editado']);


arquivo app > Models > CidadesModel.php
<?php
namespace App\Models;
use CodeIgniter\Model;

class CidadesModel extends Model
{
    protected $table='cidades';
    protected $allowedFields=['nome'];
}

arquivo app > Controllers > Cidades.php
<?php
namespace App\Controllers;
use App\Models\CidadesModel;

class Cidades extends BaseController
{
    function editado()
    {
        ini_set('display_errors', 1);
        $dados=$_POST;
        $id=array_shift($dados);
        (new CidadesModel)->update($id,$dados);
        return $this->inicio();
    }
    
    function inicio()
    {
        ini_set('display_errors', 1);
        $id=1;
        $nome=(new CidadesModel)->where('id',$id)->first()['nome'];
        return view('cidadeEditar',['id'=>$id,'nome'=>$nome]);
    }
}

arquivo app > Views > cidadeEditar.php
<form method=post action=cidadeEditado>
    <table>
    <tr><td>id<td><input type=button value=<?=$id?>>
                  <input type=hidden name=id value=<?=$id?>>
    <tr><td>Novo nome<td><input name=nome value='<?=$nome?>'>
    <tr><td><td><input type=submit>
    </table>
</form>

 

Editado por frankhosaka
  • Ajudou! 1
  • 3 weeks later...
  • Solução
Postado

Ola Pessoal, aqui esta a solução que pratiquei para resolver o problema ocorrido

    <!-- Seleção de Cidade -->
                               <div class="form-row">
                                  <div class="form-group col-4">
                                   <label for="city" class="col-form-label">Cidade</label>
                                
                                    <select name="cidade_id" id="cidade_id" class="form-control">
                                        <option value="">Select Cidades</option>
                                        <?php
                                        $listaCidades = !empty($selectCity) ? $selectCity : $cidades;
                                        if (!empty($listaCidades)) {
                                            foreach ($listaCidades as $row) {
                                                $selected = isset($company['cidade_id']) && $company['cidade_id'] == $row['id'] ? 'selected' : '';
                                                ?>
                                                <option value="<?= $row['id']; ?>" <?= $selected; ?>>
                                                    <?= $row['MunNOMEX']; ?>
                                                </option>
                                                <?php
                                            }
                                        }
                                        ?>
                                    </select>
                                  </div>

Obs. Grato a todos na cooperação e ajuda, abraço

  • Ajudou! 1
  • Casa do Desenvolvedor mudou o título para Como criar um select dinâmico para exibir cidades a partir do banco de dados no CodeIgniter 4?

Crie uma conta ou entre para comentar 😀

Você precisa ser um membro para deixar um comentário.

Crie a sua conta

Participe da nossa comunidade, crie sua conta.
É bem rápido!

Criar minha conta agora

Entrar

Você já tem uma conta?
Faça o login agora.

Entrar agora


×
×
  • Create New...