Jump to content
Fórum Script Brasil
  • 0

(Resolvido) UPDATE com problema


Rafael Andres

Question

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]"))
            {
.
.
.

Edited by Denis Courcy
Link to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 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"))
            {
.
.
.

Edited by Rafael Andres
Link to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Guest
This topic is now closed to further replies.


  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...