Jump to content
DreamOn

[Resolvido] Não carrega PDF porquê?

Recommended Posts

DreamOn

<p>Boas pessoal. Criei uma página para upload de ficheiros com um código que encontrei na net. Consigo fazer upload de todos os tipos de ficheiros que preciso mas não sei porquê PDF não dá de maneira nenhuma. Eles ficam arquivados na pasta uploads mas nunca são inseridos na base de dados. Se puderem ajudar agradecia...

Aqui está o código de upload (upload.php):

<?php
include_once 'dbconfig.php';
if(isset($_POST['btn-upload']))
{    

$file = rand(1000,100000)."-".$_FILES['file']['name'];
   $file_loc = $_FILES['file']['tmp_name'];
$file_size = $_FILES['file']['size'];
$file_type = $_FILES['file']['type'];
$folder="uploads/";

// new file size in KB
$new_size = $file_size/1024;  
// new file size in KB

// make file name in lower case
$new_file_name = strtolower($file);
// make file name in lower case

$final_file=str_replace(' ','-',$new_file_name);

if(move_uploaded_file($file_loc,$folder.$final_file))
{
$sql="INSERT INTO tbl_ficheiros(ficheiro,tipo,tamanho) VALUES('$final_file','$file_type','$new_size')";
mysql_query($sql);
?>
<script>
alert('successfully uploaded');
       window.location.href='view.php?success';
       </script>
<?php
}
else
{
?>
<script>
alert('error while uploading file');
       window.location.href='upload.php?fail';
       </script>
<?php
}
}
?>

Edited by DreamOn

Share this post


Link to post
Share on other sites
Knot

Dá-te algum erro? Não será algum problema com o nome do ficheiro (muito longo, caracteres especiais no nome)?

Tens aqui um exemplo melhor explicado e mais seguro do que esse que utilizas:

http://www.w3schools.com/php/php_file_upload.asp

Podes retirar a parte de verificar se a imagem é fake, e nas extensões adicionares a extensão de pdf que irá funcionar.

  • Vote 1

Share this post


Link to post
Share on other sites
DreamOn

Não me dá erro. Aliás diz que o upload foi feito com sucesso, e de facto foi, mas só aparece na pasta e na base de dados nada :/

Algo como isto?

<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
// Check if file already exists
if (file_exists($target_file)) {
   echo "Sorry, file already exists.";
   $uploadOk = 0;
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
   echo "Sorry, your file is too large.";
   $uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "pdf" ) {
   echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
   $uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
   echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
   if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
    echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
   } else {
    echo "Sorry, there was an error uploading your file.";
   }
}
?>

Share this post


Link to post
Share on other sites
Knot

Vê o log do apache para ver se tem algum erro. Deve haver algum problema quando executas

$sql="INSERT INTO tbl_ficheiros(ficheiro,tipo,tamanho) VALUES('$final_file','$file_type','$new_size')";
mysql_query($sql);

Sim podes usar o segundo código que usaste, adicionando a parte do sql para inserir os dados na base de dados.

if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
$sql="INSERT INTO tbl_ficheiros(ficheiro,tipo,tamanho) VALUES('$final_file','$file_type','$new_size')";
mysql_query($sql);
}

  • Vote 1

Share this post


Link to post
Share on other sites
DreamOn

Usei o código mas dá me sempre dois erros:

Notice: Undefined index: fileToUpload in C:\Program Files\EasyPHP 3.0\EasyPHP 3.0\www\RelPro\upload.php on line 3

Sorry, file already exists.

Notice: Undefined index: fileToUpload in C:\Program Files\EasyPHP 3.0\EasyPHP 3.0\www\RelPro\upload.php on line 12

Sorry, only JPG, JPEG, PNG & GIF files are allowed.Sorry, your file was not uploaded.

Edited by DreamOn

Share this post


Link to post
Share on other sites
Knot

No teu form tens que meter o input file com o name='fileToUpload', então alteras o código php para o name que tens no form.

Share this post


Link to post
Share on other sites
DreamOn

A caixa de texto certo?

Neste caso ela chama-se file, ou seja troco o nome para fileToUpload

