Ir para conteúdo

Arquivado

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

AntonioJunior

usando foreach para retornar os dados e depois dar insert

Recommended Posts

Pessoal,

Boa Noite

 

Estou com um probleminha, estou procurando a algum tempo.

 

Minha intenção é.

criar uma tela para fazer lançamentos de valores de cartões de credito e débito.

 

Tenho uma tabela no bd "lanc_diario"

Nessa tabela tenho os campos por exemplo "valoramexcredito, valorvisacredito" e por aí vai...

Tenho outra tabela com os tipos de cartões, e por isso monto um form dinamico, que mostra os inputs de acordo com a tabela de cartões.

 

no meu form o input está assim:

<input type="text" name="valorcartao[]" placeholder="R$" />

 

e na pagina de retorno estou usando o foreach para me mostrar todos os valores do input.

$dtmovimento			= $_REQUEST['dtmovimento'];
$dtmovimento = date("Y-m-d",strtotime(str_replace('/','-',$dtmovimento)));

if(isset($_POST["valorcartao"]))
{
// Faz loop pelo array do q foi enviado
foreach($_POST['valorcartao'] as $indice => $valorcartao)
{
echo $indice." - ".$valorcartao.'<br />';

}
inserir(array("id","dtmovimento"), array(NULL,$dtmovimento), "lanc_diario");
}
else
{
echo "Nada enviado<br>";
}

 

 

Meu retorno está sendo esse:

 

0 - R$ 1,00
1 - 
2 - 
3 - 
4 - 
5 - 
6 - 
7 - R$ 1,00
8 - 

 

 

A questão é que não estou conseguindo inserir os valores no bd.

Pois não consigo encaixar no insert.

 

tentei algo do tipo:

 

inserir(array("id","dtmovimento","valoramexcredito"), array(NULL,$valorcartao[0]), "lanc_diario");

 

mas imagino que não posso deixar esse "valoramexcredito" fixo, por que não iria inserir os outros valores de cartões nos seus respectivos campos.

 

Alguém poderia me dar uma luz?

Muito obrigado!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

O insert esta fora do laço!

 

Outro detalhe, sua forma de montar os arrays, está totalmente errada.

 

 

Siga o modelo abaixo de como criar arrays!

 

<?php
$array = array(
    "foo" => "bar",
    "bar" => "foo",
);

// a partir do PHP 5.4
$array = [
    "foo" => "bar",
    "bar" => "foo",
];
?>

https://secure.php.net/manual/pt_BR/language.types.array.php

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
2 horas atrás, Williams Duarte disse:

O insert esta fora do laço!

 

Outro detalhe, sua forma de montar o arrays, está totalmente errada.

 

 

Siga o modelo abaixo de como criar arrays!

 


<?php
$array = array(
    "foo" => "bar",
    "bar" => "foo",
);

// a partir do PHP 5.4
$array = [
    "foo" => "bar",
    "bar" => "foo",
];
?>

https://secure.php.net/manual/pt_BR/language.types.array.php

 

 

 

Williams,

Boa Tarde!

 

Coloquei o insert dentro do laço, porém criou varias linhas no meu bd.

Não sei como informar o array dentro do insert.

Na verdade o que eu preciso é de apenas um insert, com todos os valores vindo do mesmo input.

 

tentei montar o array da forma que você disse.

 

$valores = $_POST['valorcartao'];

$vlcartoes = array(
	"indice" => $valores

);

print_r($valores);

 

o retorno foi esse:

Citar

Array ( [amexcredito] => R$ 0,01 [dinnerscredito] => R$ 0,02 [elodebito] => R$ 0,03 [elocredito] => R$ 0,08 [hipercredito] => R$ 0,07 [rededebito] => R$ 0,09 [redecredito] => R$ 0,12 [visadebito] => R$ 5,45 [visacredito] => R$ 0,55 )

 

e agora como pego esses valores e coloco no meu insert?

 

ele está assim:

 

inserir(array("id","dtmovimento"), array(NULL,$dtmovimento), "lanc_diario");

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui inserir no banco, mas só setando os campos manualmente no insert.

O problema é que os campos são dinamicos de acordo com a quantidade de cartões cadastrados.

 

veja como está o insert

inserir(array("id","dtmovimento","amexcredito","visacredito"), array(NULL,$dtmovimento,$_POST["valorcartao"]['0'],$_POST["valorcartao"]['1']), "lanc_diario");

e como eu disse, deixando o insert dentro do laço, ele cria um insert a cada volta, no meu caso eu preciso de apenas uma linha.

na minha tabela lanc_diario, eu tenho um campo para o valor de cada cartão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Williams,

Boa Tarde!

 

Estamos quase lá..

 

fiz isso:

 

$campos = implode(",", array_keys($_POST["valorcartao"]));
$valores  = "'".implode("','",$_POST["valorcartao"])."'";

inserir(array("id","dtmovimento",$campos), array(NULL,$dtmovimento,$valores), "lanc_diario");

 

Imagino que seja algum erro de sintaxe, ou incompatibilidade com minha função de inserir.

que está assim:

 

<?php

function inserir($coluna,$valor,$tabela){

	//arrays?
	if((is_array($coluna)) and (is_array($valor))){

		// tem o mesmo numero de elementos
		if(count($coluna) == count($valor)){
		// montar o sql
			$inserir = "INSERT INTO {$tabela} (".implode(', ',$coluna).")
			VALUES ('".implode('\', \'',$valor)."')";

		}else{
			return false;
		}
	}else{
		//montar sql
			$inserir = "INSERT INTO {$tabela} ({$coluna}) VALUES ('{$valor}')";
	}
	//conectou?
	if($conexao = connect()){
		//inseriu?
		if(mysql_query($inserir,$conexao)){
		//fecha conexão
			fechaConexao($conexao);
			return true;
		}else{
			echo "Query Invalida!";
			return false;
		}
	}else{
			return false;
	}
}


