Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia,
estou querendo dar um UPDATE nos registros mas não está dando muito certo.
form.php (Aqui está OK)
$count = 0;
while($ver=mysql_fetch_row($busca)){
<td><input type='text' name='{$count}[quantidade]' value='$quantidade'></td>
<td><input type='text' name='{$count}[desconto]' value='$desconto'></td>
$count++;
}
atualizar_valores.php
$values = $_POST;
for($i=0; $i<count($values); $i++)
{
$quantidade = $values[$i]['quantidade'];
$desconto = $values[$i]['desconto'];
mysql_query("UPDATE pedidos_consultor_temp SET quantidade='$quantidade', desconto='$desconto' WHERE codigo='$codigo_pedido'");
}
Neste código acontece o seguinte: ele altera os dois campos repetindo somente o ultimo valor do array, porém se eu nao usar a query e der um echo nas variaveis, elas sao apresentadas normalmente, pegando todos os registros e exibindo-os.
Fico sem entender onde está errado, já que com o echo funciona normalmente?
Desde já agradeço.
Não deu certo!
Está zerando os campos.
Obrigado.
Tentei assim...
form.php
$count = 0;
while($ver=mysql_fetch_row($busca)){
<td><input type='text' name='quantidade[]' value='$quantidade'></td>
<td><input type='text' name='desconto[]' value='$desconto'></td>
$count++;
}
atualizar.php
$values = $_POST;
for($i=0; $i<count($values); $i++)
{
$quantidade[$i] = $values[$i]['quantidade'];
$desconto[$i] = $values[$i]['desconto'];
mysql_query("UPDATE pedidos_consultor_temp SET quantidade='$quantidade[$i]', desconto='$desconto[$i]' WHERE codigo='$codigo_pedido'");
}
Mas continua com erro... alguém tem uma idéia???
Grato.
tá errado, não é
$values[$i]['quantidade']
é sim:
$values['quantidade'][$i]
;)
Olha so:
<!doctype html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=iso-8859-1" />
</head>
<body>
<fieldset>
<form method="post">
<?php
for( $i = 0; $i <= 5; ++$i ){
echo '<input type="text" name="quantidade[]" value="quantidade'.$i.'" />';
echo '<input type="text" name="desconto[]" value="desconto'.$i.'" />';
}
?>
<input type="submit" value="enviar" name="enviar" />
</form>
</fieldset>
<?php
if( $_POST['enviar'] ){
for( $i = 0; $i < sizeOf( $_POST ); ++$i ){
/**
* ...
*/
}
echo '<pre>';
print_r( $_POST );
}
?>
</body>
</html>
Saída:
Array
(
[quantidade] => Array
(
[0] => quantidade0
[1] => quantidade1
[2] => quantidade2
[3] => quantidade3
[4] => quantidade4
[5] => quantidade5
)
[desconto] => Array
(
[0] => desconto0
[1] => desconto1
[2] => desconto2
[3] => desconto3
[4] => desconto4
[5] => desconto5
)
[enviar] => enviar
)Foge um pouco da minha aplicação, então tentei assim, mas continuo com problemas para incrementar a query UPDATE.
$valor = $_POST;
foreach ($_POST as $valor) {
if ((int)$valor['quantidade'] > 0) {
//echo 'Quantidade: ', $valor['quantidade'], '<br />';
//echo 'Codigo: ', $valor['codigo'], '<br /><br />';
$quantidade = $valor['quantidade'];
$desconto = $valor['desconto'];
mysql_query("UPDATE pedidos_consultor_temp SET quantidade='$quantidade', desconto='$desconto' WHERE codigo='$codigo_pedido'");
}
}Amigo, eu deixei um exemplo pronto pra você, você não consegue entender o exemplo que eu te dei ?
De onde vem essa variável ?
WHERE codigo='$codigo_pedido'
Então, fiquei a manha inteira sem internet, por isso demorei a postar.
Vou comentar cada linha para ver se estou raciocinando de maneira correta.
$codigo_pedido = $_GET['codigo_pedido']; // vem do form ?codigoPedido=$codigo_pedido
$values = $_POST;
for($i=0; $i<count($values); $i++) // $i recebe 0 inicialmente e vai sendo incrementado a cada volta do loop
{
$quantidade = $values[$i]['quantidade'];
$desconto = $values[$i]['desconto'];
mysql_query("UPDATE pedidos_consultor_temp SET quantidade='$quantidade', desconto='$desconto' WHERE codigo='$codigo_pedido'");
}
Portanto em meu entendimento deveriam acontecer diversos UPDATES, de acordo com o numero de $values.
Mas o que acontece é o UPDATE de todos os registros usando o valor do ultimo item do grid, ou seja, se era para ficar assim:
quantidade desconto
300 30
200 20
100 10
fica assim:
quantidade desconto
100 10
100 10
100 10
e o mais curioso, se eu der um echo nas variaveis e nao executar a query, os resultados aparecem na tela da forma desejada:
300 30 200 20 100 10
Onde estou errando?
Por que nao consigo executar a query dentro do loop?
Grato pela atenção.
Você não leu os meus posts,
eu te falei que você está pegando a váriavel quantidade, desconto de forma errada !
Eu li sim amigo, é que testei mas receio nao ter dado certo.
usei assim:
<td><input type='text' name='quantidade[]' value='$quantidade'></td>
<td><input type='text' name='desconto[]' value='$desconto'></td>
Como você sugere?
Não é so o HTML, a parte sua do PHP está errada, faça assim:
$codigo_pedido = $_GET['codigo_pedido']; // vem do form ?codigoPedido=$codigo_pedido
$values = $_POST;
for($i=0; $i<count($values); $i++) // $i recebe 0 inicialmente e vai sendo incrementado a cada volta do loop
{
$quantidade = $values['quantidade'][$i];
$desconto = $values['desconto'][$i];
mysql_query("UPDATE pedidos_consultor_temp SET quantidade='$quantidade', desconto='$desconto' WHERE codigo='$codigo_pedido'");
}Usei este código PHP que você indicou, mas ainda não deu certo!
Estou testando assim:
Tenho um grid(form) de 'itens do pedido' com 3 produtos com seus respectivos campos quantidade e desconto.
Quando clico sobre o submit executo o codigo php que deveria dar um UPDATE na tabela.
Como neste teste se tratam de 3 produtos no grid deveria executar a query com os valores passados, valor do produto 1, valor do produto 2 e valor do produto 3, massssss, com este código está pegando o valor do produto 2 e registrando nos 3 produtos. Parece que nao esta incrementando direito.
Nao sei se consegui ser claro.
Grato.
$codigo_pedido = $_GET['codigo_pedido']; // vem do form ?codigoPedido=$codigo_pedido
$values = $_POST;
for($i=0; $i<count($values); $i++) // $i recebe 0 inicialmente e vai sendo incrementado a cada volta do loop
{
$quantidade = $values['quantidade'][$i];
$desconto = $values['desconto'][$i];
mysql_query("UPDATE pedidos_consultor_temp SET quantidade='$quantidade', desconto='$desconto' WHERE codigo='$codigo_pedido'");
}
Por que quando dou o echo o incremento funciona direito, mas quando executo a query ele considera apenas o ultimo loop?
porque é o seguinte, agora que você mostrou o problema, da pra compreender melhor.
então é assim, você está executando uma query em um laço de repetição oque acontece
você vai alterar o mesmo pedido ate o loop chegar ao fim, entende ?
agora eu não sei oque exatamente você quer fazer, se e alterar alterar a quantidade, somente 'quantidade', 'desconto'
para todos os valores que você enviou no POST, ou ... sei lá
;)
vou alterar apenas dois campos: quantidade e desconto, mas nao estou conseguindo... a ideia do loop que eu tinha nao esta dando certo.
tem uma sugestão?
abçs.
Cara, não estou te entendendo, se você vai alterar 2 campos, pra que o Loop ?
Faz um update normal ué
Amigo, são apenas dois campos, mas pode ser que tenha de mudar 1 ou n registros.
Para tentar ser mais claro.
/applications/core/interface/imageproxy/imageproxy.php?img=http://i52.tinypic.com/2uz9jll.jpg&key=0b5cf4638987f417e56d4dc34808308b9e7ca23ea5f862c19f8cf065128598b9" alt="2uz9jll.jpg" />
Neste pedido tenho 3 produtos, daí eu escolho a quantidade e o desconto de cada um, por isso o loop, entendeu?
Então você tinha que fazer pelo código do produto, e não do pedido.
Não posso fazer pelo codigo do produto porque um outro consultor pode incluir em outro pedido o mesmo produto.
exemplo:
consultor 1 cadastra um pedido com 10 produtos A, 10 produtos B e 20 produtos C.
consultor 2 cadastra um pedido com 15 produtos Z, 15 produtos Y e 25 produtos A.
Amigo, voce entendeu a minha lógica com o loop?
[Resolvido]
Consegui resolver adicionando um parâmetro na query, o codigo_produto.
mysql_query("UPDATE pedidos_consultor_temp SET quantidade='$quantidade', desconto='$desconto' WHERE codigo='$codigo_pedido' AND codigo_produto='$codigo_produto'");
Obrigado aos que ajudaram.
Foi exatamente o que eu te falei, eu so não sei se você entendeu ..
Na verdade eu tinha que fazer pelo código do produto E também pelo código do pedido, senão um usuário poderia alterar registros de outro usuário...
então, valeu pela dica, ajudou bastante.
abçs.
Então, foi exatamente isso ..
porque o que acontece é o seguinte, você vai alterar todos os itens de um pedido, então você tem que especificar onde estão, e quais são os itens entende? porque se fosse somente pelo pedido, seria fácil, você já nem precisava do where junto de um AND para os itens
mais como você precisou alterar determinados itens, você tem que especificar :lol:
mais ainda vejo um desperdício de query aí, porque pensa só, o cara tem um pedido enorme de 50 itens, vamos supor.
então ele vai abrir esse pedido pra alterar alguns itens, por exemplo, pra alterar somente dois itens desse pedido, então 48 são desnecessários na query ou seja, você pode estar executando várias querys aí desnecessariamente. o que você pode fazer ?
você pode fazer o seguinte, montar um array que vai comparar os que não são iguais ao valor atual
e fazer outro array com um implode nesses itens filtrados, assim teria um desempenho melhor .
[]'s Boa sorte ~
;)