Upload files with php and assign them to a specific ID of a table so that it can be downloaded later

0

I would like to add the option of uploading files to my system, but that these are connected or saved based on a record in the PROYECTO table, that when you open a certain project in a list you can download your digital file.

that is: Solar light project, ID 5, proy.doc Development of social system, ID 7, proy2.pdf

I have searched several ways but I have not been able to do it.

I got this code to upload files but I do not know how to make the connection to the database so that they are stored there and then I can extract them by selecting the ID of any of the projects.

I also add that I do not know if it is necessary to create a record in the database to save the file, because the code only saves them in the directory that you place.

UPLOAD CODE:

<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if($check !== false) {
        echo "File is an image - " . $check["mime"] . ".";
        $uploadOk = 1;
    } else {
        echo "File is not an image.";
        $uploadOk = 0;
    }
}
// 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 != "gif" ) {
    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.";
    }
}
?>

I would also like to restrict the type only for documents doc, docx, and pdf. How could I do it?

CODE TO ADD, In response to comments:

function bd_documento_agregar($d){
$sql = sprintf("INSERT INTO dcumento (docu_id, proy_id) 
     VALUES ('%s','%s')",
     $d['docu_id'],
    $d['proy_id']);
$res = sql($sql);
$id  = sql2value("SELECT LAST_INSERT_ID()");
return $id;
}
    
asked by Victor Alejandro Alvarado Vilo 12.09.2016 в 02:54
source

1 answer

1

To know the type of the uploaded file, you can use $_FILES["fileToUpload"]["type"] and you just have to add one more condition to the code

// Allow certain file formats
$FileType = $_FILES["fileToUpload"]["type"];
if($FileType != "doc" && $FileType != "docx" && $FileType != "pdf") {
    echo "Formato no Admitido. Solo formatos DOC, DOCX y PDF.";
    $uploadOk = 0;
}

Although you could also do a validation on the form by javascript to avoid sending the form if the type of document is not what you want.

EDITED

To associate the document with a project you have at least these three options.

  • Create a table of documents, and another table called documents-projects, in this way in the table of documents saved the info of the file uploaded and in the table documents-projects, you keep the relationship between the project and the documents. This option it would be for cases in which projects share documents.
  • Create a table of documents, in which a field is idproyecto , and a When uploading the document do INSERT in this new table. This option would be valid if the documents could not be share in other projects.
  • Within the projects table, create a field documento , that you save the name of the uploaded document, which would force you to upload a single file by project and with different names

Any of the options that you consider should be codified in this part of the code

if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
       //***************************************************************
       //         INSERTAR AQUI EL CÓDIGO
       //***************************************************************
    } else {
        echo "Sorry, there was an error uploading your file.";
    }
    
answered by 12.09.2016 в 09:43