ADE_5 0 Denunciar post Postado Dezembro 17, 2010 Bom dia galera! bom é o seguinte: Tenho 3 tabelas no meu BD (VIAGEM, SUB_VIAGEM e VIAGEM_PERCURSO) O que eu preciso: *Inserir os dados na tab. VIAGEM, (usando o rollback e commit, pois só poderei salvar estes dados definitivamente no BD depois q tiver alimentado as outras tabelas) *Pegar o CODIGO_VIAGEM sendo que ela ainda não foi salva definitivamente no BD *Inserir os dados na tab. SUB_VIAGEM e VIAGEM_PERCURSO (o usuário poderá inserir mais de uma SUB_VIAGEM e VIAGEM_PERCURSO para cada VIAGEM) sendo que estas tem como chave estrangeira o COD_VIAGEM da tab VIAGEM que ainda não foi salvo definitivamente no BD. -Não faço a minima idéia de como posso fazer isso, pois não sei como usar o commit e rollback no php. -Devo usar mais de um formulario para enviar os dados, já que se trata de tabelas diferentes? -Meu BD é PostgreSQL. Se alguém tiver alguma explicação de como posso resolver este problema! Serei grato! Compartilhar este post Link para o post Compartilhar em outros sites
Ecos 0 Denunciar post Postado Dezembro 17, 2010 você fez relacionamento CASCASDE entre elas ? Entao nao precisa de begin, commit e rollback... Compartilhar este post Link para o post Compartilhar em outros sites
ADE_5 0 Denunciar post Postado Dezembro 17, 2010 você fez relacionamento CASCASDE entre elas ? Entao nao precisa de begin, commit e rollback... é CASCADE, mas o problema não está na hr de excluir e sim na hr de inserir, pq eu só posso inserir definitivamente uma VIAGEM se existirem SUB_VIAGEM e VIAGEM_PERCURSO (sendo q pode ser add mais de uma SUB_VIAGEM e VIAGEM_PERCURSO para cada VIAGEM e terei q usar o COD_VIAGEM como fk das mesmas). Desde já agradeço pela resposta! Compartilhar este post Link para o post Compartilhar em outros sites
Ecos 0 Denunciar post Postado Dezembro 17, 2010 eu só posso inserir definitivamente uma VIAGEM se existirem SUB_VIAGEM e VIAGEM_PERCURSO Então... um depende do outro... se você nao tiver a sub viagem você nao add viagem... pode dar insert direto na viagem sem o id da sub viagem que nao insere se tiver cascade. Compartilhar este post Link para o post Compartilhar em outros sites
Periscuelo 20 Denunciar post Postado Dezembro 17, 2010 Pode estudar também a classe PDO do PHP. Por ela você consegue trabalhar com commit e rollback caso necessite. http://www.php.net/pdo Abraços. Compartilhar este post Link para o post Compartilhar em outros sites
ADE_5 0 Denunciar post Postado Dezembro 23, 2010 Obrigado pelas respostas! Mas acho que não fui muito claro na minha explicação: O problema é q preciso salvar uma VIAGEM (pegar o código da mesma para usar como chave estrangeira na tab SUB_VIAGEM e na VIAGEM_PERCURSO), sendo q o usuário pode acrescentar mais de uma SUB_VIAGEM e VIAGEM_PERCURSO para cada viagem, e somente ao final (botão salvar) dar o commit se o usuario acrescentou pelo menos 1 SUB_VIAGEM e 1 VIAGEM_PERCURSO, senão executa o rollback (pois não pode conter uma VIAGEM sem conter ao menos uma SUB_VIAGEM e uma SUB_VIAGEM) Devo fazer isto tudo no mesmo form? ou tenho como salvar a VIAGEM e depois dar o rollback ou coommit. Obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
Ecos 0 Denunciar post Postado Dezembro 23, 2010 pra que pagar pau fera ?? faça a validação javascript no form mesmo... :S commit, rollback só pra transação, replicação e os escambal boa çorte Compartilhar este post Link para o post Compartilhar em outros sites
ADE_5 0 Denunciar post Postado Dezembro 23, 2010 Obrigado Ecos pela rapidez das respostas! Já havia pensado em fazer validação com JS mas o problema é, como add uma SUB_VIAGEM e VIAGEM_PERCURSO com a fk da VIAGEM se esta ainda não está no bd? Grato! Compartilhar este post Link para o post Compartilhar em outros sites
Ecos 0 Denunciar post Postado Dezembro 23, 2010 Usa um sistema de aba em ajax, em uma aba você cadastra viagem, na outra subviagem. Ou faça janelas diferentes para cada cadastro. quando terminar de cadastrar as viagens, você ja redireciona o usuario para uma pagina para cadastrar sub viagens. =) Compartilhar este post Link para o post Compartilhar em outros sites
Prog 183 Denunciar post Postado Dezembro 23, 2010 A PK deve ser gerada pelo seu sistema, não automaticamente pelo banco de dados. Desta forma a mesma pode ser utilizada onde você quiser, por ter sido gerada previamente. Compartilhar este post Link para o post Compartilhar em outros sites
ADE_5 0 Denunciar post Postado Dezembro 23, 2010 Ok galera! o negócio das abas é uma solução legal, mas e se o usuario preencher a aba da VIAGEM e resolver fechar o navegador e deixar para preencher no dia seguinte! terei uma VIAGEM sem SUB_VIAGEM e sem VIAGEM_PERCURSO, é por isso q acho q terei q usar o commit e rollback. Valeu! Compartilhar este post Link para o post Compartilhar em outros sites
Prog 183 Denunciar post Postado Dezembro 23, 2010 Se ele fechar o browser e o dados já estão gravados estão já foram comitados no banco de dados. Os dados devem ser comitados apenas no final do processo, não precisa de transação... você esta colocando "carroça à frente dos cavalos". Compartilhar este post Link para o post Compartilhar em outros sites
ADE_5 0 Denunciar post Postado Dezembro 23, 2010 Ok Prog! Parece q agora alguém entendeu o q eu quero fazer, é exatamente esse o meu problema, como posso fazer isso com PHP no PostgresSQL? ou qual a maneira correta de executar este tipo de operação? Repito o q eu preciso: *salvar dados na tab VIAGEM (salvar de forma temporária, pois não poderá conter VIAGEM sem SUB_VIAGEM e sem VIAGEM_PERCURSO) *adicionar VIAGEM_PERCURSO (fk COD_VIAGEM da tab. VIAGEM q foi salva temporariamente)- poderá adicionar mais de uma para cada VIAGEM *adicionar SUB_VIAGEM (fk COD_VIAGEM)- tmbm poderá adicionar mais de uma para cada VIAGEM No final se todas foram prenchidas, então eu salvo, senão eu volto ao estado inicial. Agradeço se alguém puder me auxiliar! Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Dezembro 23, 2010 Passo 1: Usuário preenche o primeiro form Passo 2: Usuário envia os dados para o servidor Nesse momento o servidor deverá validar e aceitar ou não os dados enviados. Caso o servidor aceite os dados, eles deverão ser gravados em uma sessão, caso contrário o usuário deverá ser notificado Passo 3: O usuário preenche o segundo form. Passo 4: O usuário envia os dados do segundo form para o servidor. Nesse momento o servidor fará o mesmo que foi feito para o passo 2, validar, aceitar ou não e, caso aceite os dados, deverá gravá-los em uma sessão Passo .... Último passo: O usuário terminou de preencher o último form e enviou os dados para o servidor. Nesse momento o servidor validará os dados do último form e, caso aceite, gravará todos os dados no banco, cada informação no seu lugar respectivo. Compartilhar este post Link para o post Compartilhar em outros sites
ADE_5 0 Denunciar post Postado Dezembro 23, 2010 Passo 1: Usuário preenche o primeiro form Passo 2: Usuário envia os dados para o servidor Nesse momento o servidor deverá validar e aceitar ou não os dados enviados. Caso o servidor aceite os dados, eles deverão ser gravados em uma sessão, caso contrário o usuário deverá ser notificado Passo 3: O usuário preenche o segundo form. Passo 4: O usuário envia os dados do segundo form para o servidor. Nesse momento o servidor fará o mesmo que foi feito para o passo 2, validar, aceitar ou não e, caso aceite os dados, deverá gravá-los em uma sessão Passo .... Último passo: O usuário terminou de preencher o último form e enviou os dados para o servidor. Nesse momento o servidor validará os dados do último form e, caso aceite, gravará todos os dados no banco, cada informação no seu lugar respectivo. OK! Mas como pego o codigo da tabela VIAGEM para usar como fk das outras, sendo q ainda não esta salva em definitivo? como faço essas validações no servidor? não encontrei nenhum exemplo na web que fosse parecido com o q eu preciso. Sou iniciante por isso tantas dúvidas. Grato! Compartilhar este post Link para o post Compartilhar em outros sites
Prog 183 Denunciar post Postado Dezembro 23, 2010 O código identificador que vincula os registros das tabelas não pode ser gerado automaticamente pelo banco de dados, você tem que gerar na sua aplicação usando uma lógica qualquer. Exemplo: hash MD5 do timestamp + código do usuário. Toda vez que o processo inicia, uma chave será gerada. Se ela vai ser utilizada de fato ninguém precisa saber, mas isto vai manter a integridade das informações. Compartilhar este post Link para o post Compartilhar em outros sites
ADE_5 0 Denunciar post Postado Dezembro 24, 2010 O código identificador que vincula os registros das tabelas não pode ser gerado automaticamente pelo banco de dados, você tem que gerar na sua aplicação usando uma lógica qualquer. Exemplo: hash MD5 do timestamp + código do usuário. Toda vez que o processo inicia, uma chave será gerada. Se ela vai ser utilizada de fato ninguém precisa saber, mas isto vai manter a integridade das informações. OK Prog! Se eu gerar um codigo eu consigo salvar os dados nas 3 tab com os relacionamentos q eu preciso, COD_VIAGEM fk da tab VIAGEM, e salvo os dados em todas ao mesmo tempo no mesmo submit, mas o problema é q o user poderá adicionar mais de uma SUB_VIAGEM e VIAGEM_PERCURSO para cada VIAGEM, então terei q ter mais de um submit, ai então digamos q o user adicione uma SUB_VIAGEM e perde a conexão ou fecha o browser eu terei uma SUB_VIAGEM sem VIAGEM, por isso q acho q devo usar transation. O problema é como implementar? Lembrando: *VIAGEM (uma) *SUB_VIAGEM (várias) *VIAGEM_PERCURSO (várias) Compartilhar este post Link para o post Compartilhar em outros sites
ADE_5 0 Denunciar post Postado Dezembro 27, 2010 Estou no aguardo de novas respostas... Compartilhar este post Link para o post Compartilhar em outros sites
Prog 183 Denunciar post Postado Dezembro 27, 2010 Você não precisa gravar cada SUB_VIAGEM a cada novo registro, você pode manter as informações no formulário (depende da sua tela), em seção, em cookie, em objetos... e somente quando todo o processo for finalizado, persistir no banco de dados. Compartilhar este post Link para o post Compartilhar em outros sites
ADE_5 0 Denunciar post Postado Dezembro 27, 2010 abaixo está uma demonstração de como o sitema deve funcionaR!!! ops achei q pudesse inserir uma img do meu pc!! se alguem souber de como posso fazer isso... Compartilhar este post Link para o post Compartilhar em outros sites