phpSi el otro dia veiamos como subir un fichero a través de un formulario HTML, a petición popular vamos a ver como subir este fichero acompañado de algún comentario, y cómo brindar el primero en un enlace de descarga a nuestros visitantes

Lo primero será ampliar el formulario que utilizabamos en el post anterior, para incluir la posibilidad de escribir algún texto sobre el fichero

<form action="enviar.php" enctype="multipart/form-data" method="post">
<table>
<tbody>
<tr>
<td>Elige un fichero:</td>
<td>
<input name="fichero" type="file" /></td>
</tr>
<tr>
<td>Comentario:</td>
<td>
<input name="comentario" type="text" /></td>
</tr>
<tr>
<td>
<input type="submit" value="Enviar" /></td>
</tr>
</tbody>
</table>
</form>

A continuación, haremos una ligera modificación en el script PHP que se encarga de subir el fichero, puesto que ahora debemos acompañar a éste del comentario del usuario. Otra novedad en este caso, es que se almacenará tanto la ruta al fichero como el comentario en una Base de Datos de manera que desde una página de descargas puedan cargarse una página web con todos los enlaces y comentarios de los ficheros que se hayan ido subiendo. Recordad que los ficheros se suben a un directorio llamado ficheros, que debe “colgar” del directorio ráiz donde se encuentren las páginas y los scripts PHP.

Supondremos que tenemos una Base de Datos en MySQL, con una sobla tabla llamada ‘descargas’, formada por tres campos, que tendrá esta forma:

CREATE TABLE descargas
(
id INT PRIMARY KEY AUTO INCREMENT,
ruta_fichero VARCHAR(255),
comentario VARCHAR(255)
);

El campo id hará las veces de identificador de fila y al ser de tipo AUTO INCREMENT no será necesario asignarle ningún valor, puesto que lo irá tomando de forma automática e incremental.

Asi, los pasos que seguirá el script PHP que procese el formulario, serán dos: recoger los datos del formulario y posteriormente insertarlos ocupando una fila en la tabla que se ha descrito. En el caso del fichero, como se puede observar solamente guardaremos la ruta al mismo, mientras que el propio fichero será almacenado en una carpeta conocida de manera que pueda ser localizado a través del valor de la ruta que se almacenará en la Base de Datos.

Veamos como queda entonces el script PHP enviar.php

// Recoge el comentario del formulario
$comentario = $_REQUEST["comentario"];
// Recoge el nombre del fichero que se habrá indicado en el formulario
$fichero = $_FILES["fichero"]["name"];
// Recoge la ubicación temporal del fichero en el servidor
$fichero_tmp = $_FILES["fichero"]["tmp_name"];
 
// Comprueba que se ha indicado un fichero en el formulario
if ($fichero == "") {
echo "¡Error! No se ha especificado ningún fichero\n";
}
 
// Ruta completa (incluido el nombre del fichero)
$destino = "./ficheros/" . $fichero;
 
// Copia el fichero al directorio de nuestro servidor, cogiéndolo de la ubicación temporal
if (move_uploaded_file($fichero_tmp, $destino)) {
// Conecta con la Base de Datos e inserta la información de la ruta y comentario del fichero
$conexion = mysql_connect("localhost", "root", "mi_password");
mysql_select_db("descargas", $conexion);
$sentencia = "INSERT INTO descargas (ruta_fichero, comentario) VALUES ('" . $destino . "','" . $comentario . "')";
$resultado = mysql_query($sentencia, $conexion);
 if ($resultado) {
  echo "El fichero se ha subido al servidor correctamente\n";
 }
}
else {
echo "Se ha producido un error al subir el fichero\n";
}

Ya tenemos hecha la parte que se encarga de subir el fichero y el comentario a la Base de Datos. Sólo queda echar un vistazo a como quedará la página desde la que podremos descargar y observar los comentarios de los ficheros. La llamaremos descargas.php:

echo "
<h1>DESCARGA DE FICHEROS</h1>
";
// Conecta con la Base de Datos
$conexion = mysql_connect("localhost", "root", "mi_password");
mysql_select_db("descargas", $conexion);
$sentencia = "SELECT ruta_fichero, comentario FROM descargas";
$resultado = mysql_query($sentencia, $conexion);
if ($resultado) {
 // Recorre todas las filas de la tabla y carga la información en la página web
 while ($fila = mysql_fetch_array($resultado)) {
 
  $ruta = $fila["ruta_fichero"];
  $comentario = $fila["comentario"];
  echo "<a href=" . $ruta . ">Descarga de fichero</a>" . $comentario;
 }
}

Asi, se presentará una página con todos los enlaces de descargas y comentarios de los ficheros que hayamos subido. Como deberes extra quedaría presentar dicha página de una forma más elegante, en forma de tabla o cargando imágenes para los enlaces de descarga, en lugar del texto “Descarga de fichero”.

Share