Jump to content
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/>";
}
?>

 

Share this post


Link to post
Share on other 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();
				}

 

Share this post


Link to post
Share on other 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!

Share this post


Link to post
Share on other 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!

Share this post


Link to post
Share on other 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....

Share this post


Link to post
Share on other 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.

 

Share this post


Link to post
Share on other 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;

?>

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Roberto_almeida
      Boa tarde, 
       
      Estou trabalhando em um projeto que será nescessario implantar um termo de aceite via poup-up na area do cliente no site, alguem consegue me orientar qual tecnologia eu posso usar para coletar esse aceite que o cliente fara atráves desse poup-up?
       
      Desde já agradeço a todos.
    • By fideles
      Fala pessoal, como anda as coisas?
       
      Meu conhecimento em JS e quase neutro, conheço algo, mais talvez não o suficiente para o que eu precise, por isso venho pedir ajuda a vocês,
       
      Tenho um pequeno programinha, simples mesmo que tem 4 areas (Administração, Compras, Financeiro, Almoxarifado).
       
      Quem fica na ADM solicita algo,  compras visualiza e da um "ok" e o financeiro tbm tem que dar um "ok" e no final, o almoxarifado dá um "Processo Concluido" (está parte está ok, funcionando, sem erro)
       
      Meu problema seria que quem está no almoxarifado consegue clicar no botão "Processo Concluido" mesmo o pessoal de compras e financeiro não dando um "ok" na solicitação ou ele tbm consegue dar "Processo Concluido" se um ou outro dar um "ok". Precisaria que ele so conseguisse dar "Processo Concluido" se os dois darem o "ok", se so um dar "ok" ele não pode dar "Processo Concluido".
       
      Alguém consegue pelo menos me dar um norte para que eu possa dar continuidade? Já tentei em PHP e nada.
       
    • By eiwes
      Fiz uma iteração foreach para gerar categorias e subcategorias, pois não queria fazer DOIS SELECTS, ficando assim:
       
      //----> Foreach para gerar a categoria, pois são vários items com as mesmas chaves, portanto agrupo foreach($exibeLista as $row){ $dlD[$row["nameD"]][] = [ "nameD"=>$row["nameD"], "idD"=>$row["idD"], "qtdR"=>$row["qtdR"], "qtdF"=>$row["qtdF"] ]; } //----> Foreach para gerar subcategorias foreach($exibeLista as $row){ $dLA[$row["nameP"]][] = [ "nameD"=>$row["nameD"], "idD"=>$row["idD"], "idAss"=>$row["idAss"], "idT"=>$row["idT"], "nameP"=>$row["nameP"], "qtdR"=>$row["qtdR"], "qtdF"=>$row["qtdF"] ]; } $fsHTML = []; $rateD = 0; $qtdAss = 0; if(is_array($dlD) || is_object($dlD)){ foreach ($dlD as $key => $ds) { if ($key <> '' && $key <> NULL) { $rateD += (($ds[0]["qtdR"]*100)/$ds[0]["qtdF"]); $qtdAss += count($dlD[$key]); //----> Array para inserir HTML da Categoria criada e criar accordion $fsHTML[] = ' <div class="col-md-12 col-sm-12 col-xs-12"> <div class="x_panel overflow_hidden padding-into-row-qsts bg-white-row filtro-on"> <span class="rateD">'.ceil($rateD/$qtdAss).'%</span> <span class="opcao-into-top">'.$ds[0]["idD"].' - '.$ds[0]["nameD"].' <a class="collapse-link open-filter-qsts border-radius8"><i class="fa fa-chevron-up"></i></a></span> <div class="x_content" style="display:none;padding-top:10px"> <div class="accordion" id="accordion" role="tablist" aria-multiselectable="true"> '; //----> Verificar se a subcategoria contém a categoria, se contém é incluída na array foreach ($dLA as $keys => $ass) { if($ass[0]["idD"] == $ds[0]["idD"] ){ if($ass[0]['idT'] <> 0){ $link = 't='.$ass[0]['idT']; }else{ $link = 'a='.$ass[0]['idAss'];} $fsHTML[] = ' <div class="panel"> <a class="panel-heading collapsed" href="/v/fs/st?mz=y&type=c&'.$link.'"> <span class="eficiencia-accordion">'.ceil(($ass[0]['qtdR']*100)/$ass[0]['qtdF']).'%</span> <h4 class="panel-title">'.$ass[0]['nameP'].'</h4> <span class="unicamente">'.$ass[0]['qtdR'].' respondido de '.$ass[0]['qtdF'].'</span> </a> </div> '; }//if ass }//foreach ass }//if ds //----> Aqui é aonde ocorre o ERRO! Era pra fazer o fechamento do Accordion e gerar uma nova DIV. //No índice [0] isso ocorre normalmente, porém no [1] ela agrupa todos os accordions. (abaixo farei a amostra) $fsHTML[] = '</div></div></div></div>'; }//foreach ds }//if verifica se é array e se é objeto return implode('', array_unique($fsHTML)); O correto seria assim:
       
      - Categoria
        - Subcategoria
        - Subcategoria
       
      - Categoria
       - Subcategoria
       - Subcategoria
       
       
      Como está acontecendo:
       
      - Categoria
        - Subcategoria
        - Subcategoria
       
      - Categoria
        - Subcategoria
        - Subcategoria
          - Categoria
            - Subcategoria
            - Subcategoria
              - Categoria
                - Subcategoria
                - Subcategoria
                  - Categoria
                    - Subcategoria
                    - Subcategoria
       
       
      Não consigo entender de jeito nenhum pq o primeiro fecha corretamente e a partir do segundo não.
      Alguém me ajuda?
       
       
    • By rodrigueslogstc
      Oi pessoal, tudo bem...
      Estou precisando clicar em uma linha da tabela e abrir outra página com os valores dessa linha que cliquei, sou novato e só conheço um pouco de php e HTML
      Poderiam me ajudar por favor?
      <?php session_start(); include_once("conectbusca.php"); $pesquisaunid = $_POST['Unidade']; ?> <html> <head> <title>Ranking</title> <link rel="stylesheet" type="text/css" href="estiloranking.css"> </head> <body> <table class="tabela" style='width:1272px'> <!-- Criando tabela: --> <tr> <th style='width:370px'>nome</th> <th>CPF</th> <th>&nbspcolocação&nbsp</th> <th>&nbspPontos/km&nbsp</th> <th>&nbspTotal km&nbsp</th> <th>&nbspTotal Pontos&nbsp</th> <th>&nbspMotor Ocioso&nbsp</th> <th>&nbspExcesso Velocidade&nbsp</th> <th>&nbspFreada Brusca&nbsp</th> <th>&nbspCurva Brusca&nbsp</th> </tr> <?php //Trazendo os dados do banco $sql = "SELECT * FROM tb_motoristas WHERE Unidade = '$pesquisaunid' AND Perfil = '$pesquisa'"; $resultado = mysqli_query($strcon,$sql) or die("Erro ao retornar dados"); $row = mysqli_num_rows($resultado); /*echo "$row";*/ if ($row == 0) { header("Location: login2.php");} // Obtendo os dados por meio de um loop while while ($registro = mysqli_fetch_array($resultado)) { $nome = $registro['Nome']; $cpf = $registro['CPF']; $unidade = $registro['Unidade']; $clocal = $registro['Coloc_local']; $cgeral = $registro['Coloc_geral']; $tkm = $registro['Total_km']; $tpontos = $registro['Total_pontos']; $mocioso = $registro['Motor_ocioso']; $velocidade = $registro['Velocidade']; $freada = $registro['Freada']; $curva = $registro['Curva']; echo "<tr>"; echo "<td><a href='prontuario.php'>".$nome."</td>"; echo "<td>".$cpf."</td>"; echo "<td align='center'>".$clocal."</td>"; echo "<td align='center'>".$cgeral."</td>"; echo "<td align='center'>".$tkm."</td>"; echo "<td align='center'>".$tpontos."</td>"; echo "<td align='center'>".$mocioso."</td>"; echo "<td align='center'>".$velocidade."</td>"; echo "<td align='center'>".$freada."</td>"; echo "<td align='center'>".$curva."</td>"; echo "</tr>"; } mysqli_close($strcon); echo "</table>";?> </body> </html>  
    • By ViniciusRamoa
      Olá, eu possuo o código:
       
      @foreach ($manga['chapters'] as $chapter) <div class="manga-chapter" > <h6 class="events-subtitle" style="left: -165px; top: 30px; position: relative;"> {{ link_to_route('front.manga.reader', "≫"." ".$chapter['chapter_name'], [$manga['manga_slug'], $chapter['chapter_slug']]) }} </h6> </div> @endforeach Mas ele acaba exibindo muitos itens, eu gostaria de limitar para apenas 5 itens, e que esses 5 itens, o menor fosse "apagado" e aparecesse o mais recente, exemplo:

      Atualmente:
      Item 5
      Item 4
      Item 3
      Item 2
      Item 1

      Quando um novo item for publicado, ficaria:
       
      Item 6
      Item 5
      Item 4
      Item 3
      Item 2

      Agradeço a ajuda, se puder pelo menos indicar um caminho, já ajuda muito, estou perdido aqui
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.