Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) UPDATE com problema


Rafael Andres

Pergunta

Estou tendo um problema para atualizar valores numa página de edição dos dados cadastrados.

Na página de editar produtos e valores, pego o código e o valor de cada um, mas no momento de atualizar a tabela, se tem o mesmo produto selecionado mais de uma vez na mesma página, ele está alterando todos os valores.

Cada entrada na tabela saída tem um ID diferente, mas como no comando UPDATE não consta nada ele altera todos. Como faço pra ele inserir só no seu ID correspondente?

for($i = 1; $i <= 10; $i++){
        if (isset($_POST["produto$i"])) {
            $codigo_produto[$i]         = $_POST["produto$i"];
            $valor[$i]       = $_POST["valor$i"];
            
            if(@mysql_query("UPDATE saidas SET 
    
                id_vendedor = '$vendedor',
                data_saida = '$data_cont',
                hora_saida = '$hora_cont',
                preco_venda = '$valor[$i]'
    
                WHERE id_usuario=$id AND codigo_produto = $codigo_produto[$i]"))
            {
.
.
.

Editado por Denis Courcy
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Fiz uma gambiarra. Para pegar o ID do campo antigo, coloquei um campo hidden que passa o ID do campo que estava antes de editar. Aí com esse ID eu seleciono ele no BD. Faço a alteração dos campos da tabela com base nesse ID.

Assim, por exemplo, se o produto for alterado, também altero a quantidade do produto trocado com base nesse ID antigo.

Só que se tiver dois produtos iguais na mesma página, se tentar alterar o valor do primeiro da ordem, por exemplo, ele não altera. Se alterar o do segundo, ele altera certo. :(

Segue o código completo:

for($i = 1; $i <= 10; $i++){
        if (isset($_POST["categoria$i"])) {
            $codigo_produto[$i]         = $_POST["categoria$i"];
            $hidden_codigo_produto[$i]         = $_POST["hidden_categoria$i"];
            $valor[$i]       = $_POST["valor$i"];
            
            /********************* atualiza quantidade ****************/
            if ($codigo_produto[$i]!=$hidden_codigo_produto[$i]) {
                $atualiza =  mysql_query("SELECT quantidade,nome_produto from produtos WHERE codigo_produto=$hidden_codigo_produto[$i]");
                $atualiza_qtd = mysql_fetch_array($atualiza);
        
                $qtdtotal_bota = $atualiza_qtd[0] + 1;
                $prod = $atualiza_qtd[1];

                $atualiza_qtd_bota = "UPDATE produtos SET quantidade = $qtdtotal_bota WHERE codigo_produto = $hidden_codigo_produto[$i]";
                $atualiza_qtd_bota_query = mysql_query($atualiza_qtd_bota);
                
                $atualiza2 =  mysql_query("SELECT quantidade,nome_produto from produtos WHERE codigo_produto=$codigo_produto[$i]");
                $atualiza_qtd2 = mysql_fetch_array($atualiza2);

                $qtdtotal_tira = $atualiza_qtd2[0] - 1;

                $atualiza_qtd_tira = "UPDATE produtos SET quantidade = $qtdtotal_tira WHERE codigo_produto = $codigo_produto[$i]";
                $atualiza_qtd_tira_query = mysql_query($atualiza_qtd_tira);
            }
        
             /**********************************************************/
            
            $query =  mysql_query("SELECT id from saidas WHERE codigo_produto=$hidden_codigo_produto[$i] AND id_usuario=$id");
            $dados = mysql_fetch_array($query);
            $id_certo = $dados[0];
            echo "<br>ID CERTO:".$id_certo;
            
            if(@mysql_query("UPDATE saidas SET 
    
                id_vendedor = '$vendedor',
                codigo_produto = '$codigo_produto[$i]',
                data_saida = '$data_cont',
                hora_saida = '$hora_cont',
                preco_venda = '$valor[$i]'
    
                WHERE id_usuario=$id AND id=$id_certo"))
            {
.
.
.

Editado por Rafael Andres
Link para o comentário
Compartilhar em outros sites

  • 0
Só que se tiver dois produtos iguais na mesma página, se tentar alterar o valor do primeiro da ordem, por exemplo, ele não altera. Se alterar o do segundo, ele altera certo.

isso acontece porque o seu comando UPDATE está dentro de um comando for

a maneira correta de usar é:

usar um SELECT para selecionar o registro desejado e depois aplicar o UPDATE para esse registro

ou usar somente o UPDATE, mas nesse caso tem que limitar o UPDATE na clausula WHERE para o registro selecionado

veja o link do HELP do MYSQL para tirar as duvidas

http://dev.mysql.com/doc/refman/4.1/pt/update.html

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Resolvi de outra forma, mas está funcionando 100%.

Ao invés de usar o UPDATE, primeiro apago todos os registros e depois insiro-os de novo, como se fossem novas entradas. Com o campo HIDDEN atualizo as quantidades anteriores.

E não dá o problema de ter dois produtos iguais na mesma página. Gambiarra Enjambre total mas fazer o quê!?!?...tem que funcionar...

Há algum problema em utilizar essa forma?

$apaga = "delete from saidas where id_usuario = $id";
$apaga_linhas = mysql_query($apaga);

for($i = 1; $i <= 10; $i++) {
    if (isset($_POST["categoria$i"])) {

        $codigo_produto[$i]         = $_POST["categoria$i"];
        $hidden_codigo_produto[$i]         = $_POST["hidden_categoria$i"];
        $valor[$i]       = $_POST["valor$i"];
        
        if ($codigo_produto[$i] == "0") {
            $apaga_produto = "delete from saidas where id_usuario = $id AND codigo_produto = $hidden_codigo_produto[$i]";
            $apaga_produto_linhas = mysql_query($apaga_produto);

            $query =  mysql_query("SELECT quantidade,nome_produto from produtos WHERE codigo_produto=$hidden_codigo_produto[$i]");
            $dados = mysql_fetch_array($query);
            
                $qtdtotal_bota = $dados[0] + 1;
            $prod = $dados[1];
            
            $atualiza_qtd_bota = "UPDATE produtos SET quantidade = $qtdtotal_bota WHERE codigo_produto = $hidden_codigo_produto[$i]";
            $atualiza_qtd_bota_query = mysql_query($atualiza_qtd_bota);
         }
        
        else {
            $query =  mysql_query("SELECT quantidade,nome_produto from produtos WHERE codigo_produto=$hidden_codigo_produto[$i]");
            $dados = mysql_fetch_array($query);
            
            $qtdtotal_bota = $dados[0] + 1;
            $prod = $dados[1];
            
            $atualiza_qtd_bota = "UPDATE produtos SET quantidade = $qtdtotal_bota WHERE codigo_produto = $hidden_codigo_produto[$i]";
            $atualiza_qtd_bota_query = mysql_query($atualiza_qtd_bota);
            
            $insere_novo = "INSERT INTO saidas VALUES (    NULL , '$vendedor', '$codigo_produto[$i]', '$data_cont', '$hora_cont', '1','Matriz','$valor[$i]','$id')";
            $insere_novo_query = mysql_query($insere_novo);
            
            $query2 =  mysql_query("SELECT quantidade,nome_produto from produtos WHERE codigo_produto=$codigo_produto[$i]");
            $dados2 = mysql_fetch_array($query2);
            
            $qtdtotal_tira = $dados2[0] - 1;
    
            $atualiza_qtd_tira = "UPDATE produtos SET quantidade = $qtdtotal_tira WHERE codigo_produto = $codigo_produto[$i]";
            $atualiza_qtd_tira_query = mysql_query($atualiza_qtd_tira);
    
            if ($atualiza_qtd_tira_query)
            {
                echo"<p align='center'>" . $prod ."&nbsp; - &nbsp; produto(s) atualizado(s) no estoque com sucesso!</p>";
                echo"<p align='center'><a href='capelas_estoque_saida.php'>Voltar</a></p>";
            }
            else
            {
                $erro=mysql_error();
                echo "<p align='center'>Erro: $erro</p>";
            }
        }
    }
}

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...