Edited by DreamOn

Share this post


Link to post
Share on other sites
Knot

Sim ou então no código php onde tens fileToUpload mudas para file.

Mas o mais fácil é mudar no input:

<input type="file" name="fileToUpload" id="fileToUpload" required>

Share this post


Link to post
Share on other sites
Knot

Não mudas no teu código php de envio:

if ($_FILES["fileToUpload"]["size"] > 500000) //500KB, se quiseres maior metes aqui maior.

Share this post


Link to post
Share on other sites
DreamOn

The file 96133-acflags.pdf has been uploaded.

Notice: Undefined variable: final_file in C:\Program Files\EasyPHP 3.0\EasyPHP 3.0\www\RelPro\upload.php on line 29

Notice: Undefined variable: file_type in C:\Program Files\EasyPHP 3.0\EasyPHP 3.0\www\RelPro\upload.php on line 29

Notice: Undefined variable: new_size in C:\Program Files\EasyPHP 3.0\EasyPHP 3.0\www\RelPro\upload.php on line 29

Warning: mysql_query() [function.mysql-query]: Acesso negado para o usuário 'ODBC'@'localhost' (senha usada: NÃO) in C:\Program Files\EasyPHP 3.0\EasyPHP 3.0\www\RelPro\upload.php on line 30

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in C:\Program Files\EasyPHP 3.0\EasyPHP 3.0\www\RelPro\upload.php on line 30

Ele fez o upload para a pasta mas não para a BD

Share this post


Link to post
Share on other sites
Knot

Os erros da linha 29 ocorrem pq não existem essas variáveis, deves usar as variáveis corretas ou então atribuir a essas o valor correto:

$new_size = $_FILES["fileToUpload"]["size"]; //atribuir o valor à variável $new_size
$file_type = $imageFileType; //atribuir o valor à variável $file_type
$final_file = $_FILES["fileToUpload"]["tmp_name"]; //atribuir o valor à variável $final_file

$sql="INSERT INTO tbl_ficheiros(ficheiro,tipo,tamanho) VALUES('$final_file','$file_type','$new_size')";
mysql_query($sql);

Depois não estás a conseguir ligar-te à base de dados, deves verificar se tens o ficheiro com as definições de ligação, que penso que seja o teu ficheiro dbconfig.php

include_once 'dbconfig.php';

Edited by Knot

Share this post


Link to post
Share on other sites
DreamOn

Ya é isso mesmo. esquecime do include. my bad. quanto ao código eu só estou a usar o que me mostraste

Share this post


Link to post
Share on other sites
Knot

Editei a minha resposta, vê novamente.

Confirma se a tabela tem apenas esses 3 campos, pois seria de esperar que tivesse o campo "id_ficheiro", embora possas não o ter, mas se fosse eu iria utilizar um id automático na tabela.

Edited by Knot

Share this post


Link to post
Share on other sites
Knot

Enganei-me, corrige isto:

$final_file = $_FILES["fileToUpload"]["tmp_name"];

para:

$final_file = $_FILES["fileToUpload"]["name"];

Share this post


Link to post
Share on other sites
DreamOn

Já está tudo funcional Obrigado pela ajuda ;) Vou ver se agora consigo fazer a form para download dos ficheiros.

Aqui fica para quem precisar o código de upload.php:

<?php
include_once 'dbconfig.php';
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
$new_size = $_FILES["fileToUpload"]["size"];
$file_type = $imageFileType;
$final_file = $_FILES["fileToUpload"]["name"];
// Check if file already exists
if (file_exists($target_file)) {
   echo "Sorry, file already exists.";
   $uploadOk = 0;
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 50000000) {
   echo "Sorry, your file is too large.";
   $uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "pdf" ) {
   echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
   $uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
   echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
   if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
           echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
$sql="INSERT INTO tbl_ficheiros(ficheiro,tipo,tamanho) VALUES('$final_file','$file_type','$new_size')";
       mysql_query($sql);
   } else {
           echo "Sorry, there was an error uploading your file.";
   }
}
?>

Edited by DreamOn

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • 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.