Ade5 0 Denunciar post Postado Janeiro 7, 2011 Bom dia! Estou com uma dúvida básica de iniciante. Preciso criar um loop no PHP para fazer o seguinte: Tenho dois forms VIAGEM e VIAGEM_PERCURSO. No form VIAGEM o user preenche e clica em um botão que envia os dados atravéz do AJAX para o PHP que faz o seguinte: include('../inc/conexao.php'); pg_query($conexao,"BEGIN"); if (isset($_POST['inserir_viagem'])){ $codigo_tecnico = $_SESSION['codigo_tecnico']; $codigo_veiculo = $_POST['codigo_veiculo']; $data_saida = $_POST['data_saida']; $data_chegada = $_POST['data_chegada']; $hora_saida = $_POST['hora_saida']; $hora_chegada = $_POST['hora_chegada']; $viagem = ("INSERT INTO viagem(codigo_tecnico, codigo_veiculo, data_saida, data_chegada, hora_saida, hora_chegada)VALUES ('$codigo_tecnico','$codigo_veiculo', '$data_saida', '$data_chegada', '$hora_saida', '$hora_chegada')"); } No formulário VIAGEM_PERCURSO é enviado para o PHP atravéz do AJAX (disparado pelo evento onclick de um button chamado ADD) O usuário poderá prenncher várias vezes este form Estes dados serão salvos em uma tabela chamada VIAGEM_PERCURSO que tem como fk o código_viagem da tabela VIAGEM ($_SESSION['viagem']), meu problema é como posso criar um add (loop) no PHP de forma que estes dados fiquem armazenados temporariamente em um array para poder salva-los no bd qdo o user clicar em outro botão SALVAR. Estou usando desta forma, mas o problema é que não consigo adicionar mais de uma VIAGEM_PERCURSO if (isset($_POST['inserir_viagem_percurso'])){ $codigo_estrada_tipo = $_POST['codigo_estrada_tipo']; $km_inicial = $_POST['km_inicial']; $km_final = $_POST['km_final']; $valor_km_atual = $_POST['valor_km_atual']; $viagem_percurso = ("INSERT INTO viagem_percurso(codigo_viagem, codigo_estrada_tipo, km_inicial, km_final, valor_km_atual) VALUES ('{$_SESSION['viagem']}','$codigo_estrada_tipo','$km_inicial', '$km_final','$valor_km_atual')"); } Quando o usuário já tiver adicionado a(s) VIAGEM_PERCURSO e for salvar definitivamente os dados das tabelas VIAGEM e VIAGEM_PERCURSO (BOTÃO ALVAR). if(isset($_POST['salvar'])){ $insere_viagem = pg_query($conexao,$viagem); if($insere_viagem){ $select_viagem = pg_query($conexao,"SELECT CURRVAL('viagem_codigo_viagem_seq') as ultimo_codigo"); $codigo_viagem = pg_fetch_array($select_viagem); $_SESSION['viagem'] = $codigo_viagem['ultimo_codigo']; $insere_viagem_percurso = ($conexao,$viagem_percurso); pg_query($conexao,"COMMIT"); unset($_SESSION["viagem"]); }else{ pg_query($conexao,"ROLLBACK"); unset($_SESSION["viagem"]); } }else{ pg_query($conexao,"ROLLBACK"); unset($_SESSION["viagem"]); } } Preciso usar commit/rollback pelo fato de que não pode existir uma VIAGEM sem VIAGEM_PERCURSO e vice-versa. Meu problema é na hora de adicionar várias VIAGEM_PERCURSO para depois salva-las. Se alguém tiver alguma solução para esta minha dúvida, desde já agradeço!!!! Compartilhar este post Link para o post Compartilhar em outros sites
Periscuelo 20 Denunciar post Postado Janeiro 7, 2011 Inicialmente amigo Ade5 os inputs teram de ser um array para que você consiga fazer isso. Ao invés de <input type="text" name="codigo_veiculo" /> você terá que fazer assim: <input type="text" name="codigo_veiculo[]" /> Assim $_POST['codigo_veiculo'] será um array. Apartir dai você pode fazer um count de $_POST['codigo_veiculo'] e criar um loop onde você poderá a separação dos dados para o insert. //Suponha que os arrays abaixo sejam seus POSTS $arr1 = array(1,2,3,4,5); $arr2 = array('eu','fazer','em php','sei','capacidade'); $arr3 = array('nao sei','loops','mas','que tenho','de aprender'); $ct = count($arr1); $values = array(); for ($i=0; $i<$ct; $i++) { $values[] = '('.$arr1[$i].',\''.$arr2[$i].'\',\''.$arr3[$i].'\')'; } $sql = 'INSERT INTO tabela (id,texto,texto2) VALUES '.implode(',',$values); //Abaixo vai o debug para você ver como fica a query echo $sql; Pegou a idéia? Ou você também pode fazer um loop com varias queries de insert ai fica ao seu critério. Abraços. Compartilhar este post Link para o post Compartilhar em outros sites
Ade5 0 Denunciar post Postado Janeiro 7, 2011 Ou você também pode fazer um loop com varias queries de insert ai fica ao seu critério. Abraços. Como poderei implementar esta idéia? Não consegui entender muito bem a primeira idéia. Compartilhar este post Link para o post Compartilhar em outros sites
Go Back 0 Denunciar post Postado Janeiro 7, 2011 viagem.html <form method='post' name='frm' action='addviagem.php'> Viagens<br/> <!-- Aqui você terá o mesmo campo para o usuário preencher as viagens, por assim dizer, não sei como é no seu código. Daí você usa o NAME com colchetes no nome, determinando que isto será um Array(). --> <input type='text' name='viagem[]' /><br/> <input type='text' name='viagem[]' /><br/> <input type='text' name='viagem[]' /><br/> <input type='text' name='viagem[]' /></br> <input type='text' name='viagem[]' /><br/> <input type='submit' name='enviar' value='Enviar' /> </form> addviagem.php <?php include 'conexao.php'; $viagens = $_POST['viagem']; // Campo Viagem foreach($viagens as $valor) // Para cada valor uma inserção no Banco. { $ins = "insert into tabela(viagem) value($valor)"; $exe = mysql_query($ins); } ?> Compartilhar este post Link para o post Compartilhar em outros sites
Ade5 0 Denunciar post Postado Janeiro 7, 2011 meu html: <div id="viagem_percurso" style="border: solid 0px black;"> <table> <tbody> <tr> <td> <label>Km de Saída:</label> </td> <td> <input id="km_inicial" name="km_inicial" maxlength="6" class="maiuscula" type="text" size="8" /> </td> <td> <label>Km de Chegada:</label> </td> <td> <input id="km_final" name="km_final" maxlength="6" class="maiuscula" type="text" size="8" onchange="checarKm();"/> </td> <td> <label>Tipo de Estrada:</label> </td> <td> <select id="codigo_estrada_tipo" name="codigo_estrada_tipo" onchange="busca_valorAjax()" > <option selected="true" disabled="true" class="maiuscula">Tipo de estrada</option> <?php $consulta = pg_query("SELECT * FROM estrada_tipo ORDER BY nome ASC"); while( $row = pg_fetch_assoc($consulta) ) { echo "<option value=\"{$row['codigo_estrada_tipo']}\">{$row['nome']}</option>"; } ?> </select> </td> <td> <label>Valor:</label> </td> <td> <input id="valor_km_atual" name="valor_km_atual" maxlength="6" class="maiuscula" type="text" size="8" /> </td> <td> <input type="button" size="8" name="inserir_viagem_percurso" value="Add" onclick="salva_viagem_percurso()"/> </td> </tr> </tbody> </table> AJAX que envia os dados para o PHP: function salva_viagem_percurso() { ajax=IniciaAjax(); if (ajax) { ajax.onreadystatechange = function(){ if(ajax.readyState==4){ if(ajax.status==200){ var resposta = ajax.responseText; document.getElementById("aviso_viagem_percurso").innerHTML = resposta; document.getElementById("aviso_viagem_percurso").style.display ='block'; setTimeout("document.getElementById('aviso_viagem_percurso').style.display='none'", 500000); //Passa a resposta para a div aviso document.getElementById("aviso_viagem_percurso").innerHTML = resposta; }else{ alert(ajax.statusText); } } } //coloca os valores dos campos nas variaveis operacao = 'inserir_viagem_percurso'; km_inicial = document.getElementById("km_inicial").value; km_final = document.getElementById("km_final").value; codigo_estrada_tipo = document.getElementById("codigo_estrada_tipo").value; valor_km_atual = document.getElementById("valor_km_atual").value; //monta query string dados ='inserir_viagem_percurso='+operacao+'&km_inicial='+km_inicial+'&km_final='+km_final+'&codigo_estrada_tipo='+codigo_estrada_tipo+'&valor_km_atual='+valor_km_atual; if(km_inicial=='' || km_final=='' || codigo_estrada_tipo=='' || valor_km_atual==''){ //teste para ver se todos os campos foram preenchidos document.getElementById("aviso_viagem_percurso").innerHTML = 'Preencha todos os campos!'; //evita que o usuário deixe os campos em branco document.getElementById("aviso_viagem_percurso").style.display ='block'; setTimeout("document.getElementById('aviso_viagem_percurso').style.display='none'", 3000); }else{ //faz a requisição e envio pelo metodo POST ajax.open('POST','transacao.php',true); ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8"); ajax.send(dados); } } } para enviar os dados eu pego o value dos inputs, como eu poderia então enviar os dados usando o campo name? Talvez eu esteja fazendo confusão. Se alguém puder me explicar melhor ficaria grato!!! o meu codigo php; if (isset($_POST['inserir_viagem_percurso'])){ $codigo_estrada_tipo = $_POST['codigo_estrada_tipo']; $km_inicial = $_POST['km_inicial']; $km_final = $_POST['km_final']; $valor_km_atual = $_POST['valor_km_atual']; $insere_viagem_percurso =("INSERT INTO viagem_percurso(codigo_viagem, codigo_estrada_tipo, km_inicial, km_final, valor_km_atual) VALUES ('{$_SESSION['viagem']}','$codigo_estrada_tipo','$km_inicial', '$km_final','$valor_km_atual')"); } Compartilhar este post Link para o post Compartilhar em outros sites