Jump to content


Allkateia Carvalho

Member Since 14/09/2015
Offline Last Active 04/10/2015, 08:25
-----

Topics I've Started

valor em variáveis com selects dinâmicos

14/09/2015, 19:38

Boa noite. Moderadores, me desculpem se estiver postando o código de maneira errada e se assim for, favor me corrigir explicando a maneira correta de postar o código. 
Este código é de autoria de Gilberto Albino de 31/03/2009, fiz algumas modificações e adaptações nele e assim usa-lo em meu novo projeto
Aqui eu escolho o país, o estado, a cidade e o bairro e o comercio. Depois de ter feito estas escolhas, tudo através de combos dinâmicos, eu quero entrar em uma outra tabela e mandar procurar as informações baseadas nas opções anteriores escolhidas. Ou seja:
 
Escolhi no 1º select o País Brasil
Escolhi no 2º select o Estado Minas Gerais
Escolhi no 3º select a Cidade Belo Horizonte
Escolhi no 4º select o Bairro Centro
Escolhi no 5º select o Comércio Papelaria
 
Isso quer dizer que existe 5 variáveis com os valores:
Brasil, Minas Gerias, Belo Horizonte, Centro e papelaria
 
Quero pegar estas 5 variáveis, acessar uma outra tabela e buscar informações contidas nesta tabela, baseada nas informações das variáveis anteriores e montar um novo select com todas as informações encontradas, criando assim uma lista com outro select para que o usuário possa escolher uma das informações contidas neste ultimo select.
 
Obs.: O código funciona perfeitamente, porem, quero fazer mais esta implementação. Se alguém quiser usá-lo, sinta-se a vontade, desde que coloque os devidos créditos.
Qualquer dúvida pergunta aí.
 
Este é o formulario php:
 
<html>
<head>
<script src="combo.js"></script>
 
<style>
label {
display:block;
}
label span {
font-weight:bold;
display:block;
}
select {
width:150px;
}
</style>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<h1>Localizações</h1>
<label><span>País:</span>
<select name="pais" id="pais"></select>
</label>
<label><span>Estado:</span>
<select name="estado" id="estado"><option value="0">--Primeiro o País--</option></select>
</label>
<label><span>Cidade:</span>
<select name="cidade" id="cidade"><option value="0">--Primeiro o Estado--</option></select>
</label>
<label><span>Bairro:</span>
<select name="bairro" id="bairro"><option value="0">--Primeiro a Cidade--</option></select>
</label>
<label><span>Comércio:</span>
<select name="comercio" id="comercio"><option value="0">--Primeiro o Bairro--</option></select>
</label>
<br />
<label><input type="submit" value="Procurar"  />
</form>
<?php
if($_POST) {
print '<pre>';
print_r($_POST);
print '</pre>';
}
?>
</body>
</html>
***************************************************************************************************************************************
 
 
Este é o php que faz os selects de acordo com as opção escolhidas
 
<?php
/*
 * Bloco para testar a conexão
 */
