Ir para conteúdo

POWERED BY:

Arquivado

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

Ade5

Criar loop no PHP para inserir dados

Recommended Posts

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

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

 

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.