Con estos tres simples archivos tendrías a modo básico lo que quieres hacer por completo. El formulario para subir las recetas, el script que guarda la receta y un archivo php que te las lista y te ofrece un link de descarga. Ahora solo tendrías que adaptarlo a tu proyecto para que se vea como quieres que se vea, pero como puedes comprobar es mucho más sencillo que ponerte a guardar los PDF en la base de datos y le ahorrarás muchos recursos al servidor MYSQL:
Formulario de subida: index.php
Código PHP:
<form action="save-receta.php" method="post" enctype="multipart/form-data">
<label>Título: <input type="text" name="titulo" /></label>
<label>Archivo pdf: <input type="file" name="pdf" /></label>
<label>Descripción: <textarea name="descripcion"></textarea></label>
<input type="submit" value="Guardar" />
</form>
Guardar archivo: save-receta.php
Código PHP:
<?php
require_once("conexionbd.php");
require_once("conexionftp.php");
/* POSTEAMOS LOS DATOS */
$tituloReceta = $_POST['titulo'];
$descripcionReceta = $_POST['descripcion'];
$archivo = $_FILES['pdf'];
if($archivo['type'] != "application/pdf") {
echo "El archivo que intentas subir no es un PDF";
die();
}
/* CREAMOS LA CARPETA DE RECETAS */
if(!file_exists("archivos")) {
mkdir("archivos", 0777, true);
}
if(!file_exists("archivos/recetas-cocina")) {
mkdir("archivos/recetas-cocina", 0777, true);
}
/* ASIGNAMOS NOMBRE DEL ARCHIVO Y LA URL DE ÉSTE */
$nameArchivo = mt_rand(0,999999999);
$urlFile = 'archivos/recetas-cocina/'.$nameArchivo.'.pdf';
while(file_exists($urlFile)){
$nameArchivo = mt_rand(0,999999999);
$urlFile = 'archivos/recetas-cocina/'.$nameArchivo.'.pdf';
}
/* COPIAMOS EL ARCHIVO */
if(!move_uploaded_file($archivo['tmp_name'] , $urlFile )) {
echo "No pudo copiarse el archivo.";
die();
}
/* GUARDAMOS LOS DATOS EN LA BASE DE DATOS */
$mysqli->query("INSERT INTO recetas (titulo, descripcion, urlpdf) VALUES ('".$tituloReceta."', '".$descripcionReceta."', '/".$urlFile."')");
if($mysqli->error) {
unlink($urlFile);
echo "Hubo un error al guardar los dats en la base de datos: ".$mysqli->error;
die();
}
/* REDIRECCIONAMOS A LISTADO DE RECETAS */
header("location: listar-recetas.php");
?>
Listar recetas con enlace de descarga: listar-recetas.php
Código PHP:
<?php
require_once("conexionbd.php");
$listado = '';
$pRecetas = $mysqli->query("SELECT * FROM recetas");
while($aRecetas = $pRecetas->fetch_assoc()) {
$listado .= 'Receta '.$aRecetas['id'].': '.$aRecetas['titulo'].'<br /><br />
'.nl2br($aRecetas['descripcion']).'<br />
<a href="'.$aRecetas['urlpdf'].'" download="'.$aRecetas['titulo'].'">Descargar</a><br /><br />';
}
echo $listado;
?>