Ir para conteúdo

POWERED BY:

Arquivado

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

inhokinformatica

Executar arquivo sql no php

Recommended Posts

Bom dia.

 

Atualmente estou com dificuldades para executar um arquivo com instruções SQL diretamente no php. Tenho um planilha VBA que exporta as intruções e salva em um arquivo "xxxx.sql". São várias linhas, um exemplo a baixo.

INSERT INTO `fl_mes_05`(`id`, `matricula`, `dia`, `entrada_normal`, `saida_lanche`, `entrada_lanche`, `saida_normal`) VALUES ('1','913154','01/05/2019','00:00','00:00','00:00','00:00');
INSERT INTO `fl_mes_05`(`id`, `matricula`, `dia`, `entrada_normal`, `saida_lanche`, `entrada_lanche`, `saida_normal`) VALUES ('2','913154','02/05/2019','06:56','00:00','00:00','13:14');
INSERT INTO `fl_mes_05`(`id`, `matricula`, `dia`, `entrada_normal`, `saida_lanche`, `entrada_lanche`, `saida_normal`) VALUES ('3','913154','03/05/2019','07:12','11:15','11:35','13:11');

Bem...

 

Fiz o sistema para upload de arquivo

 

formulario.php

<form action="atualizar_frequencia.php" method="post" enctype="multipart/form-data">
					<input type="file" name="arquivo" />
					<input type="submit" value="Enviar"/>
				</form>

upload_sql.php

<?php 
error_reporting (E_ALL & ~ E_NOTICE & ~ E_DEPRECATED);

session_start(); // inicia sessão
include "../db.php"; // conecta no banco de dados **** PDO

$file = $_FILES["arquivo"]; // Arquivo recebido

$dir = "_frequencias/"; // Pasta para upload

// Movendo o arquivo da pasta temporaria para pasta de destino 
if (move_uploaded_file($file["tmp_name"], "$dir/".$file["name"])) { 
    echo "Upload Completo!<br>"; 
} 
else { 
    echo "Erro. Upload não realizado.";
  	exit;
}  

// Abre o Arquvio no Modo r (para leitura)
$arquivo = fopen ($dir."/".$file["name"], 'r');
	
// Lê o conteúdo do arquivo 
while(!feof($arquivo))
{
//Mostra uma linha do arquivo
$linha = trim(fgets($arquivo, 1024));

if($linha!=NULL){

				echo $linha.'<br />';

}}
echo "<br><br>".$dir.$file["name"]."<br><br>"; //mostras as linhas do arquivo sql

$sql = file_get_contents($dir.$file["name"]);
$qr = $PDO->exec($sql);

if($qr){
	echo "Sucesso! Dados salvos no BD";
  exit;
}else{
	echo "ERRO...";
  exit;
}
// Fecha arquivo aberto
fclose($arquivo);

?>

Até aí, tudo funcionou, consigo fazer o upload e ler o arquivo normalmente. Recentemente, consegui executar esse SQL no php para salvar os dados no banco mysql.

 

O que preciso agora é atualizar os dados no banco de dados. O sistema apresenta erro ao enviar o arquivo novamente

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poderia fornecer mais informações?
 

Você diz que precisa atualizar os dados, mas você está fazendo upload de um arquivo com UPDATES ou INSERTS como esse que mostrou?


Se você estiver fazendo upload de arquivos somente com INSERTS para atualizar, vai dar erro por conta da coluna ID que provavelmente é primarykey e não pode repetir.


Se o arquivo for de UPDATES ou a coluna ID não for uma primarykey ou unique, informe qual erro que esta te retornando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado!

 

Já consegui resolver aqui. Precisei dormir para achar a solução kkkk

 

Vou deixar o código aqui. Vai que alguém precise usar algum dia.

 

formulario.php

<table border="1" width="30%" height="Auto" align="left">
		<form action="atualizar_frequencia.php" method="post" enctype="multipart/form-data">
		<tr>
			<td colspan="2" align="center">Selecione o Mês para atualização</td>
		</tr>
  
		<tr>
			<td align="center" bgcolor="#000000" width="20%"></td>
			<td align="center" bgcolor="#4682B4" width="80%">
					<select name="mes_escolhido">
						<option value="fl_mes_01">Janeiro 2019</option>
						<option value="fl_mes_02">Fevereiro 2019</option>
						<option value="fl_mes_03">Março 2019</option>
						<option value="fl_mes_04">Abril 2019</option>
						<option value="fl_mes_05">Maio 2019</option>
						<option value="fl_mes_06">Junho 2019</option>
						<option value="fl_mes_07">Julho 2019</option>
						<option value="fl_mes_08">Agosto 2019</option>
						<option value="fl_mes_09">Setembro 2019</option>
						<option value="fl_mes_10">Outubro 2019</option>
						<option value="fl_mes_11">Novembro 2019</option>
						<option value="fl_mes_12">Dezembro 2019</option>
					</select>
			</td>
		</tr>
			<tr>
			<td align="center" bgcolor="#000000" width="20%">Selecione o Arquivo</td>
			<td>
				
					<input type="file" name="arquivo" />
					<input type="submit" value="Enviar"/>
				
			</td>
		</tr>
		</form>
          </table> 

atualizar_frequencia.php

<?php 
//error_reporting (E_ALL & ~ E_NOTICE & ~ E_DEPRECATED);

session_start(); // inicia sessão
include "../db.php"; // conecta no banco de dados **** PDO

$file = $_FILES["arquivo"]; // Arquivo recebido
$mes  = $_POST["mes_escolhido"]; // Mês escolhido
$dir = "_frequencias/"; // Pasta para upload

