3
Personal I cannot get values from performing research with JSON and database after adding new dynamic product line with Javascript.
HTML form, the product is searched by code:
<form id="adicionarformProdutos" method"post" action"" enctype="multipart/form-data">
<a href="#" id="adicionarProduto">Adicionar Faixa</a>
<fieldset class="fieldsetProduto">
<legend>Produto 1</legend>
<div class="produtos">
<label for="codProduto1">Código:</label><input type="text" id="codProduto1" size="5" name="codProduto[1]" />
<label for="nomeProduto1">Nome:</label> <input type="text" id="nomeProduto1" size="9" disabled name="nomeProduto[1]" />
<label for="qtProduto1">Qt.:</label> <input type="number" min="1" max="999" size="1" id="qtProduto1" name="qtProduto[1]" onblur="calcValor()" />
<label for="valorProduto1">Valor und. R$:</label> <input type="text" id="valorProduto1" disabled name="valorProduto[1]" size="6" onkeypress="mascara(this,float)" />
</div>
</fieldset>
</form>
JSON section that searches the products and fills the other variables:
//-----------------------------------------------------
//Funcao: functionjson
//Autor: Rafael Assmann <[email protected]>
//Sinopse: Json para capturar código do produto e reali
//zar a busca no banco de dados e preencher os demais campos deste produto
//Parametro:
// codProduto[] : código do produto digitado para pesquisa
//Retorno: nomeProduto[], qtProduto[] e valorProduto[] : informações do BD
//-----------------------------------------------------
$(document).ready(function(){
$("input[name='codProduto[1]']").blur(function(){
var nomeProduto = $("input[name='nomeProduto[1]']");
var qtProduto = $("input[name='qtProduto[1]']");
var valorProduto = $("input[name='valorProduto[1]']");
$( nomeProduto ).val('Carregando...');
$( qtProduto ).val('Carregando...');
$( valorProduto ).val('Carregando...');
$.getJSON(
'function.php',
{ codProduto: $( this ).val() },
function( json )
{
$( nomeProduto ).val( json.nomeProduto );
$( qtProduto ).val("1");
$( valorProduto ).val( json.valorProduto);
}
);
});
});
Excerpt where you add more products, than where JSON interaction does not work:
$(function () {
var i = 1;
$("#adicionarProduto").click(function () {
i++;
novoProduto = $(".fieldsetProduto:first").clone();
novoProduto.find("input").each(function () {
$(this).val("")
});
$("#adicionarformProdutos").append("
" + novoProduto.html().replace(/1/g, i) + "")
});
});
Insert in the database, OBS: the variables that are fed by JSON seem to be empty:
<?php
$Ficha = filter_input(INPUT_GET,'id');
?>
<div id="painelcadastro2" align="center">
<?php if (isset($_GET['cadastra']) && $_GET['cadastra'] == 'add') {
$datacompra = implode("-", array_reverse(explode("/",$_GET['datacompra'])));
$nomeProduto = filter_input(INPUT_GET, 'nomeProduto1');
$qtProduto = filter_input(INPUT_GET, 'qtProduto1');
$valorProduto = filter_input(INPUT_GET, 'valorProduto1');
$parcelas = filter_input(INPUT_GET, 'select_parcelas');
$entrada = filter_input(INPUT_GET, 'entrada');
$total = filter_input(INPUT_GET, 'total');
$pagamento = "CREDIARIO";
$cadastra = mysql_query("INSERT INTO t_cadcontratos (Ficha, DataContrato, QuantParcelas, ValorContrato, Entrada, Saldo, DescricaoProduto, QuantProdutos, FormaPagamento)
VALUES ('$Ficha', '$datacompra', '$parcelas', '$valorProduto', '$entrada', '$total', '$nomeProduto', '$qtProduto', '$pagamento')");
if($cadastra == '1') {
echo "Venda Crediário realizada com sucesso !";
}else{
echo "Erro ao realizar a venda Crediário, tente novamente !";
}
}
?>
Function.php
<?php
/**
* função que devolve em formato JSON os dados do cliente
*/
function retorna( $nome, $db )
{
$sql = "SELECT `identProduto`, `codProduto`, `qtProduto`, `nomeProduto`, `valorProduto` FROM `t_estoque` WHERE `codProduto` = '{$nome}' ";
$query = $db->query( $sql );
$arr = Array();
if( $query->num_rows )
{
while( $dados = $query->fetch_object() )
{
$arr['nomeProduto'] = $dados->nomeProduto;
$arr['qtProduto'] = $dados->qtProduto;
$arr['valorProduto'] = $dados->valorProduto;
}
}else{
$arr['nomeProduto'] = 'produto não encontrado';
}
if($arr['qtProduto'] == 0)
$arr['nomeProduto'] = 'sem estoque';
return json_encode( $arr );
}
/* só se for enviado o parâmetro, que devolve os dados */
if( isset($_GET['codProduto']) )
{
$db = new mysqli('localhost', 'root', '', 'buchm613_buchmann');
echo retorna( filter ( $_GET['codProduto'] ), $db );
}
function filter( $var ){
return $var;//a implementação desta, fica a cargo do leitor
}
How can I proceed to fill in the dynamically added fields via the Javascript section above?
I edited the question to improve the indentation of the last code - which was difficult to read - but I kept the undue line break inside the string, not to change the original code. Is your code right? If so, there was no build error in Javascript?
– mgibsonbr
By the way, that line
$("#adicionarformProdutos").append("" + novoProduto.html().replace(/1/g, i) + "")
- even corrected - improperly alters various properties of your code, such as the attributemin
. Behold that example, each time a new product is added its minimum quantity is equal to the product index (i.e. product 4 has minimum quantity 4, 5 has minimum quantity 5, etc).– mgibsonbr
Understood the minimum quantity part, thank you mgibsonbr, I will check a solution for this but my problem this when I add new product indexes, my json just doesn’t work, I know I name different inputs when I add but I don’t know the correct treatment in the JSON section to perform the BD search, have any idea?
– Rafael Assmann
Yes, I’m writing an answer now, soon I post.
– mgibsonbr
ok! for now I just changed the input number to text by how much of the minimum quantity, I don’t have to use the type number at this time, I await return!
– Rafael Assmann
hello @mgibsonbr in this example of jsFiddle that mentioned below to add fields (tracks) know me how to remove them?
– Rafael Assmann
What I usually do is put next to the created element a link or button to remove it, and a function
click
which - by having a reference to the element - can simply callnovoElemento.detach()
(orremove
). But in your case, with all these numerical codes that increase with each cloning, it gets a little more complicated... Unfortunately, I have nothing to suggest about. :(– mgibsonbr