Ir para conteúdo

Arquivado

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

fainformatica

Gravar dados de um foreach no bando de dados mysql

Recommended Posts

Ola pessoal, tenho o seguinte probleminha... estou importando produtos de uma nota fiscal para o banco de dados, só que não estou conseguindo!

Quando passo os dados, so consigo pegar o valor do primeiro item da lista(tabela)... onde estou errando ?

$seq = 0;
        foreach($xml->NFe->infNFe->det as $item) 
        {
            $seq++;
            $codigo = $item->prod->cProd;
            $cEAN = $item->prod->cEAN;
            $xProd = $item->prod->xProd;
            $NCM = $item->prod->NCM;
            $CFOP = $item->prod->CFOP;
            $uCom = $item->prod->uCom;
            $qCom = $item->prod->qCom;
            $qCom = number_format((double) $qCom, 2, ",", ".");
            $vUnCom = $item->prod->vUnCom;
            $vUnCom = number_format((double) $vUnCom, 2, ",", ".");
            $vProd = $item->prod->vProd;
            $vProd = number_format((double) $vProd, 2, ",", ".");   
            $vBC_item = $item->imposto->ICMS->ICMS00->vBC;
            $icms00 = $item->imposto->ICMS->ICMS00;
            $icms10 = $item->imposto->ICMS->ICMS10;
            $icms20 = $item->imposto->ICMS->ICMS20;
            $icms30 = $item->imposto->ICMS->ICMS30;
            $icms40 = $item->imposto->ICMS->ICMS40;
            $icms50 = $item->imposto->ICMS->ICMS50;
            $icms51 = $item->imposto->ICMS->ICMS51;
            $icms60 = $item->imposto->ICMS->ICMS60;
            $ICMSSN102 = $item->imposto->ICMS->ICMSSN102; 
            if(!empty($ICMSSN102)) 
                {
                    $bc_icms = "0.00";  
                    $pICMS = "0 ";
                    $vlr_icms = "0.00";
                }       
            
            
            if (!empty($icms00))
            {
                $bc_icms = $item->imposto->ICMS->ICMS00->vBC;
                $bc_icms = number_format((double) $bc_icms, 2, ",", ".");
                $pICMS = $item->imposto->ICMS->ICMS00->pICMS;
                $pICMS = round($pICMS,0);
                $vlr_icms = $item->imposto->ICMS->ICMS00->vICMS;
                $vlr_icms = number_format((double) $vlr_icms, 2, ",", ".");
            }
            if (!empty($icms20))
            {
                $bc_icms = $item->imposto->ICMS->ICMS20->vBC;
                $bc_icms = number_format((double) $bc_icms, 2, ",", ".");
                $pICMS = $item->imposto->ICMS->ICMS20->pICMS;
                $pICMS = round($pICMS,0);
                $vlr_icms = $item->imposto->ICMS->ICMS20->vICMS;
                $vlr_icms = number_format((double) $vlr_icms, 2, ",", ".");
            }
                if(!empty($icms30)) 
                {
                    $bc_icms = "0.00";  
                    $pICMS = "0 ";
                    $vlr_icms = "0.00";
                }
                if(!empty($icms40)) 
                {
                    $bc_icms = "0.00";  
                    $pICMS = "0 ";
                    $vlr_icms = "0.00";
                }
                if(!empty($icms50)) 
                {
                    $bc_icms = "0.00";  
                    $pICMS = "0 ";
                    $vlr_icms = "0.00";
                }
                if(!empty($icms51)) 
                {
                    $bc_icms = $item->imposto->ICMS->ICMS51->vBC;
                    $pICMS = $item->imposto->ICMS->ICMS51->pICMS;
                    $pICMS = round($pICMS,0);
                    $vlr_icms = $item->imposto->ICMS->ICMS51->vICMS;
                }
            if(!empty($icms60)) 
            {
                $bc_icms = "0,00";  
                $pICMS = "0 ";
                $vlr_icms = "0,00";
            }
            $IPITrib = $item->imposto->IPI->IPITrib;
            if (!empty($IPITrib))
            {
                $bc_ipi =$item->imposto->IPI->IPITrib->vBC;
                $bc_ipi = number_format((double) $bc_ipi, 2, ",", ".");
                $perc_ipi =  $item->imposto->IPI->IPITrib->pIPI;
                $perc_ipi = round($perc_ipi,0);
                $vlr_ipi = $item->imposto->IPI->IPITrib->vIPI;
                $vlr_ipi = number_format((double) $vlr_ipi, 2, ",", ".");
            }
            $IPINT = $item->imposto->IPI->IPINT;
            {
                $bc_ipi = "0,00";
                $perc_ipi =  "0";
                $vlr_ipi = "0,00";
            }   
            if($seq % 2 == 0)
                $class = "class='cor2'";
            else
                $class = "class='cor1'";
     
    ?>
        <tr <?php echo $class ?> >
          <td align="center" ><input <?php echo $class ?> type="text" name="item" size="5" value="<?php echo $seq ?>"></td>
          <td><input type="text" name="codigo[]" size="8" <?php echo $class ?> value="<?php echo $codigo ?>" readonly="readonly" /></td>
          <td><input type="text" name="cEAN[]" <?php echo $class ?> size="20" value="<?php echo $cEAN ?>" readonly="readonly" /></td>
          <td><input type="text" name="xProd[]" <?php echo $class ?> size="60" value="<?php echo $xProd ?>" readonly="readonly" /></td>
          <td><input type="text" <?php echo $class ?> name="NCM[]" size="8" value="<?php echo $NCM ?>" readonly="readonly" /></td>
          <td><input type="text" <?php echo $class ?> name="CFOP[]" size="4" value="<?php echo $CFOP ?>" readonly="readonly" /></td>
          <td><input type="text" <?php echo $class ?> name="uCom[]" size="2" value="<?php echo $uCom ?>" readonly="readonly" /></td>
          <td><input type="text" <?php echo $class ?> name="qCom[]" size="10" value="<?php echo $qCom ?>" readonly="readonly" /></td>
          <td><input type="text" <?php echo $class ?> name="vUnCom[]" size="10" value="<?php echo $vUnCom ?>" readonly="readonly" /></td>
          <td><input type="text" <?php echo $class ?> name="vProd[]" size="10" value="<?php echo $vProd ?>" readonly="readonly" /></td>
          <td><input type="text" <?php echo $class ?> name="vVenda[]" id="pvenda" size="10" value="<?php echo $vProd ?>" /></td>
          <td><input type="text" <?php echo $class ?> name="bc_icms[]" size="10" value="<?php echo $bc_icms ?>" readonly="readonly" /></td>
          <td><input type="text" <?php echo $class ?> name="vlr_icms[]" size="10" value="<?php echo $vlr_icms ?>" readonly="readonly" /></td>
          <td><input type="text" <?php echo $class ?>    name="vlr_ipi[]" size="5" value="<?php echo $vlr_ipi ?>" readonly="readonly" /></td>
          <td><input type="text" <?php echo $class ?> name="pICMS[]" size="5" value="<?php echo $pICMS ?>" readonly="readonly" /></td>
          <td><input type="text" <?php echo $class ?> name="perc_ipi[]" size="5" value="<?php echo $perc_ipi ?>" readonly="readonly" /></td>
          
        </tr>
        <?php } ?>
      </table>