?>

 

obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seguinte, você ja esta usando implode. há unica coisa que você precisa adicionar é um indice no array, que vai para a função, ou seja dtmovimento.

 


$valorcartao = isset( $_POST["valorcartao"] ) ? $_POST["valorcartao"] : null;
$valorcartao['dtmovimento'] = $dtmovimento;

inserir(array_keys($valorcartao), $valorcartao, "lanc_diario");

Obs. Se o ID é autoincrement, não precisa passar null

Compartilhar este post


Link para o post
Compartilhar em outros sites
13 minutos atrás, Williams Duarte disse:

Seguinte, você ja esta usando implode. há unica coisa que você precisa adicionar um indice no array que vai para a função

 



$valorcartao = isset( $_POST["valorcartao"] ) ? $_POST["valorcartao"] : null;
$valorcartao['dtmovimento'] = $dtmovimento;

inserir(array_keys($valorcartao), $valorcartao, "lanc_diario");

Obs. Se o ID é autoincrement, não precisa passar null

 

Perfeito!,

No caso ali em cima quando você deu isset($_POST["valorcartao"]) ? $_POST["valorcartao"] : null;

Está setando para null, se a variável não foi iniciada? não entendi muito bem..

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Willian Simione
      Boa Noite, alguem poderia me ajudar em uma situação, estou tetnando gravar os dados da tela abaixo, porem nao estou conseguindo montar o jeito certo pra ele gravar todos os dados de uma vez

    • Por Giovanird
      Tenho uma tabela com a coluna média (valor decimal) .
       
      cod | media | cod_sala 1 1,98 5 2 2,34 2 3 1,32 5 4 2,51 3 5 1,65 1 6 2,78 5 7 4,95 4 8 0,75 4 9 1,23 1 10 1,63 2 11 1,55 3 Preciso no select MYSQL ou dentro do foreach multiplicar os valores do campo média, de acordo com o fitro por cod_sala
      Exemplo pelo cod_sala: 5
      Sendo o resultdo final: 1,98 * 1,32 * 2,78 = 7,26

      Desde já agradeço!
    • Por Giovanird
      Listo um array pelo foreach e preciso pegar os valores fora do foreach.
      Abaixo tenho o exemplo do foreach com os valores
       
      <?php foreach($turma $rsturma): if(($rsturma['id'] == 1){ echo $rsturma['nome']."<br>"; echo $rsturma['idade']."<br><br>"; } endforeach; //Dentro do foreach me retorna: Luis 13 Maria 12 Carlos 12 Matheus 14 Andréa 12 //Preciso pegar a posição e o valor desta lista $posicao1 = 1; $nome1 = Luis; $posicao2 = 2; $nome2 = Maria; $posicao3 = 3; $nome3 = Carlos; $posicao4 = 4; $nome4 = Matheus; $posicao5 = 5; $nome5 = Andréa;  
    • Por Ruyter
      Estou com problema para resolver uma solução que estou necessitando. Toda ajuda será bem-vinda!
       
      Tenho uma tabela onde há vários registros com um mesmo IDENTIFICADOR e vários INDENTIFICADORES diferentes em uma mesma coluna.
      Como percorrer os registros de uma tabela, com base nos IDENTIFICADORES?
      Preciso também analisar um período por data (>= e <=) e ABSTRAIR deste período o valor MIN e MAX de uma outra coluna
      Esta consulta precisa ser realizada em cada IDENTIFICADOR DISTINTO?
       
      Já utilizei o BETWEEN, mas ao usar o código com o foreach() no PHP ele lê apenas um registro.
      O código que estou trabalhando é este:
       
      SELECT conf_hidro_inatividade, cons_reg_ident_iot, cons_data, MIN(cons_leitura_atual), MAX(cons_leitura_atual), hidro_valvula, hidro_cliente FROM tab_conf_hidro, tab_consumo INNER JOIN tab_hidrometros ON cons_reg_ident_iot = hidro_ident_iot WHERE cons_reg_ident_iot = '20220701001' and conf_hidro_inatividade = 'sim' and hidro_valvula = 'aberta' and cons_data BETWEEN '2022-10-10' and '2022-10-13';  
      Com:

       
      SELECT conf_hidro_inatividade, cons_reg_ident_iot, cons_data, cons_leitura_atual, hidro_valvula, hidro_cliente /*(sem o MIN e MAX na mesma coluna)*/ WHERE cons_reg_ident_iot != ' ' and conf_hidro_inatividade = 'sim' and hidro_valvula = 'aberta';  
      usando dentro do foreach(), percorre todos os registros.
    • Por k9studio
      Meus amigos,
      preciso de um help
      seguinte tenho um credito quero lançar em varias faturas eum foreach até o valor do credito
      tipo exemplo a baixo:
      $credito = 100;
      foreach($shows as $rows){
      fatura 1 Valor 20,00  -100 marca como pago
      fatura 2 Valor 20,00  -80  marca como pago
      fatura 3 Valor 20,00  -60  marca como pago
      fatura 4 Valor 20,00  -40  marca como pago
      fatura 5 Valor 30,00  -20  aqui deixa como não pago
      }
×

Informação importante

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