Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Galera, boa tarde.
Procurei algo no fórum porém não consegui chegar a uma conclusão sobre a forma de solucionar a minha necessidade.
Estou desenvolvendo um sistema em PHP onde em um dos formulários html eu tenho dois campos <select> preenchidos por um foreach de um de um select mysql. O primeiro campo é referente ao cliente, onde deve ser escolher o cliente. No segundo campo temos os contratos e para isso tenho que limitar os contratos que retorna no select que realizo de acordo com o id do cliente escolhido no primeiro campo <select>.


Andei procurando aqui no fórum e encontrei alguns parecidos a esta necessidade, mas não relacionado a select a banco. Alguém poderia me dar uma auxilio? Seria com Jquery? Como devo proceder?
Obs: Releva alguns erros nas boas práticas da linguagem, estou iniciando neste mundo kkk.
Att>
Citar
$(document).ready(function () {
$('.form-control').change(function () {
var str = $('.form-control option:selected').attr('value');
seletorTroca(str);
return false;
});
});
Esta função entendi, ela coleta o valor da option que está selecionada. Agora a segunda function não entendi muito bem:
>
Citar
function seletorTroca(param) {
$('.imprimir-resultado').text(param);
}
Para eu conseguir efetuar o select com o resultado escolhido na primeira option eu teria que enviar este parâmetro para a função que consultaCliente não?
<div class="form-group">
<?php $ClienteDAO = new ClienteDAO();
$Clientes = $ClienteDAO->ConsultaCliente();
?>
Como eu passo o valor coletado pela function que você criou para esta função do objeto ConsultaCliente();?Poste a classe ClienteDAO.
Porque:
$ClienteDAO = new ClienteDAO(); // Instância de classe (objeto)
$Clientes = $ClienteDAO->ConsultaCliente() // Requisição de método da classe ClienteDAO
E o que a classe faz, em particular o método ConsultaCliente? Não deveria ter parâmetros nisso?public function ConsultaCliente(){
try{
$sql = "select * from cadastro_cliente ";
$stmt = Conexaodb::getInstance()->query($sql);
return $stmt->fetchall(PDO::FETCH_ASSOC);
}catch(Exception $e){
$erro = array();
$array = $stmt->errorInfo();
$erro = $array["2"];
echo $erro;
die;
header("location:contrato-formulario.php?SqlError=$erro");
}
}
Ela faz apenas uma consulta na tabela cadastro_clienteBom dar para fazer tudo com uma busca só, porém requer atenção na hora de tratar cada coisa.
Criei esse exemplo bem simples e completo como você pode proceder.
Spoiler
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script src="jquery-3.2.1.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
// Remove o comportamento original no envio de formulário
$('form').submit(function () {
return false;
});
// A partir do primeiro select tenho os dados passados por string
$('.form-control').change(function () {
// Pego o valor do atributo value
var str = $('.form-control option:selected').attr('value');
// Faço a busca pelas barras que estão na extring assim crio uma array em relação a cada barra
var result = str.split('/');
// Inejeto os índices da array no value do segundo select
$('.contres').val(result[0]);
$('.mailres').val(result[1]);
$('.foneres').val(result[2]);
// Isso seria caso quisesse mostrar os resultados
//$('.contres').html(result[0]);
//$('.mailres').html(result[1]);
//$('.foneres').html(result[2]);
// Exibo o segundo select
$('.form-control-contato').show();
return false;
});
});
function enviarContato() {
var cliente = $('input[name="cliente"]').val();
var contato = $('select[name="contato"]').val();
var mensagem = $('textarea[name="mensagem"]').val();
if (!mensagem) {
$('.mostrar-resultado').html('<font color="#ff0000">Digite uma mensagem!</font>');
} else {
$('.mostrar-resultado').html('<p>Post foi enviado para:' + cliente + '</p><p>O contato é: ' + contato + '</p><p>Memsagem enviada:' + mensagem + '</p>');
}
return false;
}
</script>
</head>
<body>
<?php
// Essa é a simulação do resultado obtido do objeto $Clientes
$Clientes = [
array('login' => 'João', 'mail' => 'maildojoao@joao.com', 'fone' => '11-11-11'),
array('login' => 'Marcos', 'mail' => 'maildomarcos@marcos.com', 'fone' => '22-22-22'),
array('login' => 'Lucas', 'mail' => 'maildolucas@lucas.com', 'fone' => '33-33-33'),
];
?>
<select class="form-control">
<?php
foreach ($Clientes as $value) {
?>
<option value="<?= "{$value['login']}/{$value['mail']}/{$value['fone']}"; ?>"><?= $value['login']; ?></option>
<?php
}
?>
</select>
<form method="post" onsubmit="return enviarContato();">
<input name="cliente" class="contres" type="hidden" value=""/>
<select name="contato" class="form-control-contato" style="display: none">
<option class="mailres" value="">E-Mail</option>
<option class="foneres" value="">Telefone</option>
</select>
<br>
<textarea name="mensagem"></textarea>
<br>
<button>Enviar</button>
</form>
<!-- Isso é só para mostrar o resultado de tudo -->
<div class="mostrar-resultado"></div>
</body>
</html>
No mais com o formulário você deve enviar os dados para uma arquivo php que tratará dos dados.
Se quiser saber como manipular facilmente POO junto a jQuery está aqui o exemplo que precisa:
[https://www.youtube.com/playlist?list=PLC60WB-CP2vqZNJXj6XWakU7tEDHb0RQ2](https://www.youtube.com/playlist?list=PLC60WB-CP2vqZNJXj6XWakU7tEDHb0RQ2)Obrigado pela ajuda,
Consegui tratar todo o formulário via Ajax. Recebi os dados após a ação de change do select, enviei via get para um arquivo PHP e la efetuei o Ajax retornando um array com o html completando outra tag <select>.
Att
Rapidinho sem pensar em uma solução mais precisa eu faria assim:
Pegaria o ID do cliente e colocaria assim como você fez, ao selecionar ele por sua vez eu executaria outra função para fazer novamente uma busca no banco a partir do cliente selecionado.
<!DOCTYPE html>