Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

felipebmfaria

[Resolvido] Laço de repetição, array

Recommended Posts

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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
)

Compartilhar este post


Link para o post
Compartilhar em outros sites

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'");
 }
} 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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'");
 } 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

$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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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á

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, são apenas dois campos, mas pode ser que tenha de mudar 1 ou n registros.

 

Para tentar ser mais claro.

 

2uz9jll.jpg

 

Neste pedido tenho 3 produtos, daí eu escolho a quantidade e o desconto de cada um, por isso o loop, entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.