Jump to content
mikeysantana

Ficheiro "binary_file.dat" e erro na renomeação de ficheiros

Recommended Posts

mikeysantana

Boa tarde,

Estava a tentar finalizar uma aplicação que criei em PHP e MySQL, mais concretamente um formulário que envia a informação para a base de dados e também faz upload de ficheiros para o diretório onde se encontra. O programa carrega os ficheiros para o diretório e publica os dados na BD, mas há 2 problemas, para já, que não consegui resolver. O ficheiro é carregado mas não grava o link do ficheiro, apontando o local onde se encontra. O que grava é um ficheiro com o nome "binary_file.dat". Esse não seria o meu objetivo, mas como é o meu primeiro formulário com ficheiros, não sei como funciona a este nível. O outro erro é na alteração do nome do ficheiro. Defini no código para que o nome do ficheiro seja "IDGest-(Nº de Identificação Civil)_(Nome original do ficheiro).pdf", mas no entanto, este deixa o campo do Nº de Identificação Civil vazio. Aqui deixo o código em baixo:

<?php
$servername = "localhost";
$username = "123";
$password = "123";
$dbname = "123";

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname;charset=UTF8", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // prepare sql and bind parameters
    $stmt = $conn->prepare("INSERT INTO Individuos (NomeIndividuo, IDCivilIndividuo, ValIDCivilIndividuo, DataNascimentoIndividuo, CCIndividuo, ValCCIndividuo, TelIndividuo, MoradaIndividuo, ObsIndividuo, AnexoIndividuo) 
    VALUES (:NomeIndividuo, :IDCivilIndividuo, :ValIDCivilIndividuo, :DataNascimentoIndividuo, :CCIndividuo, :ValCCIndividuo, :TelIndividuo, :MoradaIndividuo, :ObsIndividuo, :AnexoIndividuo)");
	$stmt->bindParam(':NomeIndividuo', $NomeIndividuo);
	$stmt->bindParam(':IDCivilIndividuo', $IDCivilIndividuo);
	$stmt->bindParam(':ValIDCivilIndividuo', $ValIDCivilIndividuo);
	$stmt->bindParam(':DataNascimentoIndividuo', $DataNascimentoIndividuo);
	$stmt->bindParam(':CCIndividuo', $CCIndividuo);
	$stmt->bindParam(':ValCCIndividuo', $ValCCIndividuo);
	$stmt->bindParam(':TelIndividuo', $TelIndividuo);
	$stmt->bindParam(':MoradaIndividuo', $MoradaIndividuo);
	$stmt->bindParam(':ObsIndividuo', $ObsIndividuo);
	$stmt->bindParam(':AnexoIndividuo', $filePath);

	if ($_FILES["AnexoIndividuo"]["size"] < 5000000)

	{

		if ($_FILES["AnexoIndividuo"]["type"] == "application/pdf")

		{

			if ($_FILES["AnexoIndividuo"]["error"] == 0)

			{

				$filePath = "ficheiros/";

				$filePath = $filePath . "IDGest-" . $IDCivilIndividuo . "_" . basename( $_FILES['AnexoIndividuo']['name']); 

				if(move_uploaded_file($_FILES['AnexoIndividuo']['tmp_name'], $filePath)) 

				{

					echo "O ficheiro ".  basename( $_FILES['AnexoIndividuo']['name'])." foi carregado com sucesso.";

				} 

				else

				{

					echo "Ocorreu um problema ao carregar o ficheiro. Por favor, tente novamente.";

				}

			} 

			else

			{

				echo "Algo correu mal ...";

			}

		}

		else

		{

			echo "O ficheiro não está em formato .PDF .."; 

		}

	}

	else

	{

		echo "O ficheiro excede o limite máximo de 5MB."; 

	}	
	
	// insert a row
    $NomeIndividuo = $_POST["NomeIndividuo"];
    $IDCivilIndividuo = $_POST["IDCivilIndividuo"];
    $ValIDCivilIndividuo = $_POST["ValIDCivilIndividuo"];
	$DataNascimentoIndividuo = $_POST["DataNascimentoIndividuo"];
	$CCIndividuo = $_POST["CCIndividuo"];
	$ValCCIndividuo = $_POST["ValCCIndividuo"];
	$TelIndividuo = $_POST["TelIndividuo"];
	$MoradaIndividuo = $_POST["MoradaIndividuo"];
	$ObsIndividuo = $_POST["ObsIndividuo"];
	$AnexoIndividuo = $_POST[$filePath];
	
    $stmt->execute();

    echo "Novo indivíduo introduzido com sucesso!";
    }
catch(PDOException $e)
    {
    echo "O indivíduo não foi introduzido. Tente novamente." . $e->getMessage();
    }
$conn = null;


echo $filePath;
?>

Agradeço qualquer ajuda,

mikeysantana

Share this post


Link to post
Share on other sites
HappyHippyHippo

qual o número da linha onde estás a definir o valor da variável $IDCivilIndividuo e diz também o número da linha onde estás a usar esta variável para compor o nome do ficheiro a ser guardado


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
mikeysantana
12 horas atrás, HappyHippyHippo disse:

