Ir para conteúdo

POWERED BY:

Arquivado

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

Haruks

Cadastro de pedidos

Recommended Posts

Ola a todos,

 

Primeiramente eu gostaria de me desculpara se estou postando no lugar errado, no entanto este assunto se encaixa tanto em banco de dados quanto a php...

 

A pouco tempo atrás decidi aprender php e sql... estou estudando com algumas apostilas e fazendo algumas páginas apenas para praticar, foi quando tive a idéia de fazer um sistema bem simples de "ordem de pedidos" e me deparei com uma duvida, vou explicar o que estou fazendo e qual é a duvida:

 

Tenho um banco de dados (loja) seguindo a seguinte modelagem:

48744858.jpg

 

Como visto na imagem acima, uma OS (ordem de serviço) pode conter vários produtos e um produto pode estar em várias OS (cardinalidade n:n entre "ordem_serviço" e "produto"), gerando a tabela "pedido" que conterá a ID da "ordem_servico", ID do produto e quantidade.

 

Até aqui tudo bem... a duvida vem ao fazer a página PHP que inserir os dados na tabela "pedido":

 

Tenho uma página que pede todos os dados presentes na tabela "ordem_servico" assim como possui espaço para cadastrar os pedidos, ao clicar no botão "Cadastrar", é cadastrado uma OS (tabela ordem_servico) e qual seria a melhor forma de cadastrar o "pedido"? Considerando que ao criar o pedido eu ainda não tenho o id da OS.

 

Pensei em usar o "mysql_insert_id()" do PHP que retorna a ultima ID gerado pelo AUTO_INCREMENT, mas fiquei com medo de usar este pois "E SE" duas pessoas (ou mais) clicar em "cadastrar" ao mesmo tempo? este metodo é seguro? existe alguma outra forma que se encaixe melhor nesta situação?

 

Agradeço sua atenção desde ja.

 

Att,

Compartilhar este post


Link para o post
Compartilhar em outros sites

pode utilizar ele sem problema...

 

mas você ter que usar logo depois do insert... que o seu banco vai executar os dois seguidos com intervalos de milesimos de segundo, então eh praticamente impossivel de ele pegar ID errado..

 

 

Estava falando com um amigo do trabalho e ele utiliza esse comando num sistema nosso, e jah temos mais de 6 milhoes de registros e nunca deu problema...

Compartilhar este post


Link para o post
Compartilhar em outros sites

@wolfphw

 

Obrigado pelo seu retorno!

 

eu estava pensando em fazer o seguinte:

1- Ao clicar em "cadastrar", os dados serão enviados via POST, com isto, cadastro os dados da tabela "ordem_servico"

2- Pega o id pelo "mysql_insert_id()"

3- Faz um select nessa ID e compara com os dados recebidos pelo POST (do passo 1)

3.1- Caso os dados forem compatíveis, cadastra o pedido.

3.2- Caso contrário inicia um laço de repetição decrementando o ID em "-1" (fazer isto no máximo 5x) até encontrar a ordem_servico certa.

 

Creio que desta forma ficaria mais seguro, ou eu estou viajando um pouco? :lol:

 

Vlw.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode fazer.. ou se você quiser você pode criar um campo na sua tabela de microtime.. e utilize o comando microtime() para pegar um valor que praticamente vai ser unico pro seu site, que ele vai lhe trazer em milesimos de segundos, e dai você compara ele com o que esta na sua variavel ainda...

 

 

exemplo

<?php
 $microtime = microtime();
 mysql_query("INSERT INTO ordem_servico SET .. microtime='$microtime'");

 $id = mysql_insert_id();

 $sql = mysql_query("SELECT * FROM ordem_servico WHERE id='$id' AND microtime='$microtime'");

 if (mysql_num_rows($sql) > 0) {
   // dai aki você insere o comando pro outro do pedido....

 }
?>

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.