Função para gravar em duas tabelas
Olá pessoal, meu problema é o seguinte: Estou fazendo um sistema em PHP OO para gravação de pedido, com carrinho de compras. O cliente escolhe os produtos e ele grava os dados primeiro no carrinho de compra. Até aí, tudo bem. Depois que o cliente terminou de selecionar os produtos, ele fecha o pedido. Nesse momento tenho que gravar os dados na tabela Venda e Itens_venda. Estou tentando fazer uma função que grave a venda e os itens de uma só vez.
Para fazer uma gravação simples, eu uso a seguinte função:
public function gravarItem($carrinho) {
$banco = new Banco();
$banco->setComandoSQL("INSERT INTO carrinho(cli_cod, pro_cod, pro_valor, data, qtde, total)
VALUES
('" . $carrinho->getCli_cod() . "',
'" . $carrinho->getPro_cod() . "',
'" . $carrinho->getPro_valor() . "',
'" . $carrinho->getCar_data() . "',
'" . $carrinho->getQtde() . "',
'" . $carrinho->getTotal() . "')");
if ($banco->ExecutaSQL()) {
return (true);
} else {
return (false);
}
}
Para gravar nas duas tabelas ao mesmo tempo, tentei fazer a função assim (mas não funcionou):
public function gravarPedido($ped, $car) {
$banco = new Banco();
$banco->setComandoSQL("INSERT INTO pedido (ped_cli_cod, ped_data, ped_total)
VALUES
('" . $ped->getPed_cli_cod() . "', '" . $ped->getPed_data() . "',
'" . $ped->getPed_total() . "')");
$banco->setComandoSQL("SELECT LAST_INSERT_ID() INTO @ped_cod;");
$banco->setComandoSQL("INSERT INTO itens_pedido (pro_cod, qtde, valor_unit)
VALUES
(@ped_cod, '" . $car->getIt_qtde() . "', '" . $car->getIt_valor_unit() . "')");
if ($banco->ExecutaSQL()) {
return true;
} else {
return false;
}
}
E passei os dados assim:
if (isset($_POST["fechar"])) {
$cli_cod = $util->protect($_POST["cli_cod"]);
$ped_data = Date('Y-m-d');
$ped_total = $total;
$ped = new Pedido();
$ped->setPed_cli_cod($cli_cod);
$ped->setPed_data($ped_data);
$ped->setPed_total($ped_total);
$car = $carDao->listarCarrinhoDeUmCliente($cli_cod);
foreach ($carrinho as $car) {
$qt = $car->getQtde();
$vl_unt = $car->getPro_valor();
$ped = new Pedido();
$ped->setPed_cli_cod($cli_cod);
$ped->setPed_data($ped_data);
$ped->setPed_total($ped_total);
$ped->setIt_qtde($car->getQtde());
$ped->setIt_valor_unit($car->getPro_valor());
}
if ($pedDAO->gravarPedido($ped, $car)) {
$msg2->addMensagem("<div class=\"alert alert-success\">
<strong>Feito!</strong> Pedido Gravados com Sucesso.
</div>");
} else {
$msg2->addMensagem("<div class=\"alert alert-danger\">
<strong>Atenção</strong> Erro Ao Gravar Pedido
</div>");
}
}
Alguém sabe como fazer isso?
Discussão (0)
Carregando comentários...