echo "----- RESUMO -----<br>";
echo "Arquivo: ".$file["name"]."<br>";
echo "Mês Selecionado: ".$mes."<br>";
echo "Pasta: ".$dir."<br><br>";

// Movendo o arquivo da pasta temporaria para pasta de destino 
if (move_uploaded_file($file["tmp_name"], "$dir/".$file["name"])) { 
    echo "1º Etapa: Ok - Upload Completo!<br>"; 
} 
else { 
    echo "1º Etapa: NOK - Upload não realizado."; 
	exit;
}  

// Abre o Arquvio no Modo r (para leitura)
$arquivo = fopen ($dir."/".$file["name"], 'r');
	
// Lê o conteúdo do arquivo 

$i = 1;

while(!feof($arquivo))
{
	$i++;
//Mostra uma linha do arquivo
$linha = trim(fgets($arquivo, 1024));

if($linha!=NULL){
	
	if($i<="10")
	{
		//echo $i." - ".substr($linha, 13 , 9)."<br />";
		$mes_arquivo_sql = substr($linha, 13 , 9);
	}

}}
echo "Mês do Arquivo ".$mes_arquivo_sql."<br>";
echo "Arquivo Recebido: ".$dir.$file["name"]."<br>";

if($mes!=$mes_arquivo_sql){
	echo "<br><br><font color='red'><b>O arquivo enviado não corresponde ao mês selecionado</b> Verifique e tente novamente!</font><br><br>";
	echo "<a href='calculos_atrasos.php'>[VOLTAR]</a>";
	exit;
}else{
	echo "<font color='green'><b>Arquivo correspondente</b></font><br>";
}

//Apaga tabela para receber dados novos
$deleterecords = "TRUNCATE TABLE ".$mes;
$deletar = $PDO->exec($deleterecords);

//escreve na tabela
$sql = file_get_contents($dir.$file["name"]);
$qr = $PDO->exec($sql);


	if($qr){
			echo "2º Etapa: Ok - Salvo no Banco de Dados!!! <br><a href='calculos_atrasos.php'>[VOLTAR]</a>";
	}else{
			echo "2º Etapa: NOK - Erro ao salvar no Banco de Dados...";
	}
// Fecha arquivo aberto
fclose($arquivo);

?>

 

Resolvido!

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Humildemente peço desculpa por postar uma dúvida que tenho.

      Preciso salvar no MySql, os seguinte Registro:

      1 - Principal
      ====> minha dúvida começa aqui
      ==========> como faço para o Sistema Contar Automaticamente o que estiver despois do 1.____?
      1.01 - Matriz
      1.01.0001 - Estoque
      1.01.0002 - Oficina
      etc

      2 - Secundário
      2.01 - Loja_1
      2.01.0001 - Caixa
      2.01.0002 - Recepção
      etc
       
      Resumindo seria como se fosse um Cadastro de PLANO de CONTAS CONTÁBEIL.

      Grato,


      Cesar









       
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a orientação dos amigos.

      Preciso fazer um Relatório onde o usuário pode Gerar uma Lista com prazo para vencimento de: 15 / 20/ 30 dias da data atual.

      Tem como montar uma SQL para o sistema fazer uma busca no MySql por período ou dias próximo ao vencimento ?

      Tentei fazer assim, mas o SQL me traz tudo:
      $query = "SELECT faturamento.*, DATE_ADD(faturamento.dataVencimento, INTERVAL 30 DAY), fornecedor.* FROM faturamento INNER JOIN fornecedor ON fornecedor.idfornecedor = faturamento.id_fornecedor WHERE faturamento.statusFatur = 1 ORDER BY faturamento.idFaturamento $ordenar ";  
      Grato,
       
      Cesar
       
       
       
       
    • Por violin101
      Caros amigos, saudações
       
      Por favor, me perdoa em recorrer a orientação dos amigos, tenho uma dúvida.
       
      Gostaria de uma rotina onde o Sistema possa acusar para o usuário antes dos 30 dias, grifar na Tabela o aviso de vencimento próximo, por exemplo:
       
      Data Atual: 15/11/2024
                                           Vencimento
      Fornecedor.....................Data.....................Valor
      Fornecedor_1...........01/12/2024..........R$ 120,00 <== grifar a linha de Laranja
      Fornecedor_1...........01/01/2025..........R$ 130,00
      Fornecedor_2...........15/12/2024..........R$ 200,00 <== grifar a linha de Amarelo
      Fornecedor_2...........15/01/2025..........R$ 230,00
      Fornecedor_3...........20/12/2024..........R$ 150,00
       
      Alguém tem alguma dica ou leitura sobre este assunto ?

      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a ajuda dos amigos, mas preciso entender uma processo que não estou conseguindo sucesso.

      Como mencionado no Título estou escrevendo um Sistema Web para Gerenciamento de Empresa.
       
      Minha dúvida, que preciso muito entender:
      - preciso agora escrever a Rotina para Emissão de NFe e essa parte não estou conseguindo.
       
      tenho assistido alguns vídeos e leituras, mas não estou conseguindo sucesso, já fiz toda as importações das LIB da NFePhp conforme orientação.

      Preciso de ajuda.

      Algum dos amigos tem conhecimento de algum passo-a-passo explicando a criação dessa rotina ?

      tenho visto alguns vídeos com LARAVEL, mas quando tento utilizar e converter para PHP+Codeiginter, dá uma fila de erros que não entendo, mesmo informando as lib necessárias.

      Alguns do amigo tem algum vídeo, leitura explicando essa parte ?

      Grato,

      Cesar.
×

Informação importante

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