Jump to content
fainformatica

atualizar e cadastrar usando FOR

Recommended Posts

Olá pessoal, estou precisando de uma ajudinha....

estou fazendo um script para importar produtos para o banco de dados a partir do xml...

só que.... alguns produtos já estão cadastrados. o que eu queria fazer era o seguinte... 

quando o usuario for cadastrar o xml e os produts que já estiverem cadastrado cm o mesmo código de barras

seja apenas atualizado! como faç isso já tentei de várias maneiras....

 

ajudem ai por favor! segue abaixo o código que recebe e faz as gravações!

Detalhe, grava perfeitamente, só não consegui colocar uma condição que fizesse essa lógica!

 

<?php
session_start();

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

//$sql = "INSERT INTO produtos (cProd, nProd, un, estoque, vlVenda, ncm, vlCompra, pICMS, perc_ipi) VALUES ";
$grava = "INSERT INTO produtos (cProd, cBarras, nProd, un, estoque, vlVenda, ncm, vlCompra, pICMS, perc_ipi) VALUES ";
$verifica = "";
$atualiza = "";
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];

	$verifica .= "SELECT * FROM `produtos` WHERE `cBarras` = '$cBarras'; ";

	$atualiza .= "UPDATE `produtos` SET `estoque` = `estoque` + '$estoque', `vlVenda` = '$vlVenda', `vlCompra` = '$vlCompra' WHERE `cBarras` = '$cBarras';";

	$grava .= "('$codigo', '$cBarras', '$nProd', '$un', '$estoque', '$vlVenda', '$ncm', '$vlCompra', '$pICMS', '$perc_ipi'),";

}


	//Remove a última vírgula da string SQL
	$grava = substr($grava, 0, -1);

   //echo $sql."<br/><br/>";

   // $execute = mysqli_query($LOCAL, $sql);

   // if ($execute !=0) {
   // 	echo "deu";
   // }else{
   // 	echo "não deu";
   // }


?>

 

Share this post


Link to post
Share on other sites

Para inserir ignorando os já existentes.

INSERT IGNORE INTO (..) VALUES (..);

 

Para inserir se não existir ou atualizar caso exista.

REPLACE INTO (..) VALUES (..);

 

Share this post


Link to post
Share on other sites

Obrigado ja havia achado outra forma de responder!

 

