Ir para conteúdo

POWERED BY:

Arquivado

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

renatagramos

[Resolvido] Função foreach

Recommended Posts

Olá, pessoal!

 

Preciso de uma ajuda para inserir dados numa tabela... Se alguém puder...

 

Tenho um formulário com este campo:

 

<tr>
<td align="left">EQUIPAMENTO <a href="#" class="adicionarCampo"><img src="../../imagens/adiciona.jpg"></a></td>
<td align="left">

<div class="equipamentos">
<p class="campoequipamento">
	<select name="ch_equip[]">
	<option value=""></option>
     <?php $sql = mysql_query("SELECT * FROM c_equipamento WHERE cli_id_equip = '$id_cli' ORDER BY equipamento_id");
     while($monta = mysql_fetch_assoc($sql)){echo '<option value="'.$monta['equipamento_id'].'">'.$monta['equipamento_id'].'  '.$monta['equipamento_tipo'].'  '.$monta['equipamento_marca'].'  '.$monta['equipamento_modelo'].'  '.$monta['equipamento_descricao'].'  '.$monta['equipamento_pmsp'].' </option>';} ?>
     </select> <input name="ch_defeito_reclamado[]" type="text" size="60"> <a href="#" class="removerCampo">Remover</a> </td>

</p>
</div>
</tr>

 

Em resumo, preciso pegar os valores destes dois campos ( "ch_equip[]" e "ch_defeito_reclamado[]" ) e inserir numa tabela.

 

 

Trecho da tentativa de insert :

 

