DreamOn Posted June 22, 2015 at 10:28 AM Report #585199 Posted June 22, 2015 at 10:28 AM (edited) <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 June 22, 2015 at 10:28 AM by DreamOn
Knot Posted June 22, 2015 at 10:33 AM Report #585201 Posted June 22, 2015 at 10:33 AM 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. 1 Report
DreamOn Posted June 22, 2015 at 10:52 AM Author Report #585204 Posted June 22, 2015 at 10:52 AM 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."; } } ?>
Knot Posted June 22, 2015 at 11:06 AM Report #585206 Posted June 22, 2015 at 11:06 AM 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); } 1 Report
DreamOn Posted June 22, 2015 at 11:18 AM Author Report #585207 Posted June 22, 2015 at 11:18 AM (edited) 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 June 22, 2015 at 11:19 AM by DreamOn
Knot Posted June 22, 2015 at 12:31 PM Report #585210 Posted June 22, 2015 at 12:31 PM 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.
DreamOn Posted June 22, 2015 at 01:14 PM Author Report #585212 Posted June 22, 2015 at 01:14 PM (edited) A caixa de texto certo? Neste caso ela chama-se file, ou seja troco o nome para fileToUpload Edited June 22, 2015 at 01:15 PM by DreamOn
Knot Posted June 22, 2015 at 01:21 PM Report #585214 Posted June 22, 2015 at 01:21 PM 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>
DreamOn Posted June 22, 2015 at 03:40 PM Author Report #585230 Posted June 22, 2015 at 03:40 PM Your file is too large... Isto muda-se no php.ini certo?
Knot Posted June 22, 2015 at 03:59 PM Report #585231 Posted June 22, 2015 at 03:59 PM Não mudas no teu código php de envio: if ($_FILES["fileToUpload"]["size"] > 500000) //500KB, se quiseres maior metes aqui maior.
DreamOn Posted June 22, 2015 at 04:15 PM Author Report #585232 Posted June 22, 2015 at 04:15 PM 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
Knot Posted June 22, 2015 at 04:18 PM Report #585233 Posted June 22, 2015 at 04:18 PM (edited) 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 June 22, 2015 at 04:23 PM by Knot
DreamOn Posted June 22, 2015 at 04:21 PM Author Report #585234 Posted June 22, 2015 at 04:21 PM Ya é isso mesmo. esquecime do include. my bad. quanto ao código eu só estou a usar o que me mostraste
Knot Posted June 22, 2015 at 04:25 PM Report #585237 Posted June 22, 2015 at 04:25 PM (edited) 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 June 22, 2015 at 04:26 PM by Knot
DreamOn Posted June 22, 2015 at 04:36 PM Author Report #585238 Posted June 22, 2015 at 04:36 PM Ok ele já faz o upload para a base de dados mas no entanto ele fica com o caminho como nome e fica como .tmp C:Program FilesEasyPHP 3.0EasyPHP 3.0 mpphpB329.tmp Sim a tabela dispoe do id_ficheiro Not Null Auto Increment editado:
Solution Knot Posted June 23, 2015 at 08:10 AM Solution Report #585254 Posted June 23, 2015 at 08:10 AM Enganei-me, corrige isto: $final_file = $_FILES["fileToUpload"]["tmp_name"]; para: $final_file = $_FILES["fileToUpload"]["name"];
DreamOn Posted June 23, 2015 at 08:38 AM Author Report #585256 Posted June 23, 2015 at 08:38 AM (edited) 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 June 23, 2015 at 08:40 AM by DreamOn
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now