qual o número da linha onde estás a definir o valor da variável $IDCivilIndividuo e diz também o número da linha onde estás a usar esta variável para compor o nome do ficheiro a ser guardado

Olá, HappyHippyHippo.

Eu tenho algumas dúvidas sobre a definição da variável, pois como podes ver, tirei o código da internet e fui ajustando. Tenho dúvidas se defini o código na linha 16 ou na linha 90, que são as duas vezes que a variável aparece. Já o nome do ficheiro aparece composto na linha 40.

Consegues ajudar quando ao ficheiro "binary_file.dat"?

Edited by mikeysantana

Share this post


Link to post
Share on other sites
HappyHippyHippo

eu não perguntei pela definição da variável, olha bem para a pergunta :

- em que linha de código usas pela primeira vez a variável ?

- em que linha lhe das o valor que queres que ela tenha ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
mikeysantana

Esquece lá, já consegui resolver a situação.

Já agora, sabes como consigo obter o futuro ID (coluna AUTO_INCREMENT) da linha que irei adicionar à BD? Reparei que será mais benéfico para o sistema assim, pois não haverá ficheiros com nomes repetidos.

Aguardo resposta.

Edited by mikeysantana

Share this post


Link to post
Share on other sites
HappyHippyHippo
4 hours ago, mikeysantana said:

Esquece lá, já consegui resolver a situação.

Já agora, sabes como consigo obter o futuro ID (coluna AUTO_INCREMENT) da linha que irei adicionar à BD? Reparei que será mais benéfico para o sistema assim, pois não haverá ficheiros com nomes repetidos.

Aguardo resposta.

http://php.net/manual/en/pdo.lastinsertid.php


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
HappyHippyHippo

não, o valor retornado pela função é já o valor do campo que pretendes


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
mikeysantana
1 minuto atrás, HappyHippyHippo disse:

não, o valor retornado pela função é já o valor do campo que pretendes

Ah ótimo! Muito obrigado!

Share this post


Link to post
Share on other sites
mikeysantana
17 horas atrás, mikeysantana disse:

Ah ótimo! Muito obrigado!

Mas ele só retorna o valor depois de ter adicionado à BD os dados. Não consigo colocar o código para dar o valor antes de executar a variável "$stmt". Como posso fazer para dar o valor antes, ou pelo menos onde está?

Share this post


Link to post
Share on other sites
mikeysantana
2 horas atrás, mikeysantana disse:

Mas ele só retorna o valor depois de ter adicionado à BD os dados. Não consigo colocar o código para dar o valor antes de executar a variável "$stmt". Como posso fazer para dar o valor antes, ou pelo menos onde está?

Eu pensei nisso como uma variável... erro meu!


	$IDFicheiro = $conn->lastInsertId();
	$NomeFicheiro = "ficheiros/IDGest-" . $IDFicheiro . "_" . basename( $_FILES['AnexoIndividuo']['name']);

	$stmt=$conn->prepare("UPDATE Individuos SET AnexoIndividuo='$NomeFicheiro' WHERE id=$IDFicheiro");
		
	$stmt->execute();

Adicionei isto depois do código da linha "$stmt->execute();". Será que deva mudar o nome da variável para "$stmt2" (por exemplo) de forma a não haver problemas, ou não tem qualquer problema deixar assim?

mikeysantana

Share this post


Link to post
Share on other sites
HappyHippyHippo
6 hours ago, mikeysantana said:

Mas ele só retorna o valor depois de ter adicionado à BD os dados. Não consigo colocar o código para dar o valor antes de executar a variável "$stmt". Como posso fazer para dar o valor antes, ou pelo menos onde está?

nao

já agora, sabes os números do euromilhões antes de eles sairem ?

Edited by HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
mikeysantana
19 horas atrás, HappyHippyHippo disse:

nao

já agora, sabes os números do euromilhões antes de eles sairem ?

Eu já consegui resolver a situação. Pus o código antes do teu post. Diz-me só se está correto ou não. Em termos de sintaxe, o software não acusou nada e o código funciona como quero. Mas será que a médio-longo prazo, pode surgir algum problema que podemos antecipar?

mikeysantana

Share this post


Link to post
Share on other sites
HappyHippyHippo

informação da DB no mesmo ficheiro ... agora imagina que tens um segundo ficheiro que acede à BD ... volta a reescrever o mesmo

agora mudas de BD .. tens quantos ficheiros para alterar ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
HappyHippyHippo
16 hours ago, 13dev said:

@HappyHippyHippo apontas mais erros que soluções esse é teu problema, para não falar de tanta arrogância para com os novatos, sinceramente, queres ajudar, ajuda, caso contrario, nem respondas simples assim. 
já agora aconselhava-te leres as regras do forum.

este tipo de comentários já eu leio à muito, são maneiras diferentes de ver o que é uma ajuda. se não gostas, podes sempre ignorar.

aconselho-te sinceramente em não continuares pois os teus desvaneios irão cair em saco roto, deixando a minha resposta asentar em vários pontos que não passam directamente por mim:

- o número de "likes" total de respostas

- posts aqui e ali a agradecer a ajuda

- vou deixar @mikeysantana responder-te caso ele vir aqui


IRC : sim, é algo que ainda existe >> #p@p

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

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.