if ($_GET['funcao'] == "registrar"){
$id_cli = $_GET ['id'];

$ch_data_chamado = ($_POST['ch_data_chamado']);
$ch_hora_chamado = ($_POST['ch_hora_chamado']);
$ch_solicitante = mb_strtoupper($_POST['ch_solicitante']);
$ch_funcao = mb_strtoupper($_POST['ch_funcao']);
$cheq_equip_id = $_POST['ch_equip'];
$cheq_defeito_reclamado = ($_POST['ch_defeito_reclamado']);
$cheq_pp = ($_POST['ch_pp']);

$sql_registra = "INSERT INTO gescal_chamado (ch_cliente, ch_data_chamado, ch_hora_chamado, ch_solicitante, ch_funcao, ch_status)
						   VALUES ('$id_cli', str_to_date('$ch_data_chamado', '%d/%m/%Y'), '$ch_hora_chamado', '$ch_solicitante', '$ch_funcao', 'ABERTO')";

Mysql_query($sql_registra) or die ("<p align=\"center\"><font face=arial size=2 color=#ff0000>Não foi possível registrar o chamado!<br><br></font><br><a href=\"javascript:history.go(-1)\"><img src=\"../../imagens/voltar.jpg\" alt=\"Voltar\" border=\"0\" align=\"center\"></a>");

if($sql_registra){

$idch = mysql_insert_id();

	foreach($ch_equip as $key => $equip){
		if($equip!=""){
			$cheq_equip_id=$ch_equip[$key];
			$cheq_pp=$ch_pp[$key];
			$cheq_defeito_reclamado=$ch_defeito_reclamado[$key];

			$sql2=mysql_query("INSERT INTO gescal_chamado_equip (cheq_ch_id, cheq_equip_id, cheq_pp, cheq_defeito_reclamado) 
													   VALUES ('$idch','$cheq_equip_id','$cheq_pp','$cheq_defeito_reclamado')");
			if(!$sql2) $erroSql=true;
		}
	}
	if($erroSql==false) echo "<script>alert('Orçamento cadastrado com Sucesso!'); window.open('orcamentos_pecas_vis.php?id=$orcamento','','scrollbars=yes,width=575,height=500'); location.href('orcamentos_pecas.php');</script>";
	exit;
}

 

 

Na tabela 'gescal_chamado' insere tudo direitinho, mas na tabela 'gescal_chamado_equip' o Foreach não funciona e não entra nada do que está nele.

 

O erro aparece na linha do "foreach($ch_equip as $key => $equip){"

 

Agradeço a quem puder ajudar... por favor!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Distração sua. No seu código, a parte;

 

Mysql_query($sql_registra) or die ("<p align=\"center\"><font face=arial size=2..........

você chamou a função mysql_query começando com letra maiúscula.

 

O certo é mysql_query().

Compartilhar este post


Link para o post
Compartilhar em outros sites

Limpei o código para facilitar...

 

Tenho um formulário com estes campos:

 

<input name="equipamento[]" type="text">
<input name="defeito[]" type="text">

 

E preciso gravá-los em uma tabela:

 

$equipamento= ($_POST['equipamento']);
$defeito = ($_POST['defeito']);

foreach($dado as $key => $equipamento){
if($equipamento!=""){
                     $equipamento=$equipamento[$key];
                     $defeito=$defeito[$key];

$sql = mysql_query("INSERT INTO tabela (equipamento, defeito) VALUES ('$equipamento','$defeito')");
}
}

 

Estou errando no foreach, mas não entendo muito disso e não sei onde corrigir.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, você não tá entendendo. Nesse exemplo você novamente não declarou nenhuma variável '$dado', por isso que tá dando erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou postar um exemplo auto-explicativo

<?php

$array = array(
   'Nome' => 'Carlos Coelho',
   'Sexo' => 'Masculino',
   'UF'   => 'RS'
);

foreach( $array as $key => $value )
{
   echo $key, ': ', $value, '<br/>';
}

 

Primeiro você passa o vetor com os dados, depois atribui uma variável que receberá o valor da chave e uma variável que receberá o valor daquela posição.

 

:thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Carlos, muito obrigada pelo exemplo; Iluminou um pouco...

 

Mas é assim... preciso passar os valores de 3 input para esse array e inserir em uma tabela no bacno.

 

Isso que não consigo fazer... Tentei assim:

 


<?php

$array = array(
   '$variavel1' => 'input1',
   '$variavel2' => 'input2',
   '$variavel3' => 'input3'
);

foreach( $array as $key => $value )
{
$sql=mysql_query("INSERT INTO loja_compra_itens (comp_itens_iditem, comp_itens_qtde, comp_itens_valor)
         VALUES ('$value','$value','$value')");
}

 

E é certo o input ser assim? <input type="text" name="input1[]">

Compartilhar este post


Link para o post
Compartilhar em outros sites

$array = array(

'$variavel1' => 'input1',

'$variavel2' => 'input2',

'$variavel3' => 'input3'

);

 

renatagramos você precisa pegar o valor de 3 input e considerar como um array único. Portanto, na marcação o atributo name do input deve ser name="nomeDoMeuInput[]"

 

Dessa maneira ao "resgatar" o conteúdo com a super global $_POST os três valores estarão em um único array.

 

// Regras de negócio

...

$inputData = $_POST['nomeDoMeuInput'];

 

Procure adicionar nome relevante para as suas variáveis.

 


// É array, hum... mais é array do que? Entendeu? 

$array = array();

 

Se for ter apenas 3 input, acho melhor cada um ter um nome e referenciar individualmente.

 

foreach( $array as $key => $value )

{

$sql=mysql_query("INSERT INTO loja_compra_itens (comp_itens_iditem, comp_itens_qtde, comp_itens_valor)

VALUES ('$value','$value','$value')");

}

 

Isso mostra que você não entendeu muito bem o conceito do foreach.

 

VALUES ('$value','$value','$value')"); 

 

Na linha acima os três campos terão o mesmo valor.

 


// Uma possível solução nada elegante.

$data = $_POST['nomeDoMeuInput'];

$partial = '';

foreach ( $data as $value ) {

$partial .= "'$value',";

}

$partial = substr( $value, 0, -1 );

$sql = "INSERT INTO loja_compra_itens (comp_itens_iditem, comp_itens_qtde, comp_itens_valor) 
VALUES ( {$partial} )";

$result = mysql_query( $sql );

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, pessoal!

 

Estive fora um tempo, mas voltei a trabalhar neste sistema... E continuo com o mesmo problema:

 

$valor = ($_POST["valor"]);
$contrato = ($_POST["contrato"]);

foreach ($contrato as $cont => $contrato)
{
	$sql2 = mysql_query ("INSERT INTO gescal_fin_fatura_contrato (nota_contrato, nota_valor, nota_data) 
				VALUES ('$contrato', '$valor', '$hojebd')") or die ("<p align=\"center\"><font face=arial size=2 color=#ff0000>Não foi possível gerar notas!<br><br></font><br><a href=\"javascript:history.go(-1)\"><img src=\"../../imagens/voltar.jpg\" alt=\"Voltar\" border=\"0\" align=\"center\"></a>");
}

 

Neste código consigo inserir o número do contrato perfeitamente, mas preciso inserir também o respectivo valor, e isso não consigo. Os exemplos e dicas acima me ajudaram um pouco, mesmo assim não tem nenhum que mostre a solução para esta questão.

 

Agradeço muito qualquer ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

[RESOLVIDO]

 

Que sufoco!! Mas resolvi!

 

Estes são os campos do formulário que eu precisava inserir na tabela:

 

<td valign="middle" height="25" align="center" nowrap>
<input type="hidden" name="valor[]" id="valor[]" value="<?php echo $contrato_valor ?>">
<input type="checkbox" name="contrato[]" id="contrato[]" value="<?php echo $contrato_id ?>" CHECKED>
</td>

 

 

E este é o código para inserir na tabela os números dos contratos com seus respectivos valores.

 


$valor =($_POST['valor']);
$contrato = ($_POST["contrato"]);
$contra = ($_POST["contrato"]);

foreach($contra as $key => $contrato)
{
if ($contrato!="")
{
$valor2=valor2banco($valor[$key]); // função para formatar o valor

$sql2 = mysql_query ("INSERT INTO gescal_fin_fatura_contrato (nota_contrato, nota_valor, nota_data) VALUES ('$contrato', '$valor2', '$hojebd')") 
or die ("<p align=\"center\"><font face=arial size=2 color=#ff0000>Não foi possível gerar notas!<br><br></font><br><a href=\"javascript:history.go(-1)\"><img src=\"../../imagens/voltar.jpg\" alt=\"Voltar\" border=\"0\" align=\"center\"></a>");
	}
}

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.