Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa Tarde...
Estou desenvolvendo um sistema de pedido em PHP, agora estou com um probleminha, quando eu inserir um item ja pre cadastrado, na linha ele aparece a descrição, unidade de medida e o valor unitário, ai o usuário digita a quantidade desse item, e ja faz a atualização do total. Andei lendo alguns tópicos a respeito e vi o pessoal usando java script para pega os valores dos imputs referente a aquele item.
Com um item apenas deu certo, mas ai começou o probleminha, quando eu inserir outro item e faço o mesmo procedimento os valores eu digitei não são inseridos, na verdade ele recebe os valores que eu coloquei no primeiro item. ai gostaria de uma orientação de como posso fazer essa atualização correspondente a linha do item em questão.
Quem puder me ajudar, agradeço
Cara,
Precisaria ver seu código para ter uma idéia de como está fazendo, mas uma forma seria criando uma função javascript, mais ou menos assim (Não cheguei a testá-la, mas creio que deva funcionar):
/**
* Calcula total da linha em questão usando jQuery
* @param el Elemento que será passado na chamada da função
*/
function calculaTotal(el){
/* Sobe dois elementos na hierarquia do documento
Estou assumindo que você está utilizando uma tabela e cada linha desta tabela seja um produto
Sendo assim, o primeiro .parent() sobe do input para o <td>, e o segundo para o <tr>
*/
var linha = el.parent().parent();
// Procura na linha pelo valor unitário
var valUnit = linha.find('.valUnit').val();
// Obtém a quantidade de produtos (assumindo que este evento será chamado no onblur
var qtd = el.val();
// Calcula o total
var total = parseFloat(valUnit) * parseInt(qtd);
// Atribui o valor total ao campo total com uma precisão de duas casas decimais
linha.find('.txtTotal').val(total.toFixed(2));
// Caso o total seja somente um spam, div, td etc, use o código abaixo
linha.find('.txtTotal').text(total.toFixed(2));
}
e na chamada do onblur do campo utilizar o seguinte:
<input type="text" name="txtQtd" id="seu_id_aqui" onblur="calculaTotal($(this));" />
Estou assumindo que você já esteja usando jQuery neste projeto, caso não esteja é necessário linkar a biblioteca, ou adaptar o código para javascript puro.
Veja se ajuda.
Abraços,
function mostra(unidade, descricao, quant, valor_unitario, cliente, pedido, id){
unid=document.getElementById("unidade").value;
desc=document.getElementById("descricao").value;
quant=document.getElementById("quant").value;
valor_unit=document.getElementById("valor_unitario").value;
window.location="update_item.php?id="+id+"&unidade="+unid+"&descricao="+desc+"&quantidade="+quantidade+"&valor_unit="+valor_unit+"&cliente="+cliente+"&pedido="+pedido;
}
<form name="form1" action="" method="post">
<table width="95%" border="0" align="center">
<tr class="text_table_os">
<td width="4%" align="center">Item</td>
<td width="4%" align="center">Und</td>
<td width="50%" align="center">Descrição </td>
<td width="6%" align="center">Quant</td>
<td width="11%" align="center">VL Unit</td>
<td width="11%" align="center">VL Total</td>
<td width="7%" align="center"> </td>
<td width="7%" align="center"> </td>
</tr>
<?php
$i = 1;
$select1 =("select produto.*, pedido.* FROM produto, pedido WHERE produto.id_produto = pedido.id_produto AND id_cliente ='$id_cliente' AND numero_pedido='$pedido'");
$res1 = mysql_query($select1);
$cont = mysql_num_rows($res1);
while($linha =mysql_fetch_array($res1)){
$id = $linha["id"];
$id_cliente = $linha["id_cliente"];
$numero_pedido = $linha["numero_pedido"];
$id_produto = $linha["id_produto"];
$data = $linha["data"];
$produto = $linha["produto"];
$quantidade =$linha["quantidade"];
$unidade = $linha["unidade"];
$vl_unit = $linha["valor"];
$total = $linha["total"];
?>
<tr align="center">
<td><label for="textfield"></label>
<input name="textfield" type="text" class="imput_pedido" id="textfield" size="1" readonly="readonly" value="<?php echo $i?>" style="text-align:center" /></td>
<td><input name="unidade" type="text" class="imput_pedido" id="unidade" size="2" readonly="readonly" value="<?php echo $unidade?>"style="text-align:center" /></td>
<td><input name="descricao" type="text" class="imput_pedido" id="descricao" size="60" readonly="readonly" value="<?php echo $produto?>"/></td>
<td><label for="quant"></label>
<input name="quant" type="text" class="imput_pedido" id="quant" size="2" maxlength="4" style="text-align:center" onkeydown="mascara( this )" onkeyup="mascara( this )" value="<?php echo $quantidade?>"/></td>
<td><input name="valor_unitario" type="text" class="imput_pedido" id="valor_unitario" style="text-align:right" size="6" maxlength="9" onkeydown="valor(this)" onkeyup="valor( this )" value="<?php echo $vl_unit?>"/></td>
<td><input name="total" type="text" class="imput_pedido" id="total" value="<?php echo $total?>" size="8" readonly="readonly" style="text-align:right"/></td>
<td><a href="#" onclick="mostra(unidade, descricao, quant, valor_unitario, <?php echo $id_cliente?>, <?php echo $pedido?>, <?php echo $id?>)">AT</a></td>
<td>EX</td>
</tr>
<?php
$i++;
}
?>
</table>
</form>
Estou usando uma função em java script mesmo, tentei fazer :assobiando: . mas dessa forma so ta pegando os dados dos primeiros imputs.
Então cara, a função javascript que você criou está pegando o campo por ID.
Agora vem a questão, você está inserindo cada linha com um ID diferente? pois se tiver com ID igual ele vai dar erro mesmo, ou só pega o valor do primeiro ID que ele encontrar ou nem pega... rs
No caso você tem que ter um id único para cada campo de cada linha, pode concatenar o nome do campo com o id do produto, por exemplo:
id="quant<?=$produto['id'];?>"
e no link utilizar também os id's como parametros:
onclick="mostra(unidade, descricao, quant, valor_unitario, <?php echo $id_cliente?>, <?php echo $pedido?>, <?php echo $id?>, 'quant<?=$produto['id'];?>')"> <!-- E repetir isso para todos os campos -->
Já lá na função javascript, utilizar da seguinte forma:
function mostra(unidade, descricao, quant, valor_unitario, cliente, pedido, id, quant){ // Adicionei o campo quant, tem que fazer isso com todos os demais
unid=document.getElementById("unidade").value;
desc=document.getElementById("descricao").value;
quant=document.getElementById(quant).value;
valor_unit=document.getElementById("valor_unitario").value;
window.location="update_item.php?id="+id+"&unidade="+unid+"&descricao="+desc+"&quantidade="+quantidade+"&valor_unit="+valor_unit+"&cliente="+cliente+"&pedido="+pedido;
}
Qualquer dúvida, só avisar.
Abraços,
Bom não entendi essa parte id="quant<?=$produto['id'];?>", porque ja estou passado o ID da linha que está vindo do banco de dados.
Nao estou usando o jquery, mas se for mais fácil para achar a solução poderia me auxiliar com essa função. Não domino muito essa biblioteca.
Porque estou fazendo o seguinte passando os dados que estão no input para função e ela enviar para outra pagina onde estou fazendo o calculo de cada produto e atualizando no banco de dados.
Bom não entendi essa parte id="quant<?=$produto['id'];?>", porque ja estou passado o ID da linha que está vindo do banco de dados.
Então cara... essa parte seria para você definir para cada campo um ID único, pois da forma que você está fazendo, você tem vários campos com o mesmo id, por isso só está sendo feito o cálculo da primeira linha.
Incluindo o id do produto ao id do(s) campo(s) você passa a ter um id para cada produto. e com isso você conseguirá ter acesso a este campo da forma que te passei no post anterior.
Qualquer coisa é só gritar... rs
Abraços,
Meu amigo, desse jeito ai infelizmente não funcionou. da forma como você representou ai da erro.
<input name="unidade<?php =$linha["id"]?>" type="text" class="imput_pedido" id="unidade<?php =$linha["id"]?>" size="2" readonly="readonly" value="<?php echo $unidade?>"style="text-align:center" />
tentei criando um vetor
<input name="unidade[<?php echo $i?>]" type="text" class="imput_pedido" id="unidade<[<?php echo $i?>]?>" size="2" readonly="readonly" value="<?php echo $unidade?>"style="text-align:center" />
não deu certo também, ou eu que estou fazendo errado.
estou passando como paramento dessa forma:
onclick="mostra(unidade[<?php echo $i?>]);Olá o erro está aqui:
id="unidade<?php =$linha["id"]?>"
Neste caso ou você usa <?=$linha... ou <?php echo $linha...
Esta sintaxe (<?=) é como se fosse uma "abreviação" do <?php echo
é chamada de short_open_tags se estiver desativada pode ser ativada no php.ini
Se com ela estiver desativada dará erro, neste caso use o <?php echo
Abraços,
<script language="javascript">
function mostra(teste)
{
w=document.getElementById("teste").value;
alert(w);
}
</script>
<body>
<?php
for($i=0; $i<2; $i++){
?>
<input id="teste<?php $i?>" name="teste" type="text" value="">
<input name="teste" type="button" onclick="mostra(teste)" value="enviar"/><br />
<?php
}
?>
</body>
rapaz esse troço da dando dor de cabeça, fiz um esquema parecido aqui no meu trampo, desse modelo que você me disse, mas insisti em pega so o primeiro input.Posta as tabelas filho q vou colocar o código ai Jesus!!!!
<input id="teste<?php $i?>"
tinha esquecido de colocar o echo aqui, mas coloquei e nada tbm.
REATE TABLE IF NOT EXISTS pedido ( id int(11) NOT NULL AUTO_INCREMENT, id_cliente int(11) NOT NULL, numero_pedido int(11) NOT NULL, id_produto int(11) NOT NULL, data varchar(20) DEFAULT NULL, produto_desc varchar(100) DEFAULT NULL, und varchar(10) NOT NULL, quantidade int(11) DEFAULT NULL, valor_unit decimal(10,2) DEFAULT NULL, total decimal(10,2) DEFAULT NULL, PRIMARY KEY (id))
Essa é a tabela onde sera armazenados os produtos.
E a de pedido?
Sim.
Desculpa, manda a de clliente e a de produto
CREATE TABLE IF NOT EXISTS `clientes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`cliente` varchar(150) DEFAULT NULL,
`endereco` varchar(150) DEFAULT NULL,
`bairro` varchar(45) DEFAULT NULL,
`cidade` varchar(300) NOT NULL,
`telefone` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`)
)
CREATE TABLE IF NOT EXISTS `produto` (
`id_produto` int(11) NOT NULL AUTO_INCREMENT,
`produto` varchar(30) NOT NULL,
`unidade` varchar(3) NOT NULL,
`valor` decimal(10,2) NOT NULL,
PRIMARY KEY (`id_produto`)
)Você possui as mesmas colunas de produto em pedido?
Como:
valor -> valor_unit
und -> unidade
se caso a pessoa quiser alterar no ato do pedido o valor do item ai altera no so pedido e nao no produto cadastrado.
Por isso nao usei chave estrangeira.
mas vc sabe que quando vc precisar alterar futuramente vai dar zebra né?
alterar o pedido você fala?
/// Listagem.php
<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
jQuery(document).ready(function(){
jQuery('.event').click(function(){
var obj = jQuery(this).closest('tr').find('input').serialize();
jQuery.ajax({
type: 'POST' ,
url : "pedido.php" ,
data: obj ,
}).done(function(r){
window.location.href = r;
})
})
})
</script>
</head>
<body>
<form name="form1" action="" method="post">
<table width="95%" border="0" align="center">
<tr class="text_table_os">
<td width="4%" align="center">Item</td>
<td width="4%" align="center">Und</td>
<td width="50%" align="center">Descrição </td>
<td width="6%" align="center">Quant</td>
<td width="11%" align="center">VL Unit</td>
<td width="11%" align="center">VL Total</td>
<td width="7%" align="center"> </td>
<td width="7%" align="center"> </td>
</tr>
<?php
$i = 1;
$pedido = 123; // COLOCADO PARA TESTAR PODE REMOVER
$select1 = "SELECT pd.id , pd.id_cliente , pd.id_produto , pd.numero_pedido , pd.produto_desc , pd.quantidade , pd.total , pd.und , pd.valor_unit , pd.data ,
pt.produto , pt.unidade , pt.valor,
cl.cliente , cl.endereco, cl.bairro , cl.cidade, cl.telefone
FROM pedido AS pd
INNER JOIN produto AS pt ON pd.id_produto = pt.id_produto
INNER JOIN clientes AS cl ON pd.id_cliente = cl.id
WHERE pd.numero_pedido='{$pedido}';";
$link = mysql_connect('localhost' , 'root' , 'root'); // COLOCADO PARA TESTAR PODE REMOVER
$db = mysql_select_db('imasters'); // COLOCADO PARA TESTAR PODE REMOVER
$res1 = mysql_query($select1);
$cont = mysql_num_rows($res1);
while($linha =mysql_fetch_array($res1)){
$id_pedido = $linha["id"];
$id_cliente = $linha["id_cliente"];
$numero_pedido = $linha["numero_pedido"];
$id_produto = $linha["id_produto"];
$data = $linha["data"];
$produto = $linha["produto"];
$quantidade = $linha["quantidade"];
$unidade = $linha["unidade"];
$vl_unit = $linha["valor"];
$total = $linha["total"];
?>
<tr align="center">
<td>
<label for="textfield"></label>
<input name="textfield" type="text" class="imput_pedido" size="1" readonly="readonly" value="<?php echo $i ?>" style="text-align:center" />
</td>
<td>
<input name="unidade" type="text" class="imput_pedido" size="2" readonly="readonly" value="<?php echo $unidade ?>" style="text-align:center" />
</td>
<td>
<input name="descricao" type="text" class="imput_pedido" size="60" readonly="readonly" value="<?php echo $produto ?>"/>
</td>
<td>
<label for="quantidade"></label>
<input name="quantidade" type="text" class="imput_pedido" size="2" maxlength="4" style="text-align:center" onkeydown="mascara( this )" onkeyup="mascara( this )" value="<?php echo $quantidade?>"/>
</td>
<td>
<input name="valor_unitario" type="text" class="imput_pedido" style="text-align:right" size="6" maxlength="9" onkeydown="valor(this)" onkeyup="valor( this )" value="<?php echo $vl_unit?>"/>
</td>
<td>
<input name="total" type="text" class="imput_pedido" value="<?php echo $total ?>" size="8" readonly="readonly" style="text-align:right"/>
</td>
<td class="event">
<input type="hidden" name="id_cliente" value="<?php echo $id_cliente ?>" />
<input type="hidden" name="id_pedido" value="<?php echo $id_pedido ?>" />
<input type="hidden" name="numero_pedido" value="<?php echo $numero_pedido ?>" />
<a href="#">AT</a>
</td>
<td>EX</td>
</tr>
<?php
$i++;
}
?>
</table>
</form>
</body>
</html>
// pedido.php
<?php
// validacao do post
if(empty($_POST['id_pedido']))
die('lascou-se');
else{
$id_pedido = $_POST['id_pedido'];
$unidade = $_POST['unidade'];
$descricao = $_POST['descricao'];
$quantidade= $_POST['quantidade'];
$id_cliente = $_POST['id_cliente'];
$valor_unitario = $_POST['valor_unitario'];
$numero_pedido = $_POST['numero_pedido'];
echo "update_item.php?id={$id_pedido}&unidade={$unidade}&descricao={$descricao}&quantidade={$quantidade}&valor_unit={$valor_unitario}&cliente={$id_cliente}&pedido={$numero_pedido}";
}
?>Agradeço pela ajuda...
a consulta ta retornando vazia...
Já tentou executar só este SQL no banco pra ver o que ele traz:
SELECT pd.id , pd.id_cliente , pd.id_produto , pd.numero_pedido , pd.produto_desc , pd.quantidade , pd.total , pd.und , pd.valor_unit , pd.data ,
pt.produto , pt.unidade , pt.valor,
cl.cliente , cl.endereco, cl.bairro , cl.cidade, cl.telefone
FROM pedido AS pd
INNER JOIN produto AS pt ON pd.id_produto = pt.id_produto
INNER JOIN clientes AS cl ON pd.id_cliente = cl.id
WHERE pd.numero_pedido='{$pedido}'
Lembrando de alterar $pedido por um numero de pedido da tabela pedido
sim, sim... mudei pd=>pedido, pt => produto, cl=> cliente, que é referente as tabelas que eu tenho no banco. adicionei um pedido qualquer na tabela pedido, mas ta retornando vazia.
select produto.*, pedido.* FROM produto, pedido WHERE produto.id_produto = pedido.id_produto AND id_cliente ='$id_cliente' AND numero_pedido='$pedido
esse foi o select q eu useiBem,
pd é um alias para pedido
pt para produto
cl para cliente.
Usando o seu select acima tá retornando algo?
sim, sim...
ele me retorna o que preciso, só que nao fiz o teste do seu código ainda
Pesquise por AJAX + JQUERY + PHP.