Selecionando um “campo id (auto-number)” do último registro inserido em uma tabela qualquer da base de dados: PHP + MySQL

Jack,

Referente ao nosso Trabalho final de PHP, estou tendo um pouco de dificuldade para incluir os dados nas tabelas de carrinho, pois tem que estar incluindo a chave estrangeira. E não sei como vou controlar o código do carrinho, para que seja o mesmo até que não se finalize a venda.

Bem, vamos imaginar que você possui uma tabela chamada “tab_carrinho” que contém os dados referentes ao carrinho de compra (id_carrinho, data_carrinho, nf_carrinho). Pois bem, em outra tabela da sua base de dados MySQL você tem uma tabela chamada “tab_produtos” que contém os dados de produtos disponíveis para a compra (id_produto, desc_produto).

Observação importante: o campo “id_carrinho” da tabela “tab_carrinho” é do tipo auto-incremento, ou seja, o próprio MySQL se encarrega de definí-lo.

Como está caracterizado uma relação entre as duas tabelas, na cardinalidade máxima de “n” para “n”, ou seja, um carrinho de compras pode ter muitos produtos e, um produto pode estar em muitos carrinhos de compra; está clara a situação em que precisamos criar uma terceira entidade/tabela, para manter o relacionamento entre as duas que já existem. Isso, obviamente, se o desenvolvedor é consciente e está programando de maneira cartesiana para evitar redundâncias e inconsistências (se você chegou agora à este post e, este parágrafo parece ter sido escrito em grego, aconselho a ler antes sobre banco de dados, entidade relacionamento, modelo cartesiano, SGBD, etc…). Chamaremos aqui esta tabela de “tab_carrinho_prod” (a união entre carrinho e produto), que terá os seguintes campos: “id_carrinho”, “id_produto”, “quant_produto”.

Certo, olhando agora sob a ótica do programador, e não do DBA, vamos imaginar a aplicação no PHP. Imagine que você já tenha desenvolvido e testado adequadamente o módulo de inserção do carrinho, ou seja, de todo o processo de compra, os dados referentes ao carrinho de compras (campos citados aí em cima) já foram enviados para a respectiva tabela (conectou ao banco, selecionou a tabela de dados, enviou o “insert” e se certificou de que tudo funciona muito bem). No próximo formulário do processo de compra (imaginando algo como um wizard, passo-a-passo. Primeiro o usuário informa os dados do carrinho, depois escolhe os produtos que farão parte dele) você quer gravar os respectivos dados na tabela “tab_carrinho_prod” (partindo do pressuposto que o módulo de manutenção de produtos também já está ok).

Neste momento é que a complexidade se mostra. Afinal, como saber o valor gravado durante o processo anterior na tabela “tab_carrinho”, no campo “id_carrinho”, se o código-fonte que grava os dados do carrinho não é o mesmo que grava os dados referentes aos produtos que o constitui (“guarda_carrinho.php” e “guarda_prods.php”), você não está usando “SECTIONS” e, pior, o campo é auto-incremento, é o MySQL quem define o valor de “id_carrinho”, não é mesmo?

Finish! 🙂

Se você observar com um pouco de atenção e usar sua imaginação e, claro, lógica de programação, vai perceber que a variável “ultimo_registro” contém na verdade o “id_carrinho” do carrinho que acabara de ser gravado! Basta selecionar a tabela “tab_carrinho_prod” agora e iniciar as inserções em relação aos produtos escolhidos pelo cliente! 😉

Ok, eu sei… A imagem está ruim, né? baixe o codigo-fonte aqui! 🙂