Ir para conteúdo

Arquivado

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

Madrek

Problema Fatal error:

Recommended Posts

Boa tarde galera, estou fazendo um sistema básico para apresentação na faculdade, e estou com seguinte problema

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '3' for key 'PRIMARY'' in C:\xampp\htdocs\sistema\_Produto\action_produto.php:190 Stack trace: #0 C:\xampp\htdocs\sistema\_Produto\action_produto.php(190): PDOStatement->execute() #1 {main} thrown in C:\xampp\htdocs\sistema\_Produto\action_produto.php on line 190
// Verifica se foi solicitada a inclusão de produto
if ($acao == 'adicionar_prod'):
$cdproduto = $_POST['produto'];
$cdcliente = $_POST['clientesel'];

$data =  date("d-m-Y");
$data = str_replace("-","/",$data);

$sqd = 'SELECT vlvenda,descontoprod from tb_produto WHERE cdproduto = :cdproduto';
$std = $conexao->prepare($sqd);
$std->bindValue(':cdproduto', $cdproduto);
$std->execute();
$t_compra = $std->fetch(PDO::FETCH_ASSOC);
$valor_desconto = $t_compra["vlvenda"] - ($t_compra["vlvenda"] * ($t_compra["descontoprod"]/100));

$sqe = 'SELECT total,cdvenda from tb_venda';
$ste = $conexao->prepare($sqe);
$ste->execute();
$num_vendas = $ste->rowCount();
$num_vendas++;
$total = $t_compra['vlvenda'];


$sql_teste = 'SELECT cdcliente FROM tb_venda WHERE cdcliente = :cdcliente';
$sql = $conexao->prepare($sql_teste);
$sql->bindValue(':cdcliente', $cdcliente);
$sql->execute();
$obj = $sql->fetch(PDO::FETCH_OBJ);

 if ($obj->cdcliente > 0) { 

$sql_venda_p = 'UPDATE tb_venda SET total = total + :total, cdvenda=:cdvenda, formapag = :formapag, desconto = :desconto, parcel = :parcel, dtvenda=:dtvenda WHERE cdcliente = :cdcliente';

$formapag = "Dinheiro";
$desconto = 10;
$parcel = 10;

$stm = $conexao->prepare($sql_venda_p);
$stm->bindValue(':cdvenda', $num_vendas);
$stm->bindValue(':dtvenda', $data);
$stm->bindValue(':total', /* $total */ $valor_desconto);
$stm->bindValue(':formapag', $formapag);
$stm->bindValue(':desconto', $desconto);
$stm->bindValue(':parcel', $parcel);
$stm->bindValue(':cdcliente', $_POST['cliente']);

$stm->execute();        (AQUI E A LINHA 190)
//$retorno = $stm->execute();
   if($stm->rowCount())
    { 
// Inserção na tabela produto_venda
$qtd = 1;
$cdproduto = $_POST["produto"];


$sql_prod_venda = 'INSERT INTO produto_venda (cdvenda ,cdproduto ,quantidade)
  VALUES(:cdvenda ,:cdproduto ,:quantidade)';
  // Produto_venda :  cdvenda  cdproduto  quantidade // 

$stm = $conexao->prepare($sql_prod_venda);
$stm->bindValue(':cdvenda', $num_vendas);
$stm->bindValue(':cdproduto', $cdproduto);
$stm->bindValue(':quantidade', $qtd);

 $retorno = $stm->execute(); 
 }
} 
if ($retorno):
echo "<div class='alert alert-success' role='alert'>Registro inserido com sucesso, aguarde você está sendo redirecionado ...</div> ";
else:
echo "<div class='alert alert-danger' role='alert'>Erro ao inserir registro!</div> ";
endif;

echo "<meta http-equiv=refresh content='3;URL=index.php'>";
endif; 

No caso depois da verificação do usuario e do update ele tem que inserir na tabela poduto_venda

Compartilhar este post


Link para o post
Compartilhar em outros sites
O erro indica que você está tentando inserir/atualizar uma chave primária que já existe na tabela, ou seja, você está duplicando a PK, mas cada chave primária deve ser única.



Integrity constraint violation: 1062 Duplicate entry '3' for key 'PRIMARY'


O erro indica a linha 190, mas não sei qual, porque o código que você postou tem menos de 80, mas acredito que o problema seja a consulta "UPDATE tb_venda". Qual coluna é a chave primária? cdvenda? Porque você está atualizando TODOS os pedidos do cliente X para deixar com as informações TODAS iguais, inclusive com o mesmo cdvenda. Se o cliente tiver mais de um pedido, após executar esse update todos os pedidos do cliente serão iguais.

Compartilhar este post


Link para o post
Compartilhar em outros sites
O erro indica que você está tentando inserir/atualizar uma chave primária que já existe na tabela, ou seja, você está duplicando a PK, mas cada chave primária deve ser única.
Integrity constraint violation: 1062 Duplicate entry '3' for key 'PRIMARY'
O erro indica a linha 190, mas não sei qual, porque o código que você postou tem menos de 80, mas acredito que o problema seja a consulta "UPDATE tb_venda". Qual coluna é a chave primária? cdvenda? Porque você está atualizando TODOS os pedidos do cliente X para deixar com as informações TODAS iguais, inclusive com o mesmo cdvenda. Se o cliente tiver mais de um pedido, após executar esse update todos os pedidos do cliente serão iguais.

sim Anderson , mas a ideia e maluca mas e essa mesmo, tipow ao criar um usuário , ele cria uma nova venda pra esse usuário zerada, sem valores, apenas com o cdvenda, e cdcliente por isso o update ele vai atualizar apenas os valores dessa venda que já existe do cliente zerada.

Compartilhar este post


Link para o post
Compartilhar em outros sites
A ideia é bem maluca mesmo rs


Mas de qualquer forma, você precisa fazer com que cada registro tenha uma chave primária diferente e única, não pode ser uma que já está sendo usada. Provavelmente seu update está atualizando mais de um registro ao mesmo tempo, já que você está atualizando todos os registros do cliente para ficar com a mesma chave primária.

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.