Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá Pessoal,
Adaptei o codigo do site abaixo em meu form porém ele esta gravando o numero do estado no banco de dados porém eu gostaria de gravar o nome, como proceder?
http://www.daviferreira.com/posts/populando-selects-de-cidades-e-estados-com-ajax-php-e-jquery
Teve um usuario que mencionou como prodecer para fazer isso porém não consegui identificar onde colocar o código;
Olá pessoal, uma forma para armazenar o NOME do estado no banco de dados, ao invés do CÓDIGO do estado,
é criar uma consulta com o código do estado recebido do formulário, para trazer o nome do estado,
e daí sim ser salvo no banco de dados.
//Recebe do formulário o código do estado
$estado = $_POST ["cod_estados"];
// Faz a consulta para trazer o nome do estado pelo código recebido
$sql = "SELECT cod_estados, nome FROM estados WHERE cod_estados = ". $estado;
// Pega o nome do estado e atribui à string $estado_nome.
$res = mysql_query( $sql );
while ( $row = mysql_fetch_assoc( $res ) ) { $estado_nome = $row['nome'];};
//Para salvar no banco, utilize a string $estado_nome.
Agradeço desde já a ajuda.
Obrigado pela rapida resposta. Segue o link do cache
Diante da sua dica, imagino que em cod_estados deveria ser sigla?
Exato.
Deixe a sigla no atributo value do <option> e vai funcionar corretamente
Tentei mudar porem agora ele nao insere.
Tentei mudar direto no java e nao foi tambem
Mostre como fez. Deve ter feito algo errado.
Habilite todas as exibições de erro, como mostrado neste tópico, na Orientação No. 3 e também faça debug das queries como mostrado no mesmo link
ps: java e javascript são coisas bem diferentes
Me expressei errado, foi no "JavaScript "
Tentei dessa forma no form
<label for="cadastro_uf">Estado:</label>
<select name="cadastro_uf" id="cadastro_uf" class="form-control">
<option value=""></option>
<?php
$sql = "SELECT cadastro_uf, sigla
FROM estados
ORDER BY sigla";
$res = mysql_query( $sql );
while ( $row = mysql_fetch_assoc( $res ) ) {
echo '<option value="'.$row['sigla'].'">'.$row['sigla'].'</option>';
}
?>
</select>
Tambem tentei mudando no select name mas não consegui.
No arquivo que recebe os dados eu tambem tentei mudar para a sigla e não foi.
ps:tentei colocar seu codigo dentro do meu projeto e não consegui também
ao mudar de salvar o cod_estado para nome do estado você modificou tambem o tipo de dado do campo?
se ele salvava codigo (provalvemente int) e agora você salva nome (string) o campo no banco deve ser alterado para receber o tipo correto.
Kelvim,
O campo deixei como Varchar2 pois já utiliza sigla quando imputava texto
obrigado
djtuca2,
Mostre como você pega o valor vindo do formulário e monta o insert para inserir no banco de dados.
Você mudou o name do <select>. Logo, precisa mudar o valor em $_POST para usar cadastro_uf em vez de cod_estado>
djtuca2,
Mostre como você pega o valor vindo do formulário e monta o insert para inserir no banco de dados.
Kelvim,
Estou utilizando o form em bootstrap, este campo é parte de outros que ao clicar no botao de cadastrar ele faz uma validação em javascript, segue o codigo da validação
function validarCadastro(e){
$("#result").html('<img src="dist/img/loader.gif">');
var envio = $.post("plugins/php/dataInput.php", {
// Cadastro
cadastro_uf: document.getElementById('cadastro_uf').value,
TYPE: e
})
envio.done(function(data) { $("#result").html(data); })
envio.fail(function() { alert("Não foi possível carregar essa requisição."); })
}
Agora o Arquivo que faz o input após a validação de todos os campos do form
$PUT = $DB->prepare("INSERT INTO cadastro (cadastro_id, cadastro_relac, cadastro_status, cadastro_data_pedido, cadastro_nome_cliente, cadastro_telefone, cadastro_endereco, cadastro_cidade, cadastro_uf, cadastro_cep, cadastro_projeto, cadastro_tipo_servico, cadastro_velocidade, cadastro_vlan, delin_obs, cadastro_lat, cadastro_long) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
$PUT->execute(array(trim($_POST['cadastro_id']),
$_POST['cadastro_relac'],
$_POST['cadastro_status'],
$_POST['cadastro_data_pedido'],
$_POST['cadastro_nome_cliente'],
$_POST['cadastro_telefone'],
$_POST['cadastro_endereco'],
$_POST['cadastro_cidade'],
$_POST['cadastro_uf'],
$_POST['cadastro_cep'],
$_POST['cadastro_projeto'],
$_POST['cadastro_tipo_servico'],
$_POST['cadastro_velocidade'],
$_POST['cadastro_vlan'],
$_POST['delin_obs'],
$_POST['cadastro_lat'],
$_POST['cadastro_long']
));
> Você mudou o name do <select>. Logo, precisa mudar o valor em $_POST para usar cadastro_uf em vez de cod_estado
Beraldo,
Tudo que era cod_estado alterei para cadastro_uf
E ainda assim não inseri?
debungando, coloque echo para $_POST['cadastro_uf'], para confirmar se a segla está chegando certo
var_dumpp($PUT) para ver e verifique o insert se foi montado corretamente
outra dica que posso dar é habilitar os erros do php, para exibir as mensagens do erro.
como você está trabalhando com ajax, pode fazer a requisição com a janela de desenvolvedor do Chrome aberta, na aba network e verificar os envios e as resposta do servidor.
Kelvim,
Deixei Sigla na opcao de option e ele insere a sigla agora no banco, porém agora ele não me traz a cidade.
<?php
$sql = "SELECT cadastro_uf, sigla FROM estados ORDER BY sigla";
$res = mysql_query( $sql );
while ( $row = mysql_fetch_assoc( $res ) ) {
echo '<option value="'.$row['sigla'].'">'.$row['sigla'].'</option>';
}
?>
Acredito eu que é devido o POST estar trazendo a sigla exemplo "RJ" e esta sigla não ter na tabela de cidades e sim o numero dela. alguma sugestão?
se na tabela de cidade não tem referencia a sigla você pode resolver fazendo um join entre cidade e uf.
SELECT *.tabelaCidade FROM tabelaCidade
JOIN estados ON codigo_uf = codigoUfNaCidade
where sgla = $_POST['cadastro_uf']
Se o relacionamento das tabelas é feito com o ID, tem que manter o ID no value, voltando a ser como era antes.
Só faria sentido alterar para sigla se você posse retirar o relacionamento ou alterá-lo para usar a sigla em vez do ID
>
se na tabela de cidade não tem referencia a sigla você pode resolver fazendo um join entre cidade e uf.
SELECT *.tabelaCidade FROM tabelaCidade
JOIN estados ON codigo_uf = codigoUfNaCidade
where sgla = $_POST['cadastro_uf']
Dessa forma resolveu, tambem forcei no banco ao invez do ID, colocar a sigla e foi também. agradeço muito a sua ajuda.
>
Se o relacionamento das tabelas é feito com o ID, tem que manter o ID no value, voltando a ser como era antes.
Só faria sentido alterar para sigla se você posse retirar o relacionamento ou alterá-lo para usar a sigla em vez do ID
Fiz dessa forma e funcionou tambem, agradeço muito a sua ajuda e paciência.
O link não está abrindo, mas o que você precisa mudar é o valor recebido em $estado. Em vez de "cod_estado" tem que usar o elemento que tenha o nome do estado em vez do seu código. Ou talvez mudar o HTML para enviar o nome do estado em vez do código
Talvez este meu código lhe seja útil: http://rberaldo.com.br/combo-com-as-cidades-e-estados-do-brasil-usando-ajax/
PS: funções mysql_* estão obsoletas desde o PHP 5.5 e já foram removidas no PHP 7. Prefira usar MySQLi ou PDO. Veja mais aqui: http://rberaldo.com.br/mysql-obsoleto-php/