Agora onde recebo dos dados!

 

<?php
session_start();

for( $i=0; $i<count($_POST['item']); $i++ )
{
   echo 'Item: '.$_POST['item'][$i].'<br/>';
   echo 'Codigo Barras: '.$_POST['cEAN'][$i].'<br/>';
   echo 'Descrição: '.$_POST['xProd'][$i].'<br/>';
   echo 'NCM: '.$_POST['NCM'][$i].'<br/>';
   echo 'CFOP: '.$_POST['CFOP'][$i].'<br/>';
   echo 'QTD: '.$_POST['qCom'][$i].'<br/>';
   echo 'Vlr Compra: '.$_POST['vUnCom'][$i].'<br/>';
   echo 'Vlr T Compra: '.$_POST['vProd'][$i].'<br/>';
   echo 'Vlr de Venda: '.$_POST['vVenda'][$i].'<br/>';
   echo "<br/>";
}
?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ver se é isso que você quer e se te ajuda, um exemplo que eu uso.

 

Index.php:

Index.php:

<div class="form-group">
             <div class="col-sm-12">
                   <input type="hidden" name="IdFunc[]" value="'.$_SESSION['lastID'].'">
                   <input type="text" name="nomFunc[]" placeholder="Nome do' ?> <?php echo $con+1; ?>º 
                   <?php echo 'Funcionário" class="form-control input-md">  
             </div>
</div>

Admin.php: // Onde recebo os valores para inserir no banco

foreach($_POST['IdFunc'] as $iden);
foreach($_POST['nomFunc'] as $func); // campo funcionários pode conter 1 ou vários valores