<?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 Kefatif
      Prezados, boa tarde!
       
      Estou tentando fazer com que meu sistema grave num campo chamado "ULTIMO_ACESSO" a data após o login do usuário.
       
      Para isso estou tentando com o seguinte código:
      $sqlultimoacesso = "UPDATE USUARIOS set ULTIMO_ACESSO = curdate() WHERE ID_USUARIO = ".$row["ID_USUARIO"]; Mas não estou conseguindo, alguém poderia me auxiliar?
       
      Agradeço desde já pela ajuda!
    • By marcossantana10
      Faço uma consulta no banco para buscar uma lista de horários, depois preciso comparar esse resultado com um array só de horários que eu possuo. Utilizei o código abaixo pra isso:
       
      //dados do array $h_indisponiveis separados por _ (ilustrativo) 13:20:00_13:40:00_14:00:00_14:20:00_18:40:00_19:00:00_21:20:00 $sql = "MINHA CONSULTA"; $sql=$pdo->query($sql); if ($sql->rowCount() > 0) { $result = array('error'=>false, 'data' => array()); foreach ($sql as $row) { $horario['id'] = $row['id']; $horario['hora'] = $row['hora']; $horario['tempo'] = $row['tempo']; for($i=0; $i<$sizeArray; $i++){ if ($h_indisponiveis[$i] == $row['hora']){ $horario['disponivel'] = 'n'; } else { $horario['disponivel'] = 's'; } } array_push($result['data'], $horario); } echo json_encode($result); }  
      O problema é que ele não está retornando todas as correspondências entre o objeto da consulta e o array, apenas a última. Ao invés de marcar 6 resultados como "disponivel = n", ele só marca um. Como posso corrigir
       

    • By Diego-SLP
      Boa tarde,
       
      Preciso atualizar um registro o qual já possui um valor na coluna QUANTIDADE, agora atualizarei a coluna VALOR UNITARIO e gostaria que fosse feita a multiplicação QUANTIDADE * VALOR UNITARIO.
       
      Como consigo fazer essa consulta do ID, pegar a QUANTIDADE e multiplicar pelo VALOR UNITARIO de cada linha ? vou atualizar lotes, e nao só um registro.
       
      Imagino que com o FOR, mas não consigo montar sua estrutura de repetição.
    • By Yuji Tako
      Meu professor passou uma lista de exercício para a turma e no meio disso tinha uma questão
      cujo o enunciado é o seguinte:
      eu pensei nas formas de conseguir fazer esse programa e pensei nessa forma
      valor = parseInt(prompt('Valor')); valorsafe = valor; while(valor != 1){ if(valor >= 100){ cem = valor / 100; valor -= (cem * 100); }else if(valor >= 50 && valor <=100){ cinquenta = valor/50; valor -= (cinquenta * 50); }else if(valor >= 10 && valor <= 50){ dez = valor/10; valor -= (dez * 10); }else if(valor >= 5 && valor <=10){ cinco = valor/5; valor -= (cinco * 5); }else if(valor < 5){ um = valor; valor = 1; } } document.write( valorsafe.toFixed(0) + '<br>' + 'cem: ' + cem.toFixed(0) + '<br>' + 'cinquenta: ' + cinquenta.toFixed(0) + '<br>' + 'dez: ' + dez.toFixed(0) + '<br>' + 'cinco: ' + cinco.toFixed(0) + '<br>' + 'um: ' + um.toFixed(0) + '<br>' ); so que ao rodar ele no mozila eu encontro o seguinte erro

      a linha 34 no caso é dentro do "document.write()".
      eu imagino que o navegador nao esta nem executando o meu "while" e por isso nao consegue atribuir um valor em "cinquenta", e por esse motivo buga.
    • By heenrique
      tenho um while onde a div se atualiza automaticamente a cada 10 segundos, e gostaria que quando tivesse uma alteração na quantidade de linhas tocasse um bip, o bip tudo bem, sei como executar ele, por ex: as 9:00 tinha 3 o.s para o técnico, ai apareceu um encaixe, e foi direcionada para esse técnico, então são 4 o.s, quando a div atualizar automaticamente e ver que o resultado de agora é maior que o anterior emitir um bip mas a parte para comparar com a quantidade anterior não consegui,    trecho do código onde pretendo colocar o bip: <?php $hoje = date("Y-m-d"); $mi = '08:00:00'; $mf = '13:00:00'; $ti = '13:00:01'; $tf = '18:00:00'; $result_os_tard = "SELECT * FROM sis_suporte WHERE tecnico = '$func' AND visita BETWEEN '$hoje $ti' AND '$hoje $tf' LIMIT 5"; $resultado_os_tard = mysqli_query($mysqli, $result_os_tard); while($dados = mysqli_fetch_assoc($resultado_os_tard)){ ?> <tr> <td><a href="os.php?os=<?php echo $dados['chamado']; ?>"> <?php if ($dados['status'] == 'aberto'){ echo '<span class="label label-danger">Aberto</button>'; } if ($dados['status'] == 'fechado'){ echo '<button class="label label-success">Fechado</button>'; } ?> </a></td> <td><a href="os.php?os=<?php echo $dados['chamado']; ?>"><?php echo mb_strimwidth(utf8_encode($dados['nome']), 0, 15, "..."); ?></a></td> <td><a href="os.php?os=<?php echo $dados['chamado']; ?>"><?php echo strtoupper(mb_strimwidth(utf8_encode($dados['assunto']), 0, 4)); ?></a></td> <td><a href="os.php?os=<?php echo $dados['chamado']; ?>"><?php echo mb_strimwidth(utf8_encode($dados['chamado']), 0, 15, "..."); ?></a></td> </tr> <?php } ?>
×

Important Information

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