Jump to content
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

 

Share this post


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

Share this post


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

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 Anderson Maciel
      Boa tarde pessoal,

      Estou quebrando a cabeça para resolver um problema, tenho uma div dinâmica que carrega uma <table> em uma das colunas deveria apresentar o componente Switchery, esta <table> é montada a partir de uma função PHP que faz o select em uma tabela do banco de dados conforme abaixo:
       
      echo '<table class="table table-hover"> <thead> <tr> <th>Nome</th> <th>Agrupamento</th> <th>Ativo</th> </tr> </thead> <tbody>'; foreach($data as $row) { If ($row['ativo'] == 1) {$vativochk = "checked";} else {$vativochk = "";} echo '<tr> <td>'.$row['nome'].'</td> <td>'.$row['agrupamento'].'</td> <td><input type="checkbox" name="ativo_grid" class="js-switch" '.$vativochk.' disabled="disabled"></td> </tr>'; } echo ' </tbody> </table>'; Aqui está o Ajax que chama e retorna atualizando a DIV:
      //funcoes do grid dos graficos function atualiza_grid_graficos() { $.ajax({ type: "POST", url: "hubfuncind.php", data: { id_tabindicadores_paineis: $('#id_tabindicadores_paineis').val(), acao: "gridgraficos" }, success: function(data) { $('#conteudo').html(data); } }); } O retorno vem certinho, mas apenas o componente Switchery está vindo desconfigurado, ou seja vem um checkbox normal (html).

      O que é mais incrível é que neste mesmo formulário mais acima tenho este mesmo componente funcionando normalmente, somente dentro da DIV dinâmica é que fica desconfigurado conforme imagem anexa.

      Será que alguém já passou por isso?

    • By violin101
      Caros amigos membros do grupo, saudações...
       
      Gostaria de tirar uma dúvida com os amigos.
       
      Tenho uma rotina onde consigo efetuar o Download de arquivos para uma pasta dentro do sistema, o que preciso seria mudar o nome do arquivo, por exemplo:
       
      após selecionar  o arquivo criado com o nome de: ESTOQUE.PDF
       
      gostaria de gravar na pasta de upload's com um novo nome, como por exemplo: cliente[1]-estoque.pdf.
       
      Onde poderia fazer essa alteração na rotina abaixo, para gravar o arquivo com um novo nome ?
       
      abaixo posto o fonte da rotina.
      <?php public function anexar() { $this->load->library('upload'); $this->load->library('image_lib'); $upload_conf = array( 'upload_path' => realpath('./assets/anexos'), 'allowed_types' => 'pdf|PDF|doc|DOC|docx|DOCX', // formatos permitidos para anexos de os 'max_size' => 1024, ); //Recebe a variável via POST $validade = $this->input->post('validade'); $this->upload->initialize($upload_conf); foreach ($_FILES['userfile'] as $key => $val) { $i = 1; foreach ($val as $v) { $field_name = "file_".$i; $_FILES[$field_name][$key] = $v; $i++; } } unset($_FILES['userfile']); $error = array(); $success = array(); foreach ($_FILES as $field_name => $file) { if (! $this->upload->do_upload($field_name)) { $error['upload'][] = $this->upload->display_errors(); } else { $upload_data = $this->upload->data(); if ($upload_data['is_image'] == 1) { // set the resize config $resize_conf = array( 'source_image' => $upload_data['full_path'], 'new_image' => $upload_data['file_path'].'thumbs/thumb_'.$upload_data['file_name'], 'width' => 200, 'height' => 125 ); $this->image_lib->initialize($resize_conf); if (! $this->image_lib->resize()) { $error['resize'][] = $this->image_lib->display_errors(); } else { $success[] = $upload_data; $this->load->model('Dados/Dadosclie_model'); $this->Dadosclie_model->anexar($this->input->post('idCli'), $this->input->post('descricao'), $validade, $upload_data['file_name'], base_url().'assets/anexos/', 'thumb_'.$upload_data['file_name'], realpath('./assets/anexos/')); } } else { $success[] = $upload_data; $this->load->model('Dados/Dadosclie_model'); $this->Dadosclie_model->anexar($this->input->post('idCli'), $this->input->post('descricao'), $validade, $upload_data['file_name'], base_url().'assets/anexos/', '', realpath('./assets/anexos/')); } } } if (count($error) > 0) { echo json_encode(array('result'=> false, 'mensagem' => 'Nenhum arquivo foi anexado.')); } else { echo json_encode(array('result'=> true, 'mensagem' => 'Arquivo(s) anexado(s) com sucesso .')); } } ?>  
      Grato,
       
      Cesar
    • By ViniciusRamoa
      Oi! Quando eu comecei a estudar php e logica de programação, é que uma das primeiras coisas que precisamos ter é uma noção exata do que queremos fazer, entao, o que eu estou querendo fazer, eu diria que é bem ousado para um iniciante, mas eu estou estudando e meu único foco é criar um de conteudos simples para meu site, será apenas para uso pessoal, nal tenho interesse em vender, mas iria disponibilizar para download , caso alguém queira, ele irá apenas postar conteúdos, apagar, editar e somente isso, não editará banner, ou layout ou qualquer outra coisa. Quero criar um sistema de loguin e dar permissão para apenas quem tiver o "rank 2" será considerado um adm e poderá postar.
      Nesse campo de postagem, terá apenas os campos de:
      Titulo
      Imagem (thumbnail)
      Link da página  (pois será um post clicavel, como um cardbox que ira redirecionar o visitante para a página destinada apenas àquele  conteudo) 
      Descrição 
      Apenas  isso
      Então, eu estou estudando PHP, no início ainda, mas é possivel eu criar tal ferramente em quanto tempo em média com a experiência que vocês ja possuem? 
      E outra, qual caminho devo seguir? Quero apenas criar o gerenciador de conteudo e sistema de loguin, tem algum "caminho" que eu deva seguir? Tenho que focar mais em x area para atingir o que eu quero e nao focar em y area, pois será perda de tempo? Como eu disse, quero apenas criar isso, e futuramente me aprofundar mais
      Então, possui alguma dica, orientação, link ou qualquer coisa que possa me ajudar a pelo menos ver qual caminho seguir, levando em conta que estou estudando por conta propria e nao tenho quem me orientar? Obrigado 
    • By Anderson Maciel
      Boa tarde pessoal,

      Estou quebrando a cabeça para resolver um problema, tenho uma div dinâmica que carrega uma <table> em uma das colunas deveria apresentar o componente Switchery, esta <table> é montada a partir de uma função PHP que faz o select em uma tabela do banco de dados conforme abaixo:
       
      echo '<table class="table table-hover"> <thead> <tr> <th>Nome</th> <th>Agrupamento</th> <th>Ativo</th> </tr> </thead> <tbody>'; foreach($data as $row) { If ($row['ativo'] == 1) { $vativochk = "checked"; } else { $vativochk = ""; } echo '<tr> <td>'.$row['nome'].'</td> <td>'.$row['agrupamento'].'</td> <td><input type="checkbox" name="ativo_grid" class="js-switch" '.$vativochk.' disabled="disabled"></td> </tr>'; } echo '</tbody> </table>'; Aqui está o Ajax que chama e retorna atualizando a DIV:
       
      function atualiza_grid_graficos() { $.ajax({ type: "POST", url: "hubfuncind.php", data: { id_tabindicadores_paineis: $('#id_tabindicadores_paineis').val(), acao: "gridgraficos" }, success: function(data) { $('#conteudo').html(data); } }); } O retorno vem certinho, mas apenas o componente Switchery está vindo desconfigurado, ou seja vem um checkbox normal (html).

      O que é mais incrível é que neste mesmo formulário mais acima tenho este mesmo componente funcionando normalmente, somente dentro da DIV dinâmica é que fica desconfigurado conforme imagem anexa.

      Será que alguém já passou por isso?

    • By egalauber
      Preciso descobrir qual é o nome do arquivo com a extensão.
      Só sei o início do nome:
       
      pasta "anexos".
      nome_do_arquivo_DAQUI_PRA_FRENTE_NAO_SEI_O_RESTO_DO_NOME_NEM_A_EXTENSAO
       
      Com a função glob eu consigo achar o arquivo, mas o nome completo ainda não.
       
       
      $verifica = glob("anexos/nome_do_arquivo_*");
      if($verifica == true){
         // achei o arquivo e agora preciso pegar o nome completo e a extensão
      } else {
            echo "Arquivo não encontrado";
         }
×

Important Information

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