if(empty($iden)){
			echo '1'; // falha no envio por falta do id
			}
		elseif(empty($func)){
			echo '2'; // funcionario não preenchido
			}
			 else {
			$cont = count($_POST['IdFunc'])-1;
			$contar = count($_POST['IdFunc']);
			for($i = 0; $i <= $cont; $i++){
			$ver = $pdo->prepare("INSERT INTO cad_func(id_cad, nome, data_cad) VALUES(?,?,NOW())");
			$ver->bindValue(1, $_POST['IdFunc'][$i]);
			$ver->bindValue(2, $_POST['nomFunc'][$i]); // Aqui insere vários valores no banco se houver mais de um campo preenchido
			$ver->execute();
				}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, greg_kaippert disse:

Ver se é isso que você quer e se te ajuda, um exemplo que eu uso.

 

Index.php:


Index.php:

<div class="form-group">
             <div class="col-sm-12">
                   <input type="hidden" name="IdFunc[]" value="'.$_SESSION['lastID'].'">
                   <input type="text" name="nomFunc[]" placeholder="Nome do' ?> <?php echo $con+1; ?>º 
                   <?php echo 'Funcionário" class="form-control input-md">  
             </div>
</div>

Admin.php: // Onde recebo os valores para inserir no banco

foreach($_POST['IdFunc'] as $iden);
foreach($_POST['nomFunc'] as $func); // campo funcionários pode conter 1 ou vários valores

if(empty($iden)){
			echo '1'; // falha no envio por falta do id
			}
		elseif(empty($func)){
			echo '2'; // funcionario não preenchido
			}
			 else {
			$cont = count($_POST['IdFunc'])-1;
			$contar = count($_POST['IdFunc']);
			for($i = 0; $i <= $cont; $i++){
			$ver = $pdo->prepare("INSERT INTO cad_func(id_cad, nome, data_cad) VALUES(?,?,NOW())");
			$ver->bindValue(1, $_POST['IdFunc'][$i]);
			$ver->bindValue(2, $_POST['nomFunc'][$i]); // Aqui insere vários valores no banco se houver mais de um campo preenchido
			$ver->execute();
				}

 

 

 

Não ajudou.... mais já havia resolvido no momento em que fiz o post. faltava uma chave"[ ]" no campo item!

Compartilhar este post


Link para o post
Compartilhar em outros sites

só que agora eu preciso do seguinte... preciso ver quais dos produtos ja existem no banco de dados, para ao invés de grava um novo atualiza.... com a referencia no campo do codigo de barras!

Compartilhar este post


Link para o post
Compartilhar em outros sites

faz um select count(codigo) as total from produtos where barras = '$codBarras' antes para o produto que você estiver observando e conta o total de registros retornados. Se houverem registros > 0 , prepara um update, do contrário, prepara um insert....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu faria assim, parecido com o que Will Knippelberg disse.

 

$codBarras = strip_tags(trim($_POST['codBarras']));

 

$sel = $pdo->prepare('SELECT codBarras FROM $table WHERE codBarras = ?');

$sel->bindValue(1, $codBarras);

$sel->execute();

 

$rowCount = $sel->rowCount();

 

if($rowCount >= 1){

//aqui faz o update

}

else {

// aqui faz o insert

}

 

Se eu entendi bem o que você quer, é isso.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

resolvido aqui ja havia encontrado outra forma...

 

<?php
session_start();

require '../../includes/connect.php';

for( $i=0; $i<count($_POST['item']); $i++ ):
    $codigo = $_POST['codigo'][$i];
    $cBarras = $_POST['cEAN'][$i];
    $nProd = $_POST['xProd'][$i];
    $ncm = $_POST['NCM'][$i];
    $un = $_POST['uCom'][$i];
    $esto = $_POST['qCom'][$i];
    $estoque = str_replace(",", ".", $esto);
    $vlC = $_POST['vUnCom'][$i];
    $vlCompra = str_replace(",", ".", $vlC);
    $vlV = $_POST['vVenda'][$i];
    $vlVenda = str_replace(",", ".", $vlV);
    $pICMS = $_POST['pICMS'][$i];
    $perc_ipi = $_POST['perc_ipi'][$i];

    $sqlConsulta = "SELECT * FROM `produtos` WHERE `cBarras` = '$cBarras';";
	// $stm->prepare($LOCAL, $sqlConsulta);
	// $stm->execute();
	// $produto = $stm->fetch(PDO::FETCH_OBJ);
	$execute = mysqli_query($LOCAL, $sqlConsulta);
	//echo $sqlConsulta;
	$produtos = mysqli_fetch_object($execute);

	if (empty($produtos)) {

		$insert = "INSERT INTO `produtos` (cProd, cBarras, nProd, un, estoque, vlVenda, ncm, vlCompra, pICMS, perc_ipi) ";
		$insert .= "VALUES ('$codigo', '$cBarras', '$nProd', '$un', '$estoque', '$vlVenda', '$ncm', '$vlCompra', '$pICMS', '$perc_ipi');";
		//Remove a última vírgula da string SQL
		//$insert = substr($insert, 0, -1);
		$exeInsert = mysqli_query($LOCAL, $insert);

		if ($exeInsert != 0) {
			$msg = "Produtos importados com sucesso!<br><a href='javascript: fechar();'>Clique aqui para concluir!</a>";
		}else{
			$msg = "Não foi possivel importar os produtos!";
		}
		

	}else{
		$update = "UPDATE PRODUTOS SET estoque = (estoque + '$estoque'), vlVenda = '$vlVenda', vlCompra = '$vlCompra', `d_uCompra` = NOW() WHERE cBarras = '$cBarras';";

		$exeUpdate = mysqli_query($LOCAL, $update);

		if ($exeUpdate != 0) {
			$msg = "Produtos importados com sucesso!<br><a href='javascript: fechar();'>Clique aqui para concluir!</a>";
		}else{
			$msg = "Não foi possivel importar os produtos!";
		}
		
	}
	 
 endfor;

?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por babylon
      Olá galera tudo bem?
      Deixa eu perguntar, estava mexendo no meu site e queria adicionar em html essa tabela porem esta dando erro pois fica assim:
       

      Porem gostaria que ficasse assim:

      Segue o código da tabela:
      <center><table border="0">
          <tr>
      <td bgcolor="#0092df" width="24%"><a href="/categorias?ename=smartphones"><span style="font-size: 20px; color: #ffffff;"><b> <font color="#0092df">..</font>Bicicleta<br> <font color="#0092df">..</font>Track Bikes<br> <font color="#0092df">..</font>Aro 29 TKS</b></a></span><br><br><font size="5"><center><span style="background-color: #A1CD44">DE:</span></font> <br><font size="5"><s>R$ 1.999,99</center></font></s> </td><td><p><a href="/categorias?ename=smartphones"><img src="/static/img/itembicicleta.jpg"><br><font size="5"><center><span style="background-color: #A1CD44">COM - 60%:</span></font> <br><font size="5">1.199,99</font></center></a></td>
             <td><font color="#ffffff">....</font></td>
              <td bgcolor="#0092df" width="24%"><a href="/categorias?ename=smartphones"><span style="font-size: 20px; color: #ffffff;"><b> <font color="#0092df">..</font>Monitor 24"<br> <font color="#0092df">..</font>Samsung<font color="#0092df">aa.aa</font><br> <font color="#0092df">..</font>1ms 144hz</b></a></span></center></td><td><p><a href="/categorias?ename=smartphones"><img src="/static/img/itemmonitor.jpg"></a></td>
          </tr>
          </table></center>
      O que estaria errado, pois não sei como colocar nessa tabela outro fundo de outra cor, veja que usei td bgcolor="#0092df" para o azul escuro mas não sei como usaria pro "#e4f1fb" para o fundo ficar de azul claro em baixo bem como não ficou correto em altura o "DE:" com o "COM - 60%:".
      Bom é isso, obg.


    • 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 clovis.sardinha
      Bom dia.
      Meu problema é o seguinte:
      Estou fazendo uma tabela e preciso mostrar o usuário e várias cidades que pertencem a este usuário.
      O resultado do array é o seguinte:

      Quando passo para a tabela os valores de cidade se repetem para o mesmo usuário até o final e retorna fazendo o mesmo para o próximo usuário. 
      Veja abaixo

       
      Meu código para a tabela é a seguinte:
      <tr> <td align="left"><?php echo $usuario['nome'] ?></td> <td align="left"><?php echo $usuario['nome_orgao'] ?></td> <td align="left"><?php echo $usuario['nome_funcao'] ?></td> <?php foreach($destinos as $key=>$destino):?> <?php $key=0;?> <td align="left"> <?php foreach($destino as $chave=> &$cidade): ?> <?php echo $cidade['cid_nome']."-";?> <?php endforeach;?> </td> <?php $key+=$key; ?> <?php endforeach;?> <td><?php echo date('d/m/Y', strtotime( $usuario['created_at'])) ?></td> <td align="left"><a href="<?php echo base_url('UserAdmin/Usuario/getUsuarioById')."/".$usuario['id_user'] ?>">DETALHES</a></td> </tr> <?php endforeach ?> Onde estou errando? O que tenho de fazer para percorrer este array de modo a aparecer apenas as cidades pertencentes a cada usuário?

    • 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;  
×

Informação importante

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