try {
/*
* Usei o banco mysql com o PDO.
 
*/
 
/*
* Variáveis de conexao
*/
$servidor = 'localhost';
$usuario = 'root';
$senha = '';
$banco = 'appcom';
 
$con = new PDO("mysql:host={$servidor};dbname={$banco}", $usuario, $senha);
$con->query('SET NAMES utf8');
/*
* Através deste bloco vamos alterar nossas consultas dinâmicas
*
* $sql = consulta própria do tipo
* $option = titulo que aparece no primeiro option da listagem
* $string = auxiliador da busca de resultados
*/
switch($_GET['tipo'])
{
case 'pais' :
$sql = "SELECT * FROM paises WHERE status = 1";
$option = 'o Pais';
$string = 'iso3';
break;
case 'estado' :
$sql = sprintf("SELECT * FROM estados WHERE iso3 = '%s' AND status = 1", $_GET['pais']);
$option = 'o Estado';
$string = 'uf';
break;
case 'cidade' :
$sql = sprintf("SELECT * FROM cidades WHERE uf = '%s'", $_GET['estado']);
$option = 'a Cidade';
$string = 'nome'; 
break; 
case 'bairro' :
$sql = sprintf("SELECT * FROM bairros WHERE cidade = '%s'", utf8_encode($_GET['cidade']));
$option = ' o Bairro';
$string = 'nome'; 
break; 
}
/*
* Executamos o SQL aqui
*/
$consulta = $con->query($sql);
/*
* Iniciamos o resultado como null
*/
$resultado = null;
/*
* O primeiro option que vai aparecer já com o titulo dinâmico a partir de $option
*/
$resultado = sprintf(
'<option value="%s">Escolha %s</option>', 
0,
$option
);
 
$resultado .= sprintf(
'<option value="%s">- - - - - - - - - - - - -</option>',
0
);
/*
* Busco os resultados usando $c->string para identificar o ID dinâmico pois varia, no caso temos iso3, uf, nome e nome
*/
while($c = $consulta->fetch(PDO::FETCH_OBJ)) {
$resultado .= sprintf(
'<option value="%s">%s</option>',
$c->$string,
// o campo nome é comum a todos
$c->nome 
); 
}
/*
* Imprimimos o resultado
*/
print $resultado;
 
} catch(Exception $e) {
/*
* Se não aparecer nada é porque a conexao falhou
*/
return null;
}
 
 
*********************************************************************************************************************************************
 
 
Este é o js
 
/*
 * Autor: Gilberto Albino
 * Data: 31/03/2009
 * Apaga isto por favor, hehe :D
 */
jQuery(document).ready
(
function() 
{
/*
* Chamamos aqui a função que vai controlar os campos.
* Desta forma, caso você precise repetir o combo dinâmico
* basta trocar os ID's dos SELECT's
*/
comboDinamico("pais", "estado", "cidade", "bairro", "comercio");
// suposição de segundo bloco de selects
// comboDinamico("pais_cliente", "estado_cliente", "cidade_cliente", "bairro_cliente");
}
);
/*
 * função para carregar uma lista dinâmica
 */
comboDinamico = function(pais, estado, cidade, bairro, comercio) {
/*
* Variáveis que precisamos pegar
* Usamos getElementById() pois é assim que conseguiremos
* passar o elemento por variável para jQuery
*/
var pais   = document.getElementById(pais);
var estado = document.getElementById(estado);
var cidade = document.getElementById(cidade);
var bairro = document.getElementById(bairro);
var comercio = document.getElementById(comercio);
/*
* Carregamos a lista automaticamente quando a página carrega
*/
$(pais).load('localizacoes.php?tipo=pais');
/*
* Populamos o combo dos estados quando trocamos um valor no pais
* Os próximos blocos serão similares quanto à validação pelo valor igual à zero
*/
$(pais).change(
function() {
if($(this).val() == 0) {
alert('Você precisa informar um PAÍS!');
$(this).focus();
} else {
$(estado).load('localizacoes.php?tipo=estado&pais=' + $(this).val());
}
}
);
/*
* Populamos o combo das cidades quando trocamos um valor no estado
*/ 
$(estado).change(
function() {
if($(this).val() == 0) {
alert('Você precisa informar o ESTADO!');
$(this).focus();
} else { 
$(cidade).load('localizacoes.php?tipo=cidade&estado=' + $(this).val());
}
}
);
/*
* Populamos o combo dos bairros quando trocamos um valor na cidade
*/ 
$(cidade).change(
function() {
if($(this).val() == 0) {
alert('Você precisa informar a CIDADE!');
$(this).focus();
} else { 
$(bairro).load('localizacoes.php?tipo=bairro&cidade=' + escape($(this).val()));
}
}
); 
/*
* Populamos o combo dos comercio quando trocamos um valor no bairro
*/ 
$(bairro).change(
function() {
if($(this).val() == 0) {
alert('Você precisa informar o BAIRRO');
$(this).focus();
} else { 
$(comercio).load('localizacoes.php?tipo=comercio&bairro=' + escape($(this).val()));
}
}
); 
/*
* Uma validação simples só para garantir que não escolher um valor nulo
*/
$(comercio).change(
function() {
if($(this).val() == 0) {
alert('Você precisa informar o COMÉRCIO!');
$(this).focus();
} else { 
return true;
}
}
); 
}
 

IPB Skin By Virteq