Descargar archivos de mi servidor con mysql

Perdón me ayudaste bastante hace poco pero me acabo de atorar con algo, espero puedas ayudarme mi problemática esta hasta el final, te explico un poco de mi código...

Tengo un form que sube tres archivos a mi servidor y los guarda en una carpeta /xxxxxxx/archivos/, la ruta de cada uno de estos archivos la guardo un campo diferente de mi tabla, por ejemplo...

En el campo PDF guardo la ruta de mi archivo PDF que subí al servidor web

En el campo JPG guardo la ruta de mi archivo ZIP que subí al servidor web

En el campo DICOM guardo la ruta de mi archivo ZIP que subí al servidor web

Con el siguiente código UPLOAD.php

¿
<?php
if(isset($_POST['submit'])) {
 // Datos de conexión a configurar
 $server = "xxxxxxxxx";
 $user = "xxxxxxxxxxx";
 $pass = "xxxxxxxxxxx";
 $bbdd = "xxxxxxxx";
 // Ruta donde se guardarán las imágenes
 $directorio = $_SERVER['DOCUMENT_ROOT'].'/environment/archivos/';
 // Conecto a la BBDD
 $dbh = mysql_connect($server, $user, $pass);
 $db = mysql_select_db($bbdd);
 // Recibo los datos del campo Subir Interpretación PDF
 $nombrepdf = $_FILES['txtpdf']['name'];
 $tipopdf = $_FILES['txtpdf']['type'];
 $tamanopdf = $_FILES['txtpdf']['size']; 
 // Recibo los datos del campo Subir ZIP, contenedor de imágenes JPG
 $nombrejpg = $_FILES['txtjpg']['name'];
 $tipojpg = $_FILES['txtjpg']['type'];
 $tamanojpg = $_FILES['txtjpg']['size'];
 // Recibo los datos del campo Subir ZIP, contenedor de imágenes DICOM
 $nombredicom = $_FILES['txtdicom']['name'];
 $tipodicom = $_FILES['txtdicom']['type'];
 $tamanodicom = $_FILES['txtdicom']['size'];
 // Muevo el archivo desde su ubicación
 // temporal al directorio definitivo
 move_uploaded_file($_FILES['txtpdf']['tmp_name'],$directorio.$nombrepdf);
 move_uploaded_file($_FILES['txtjpg']['tmp_name'],$directorio.$nombrejpg);
 move_uploaded_file($_FILES['txtdicom']['tmp_name'],$directorio.$nombredicom);
// Guardamos en la BBDD 
 $link = mysql_connect ($server, $user, $pass);
 mysql_select_db($bbdd,$link);
 $sql = "INSERT into he_estudios (pdf, jpg, dicom) values ('$directorio$nombrepdf','$directorio$nombrejpg','$directorio$nombredicom')";
 $resultado = mysql_query($sql);
$my_error = mysql_error($link);
 if(!empty($my_error)) {
 echo "Ha habido un error al insertar los valores. $my_error";
 } else {
 echo "Imagen introducida satisfactoriamente";
 }
 } else {
 echo "Error, Todavia NO Ha Selecionado Nada";
}
?>

Hasta aquí todo va de maravilla, me guarda la ruta y los archivos los sube perfectamente...

En mi archivo home.php pido un criterio para mostrar los datos de mi tabla donde se guardaron las rutas de los archivos...

Mi consulta en un archivo home.php para mostrar los datos es la siguiente...

$criterio = getParam($_GET["criterio"], "");
$total1 = 0;
if ($criterio != "") {
 $query = "SELECT * FROM he_estudios WHERE username like ".sqlValue($criterio."%", "text")." ORDER BY fecha_estudio ASC";
 $queEmp1 = mysql_query($query, $conexion);
 $total1 = mysql_num_rows($queEmp1);

Me funciona de maravilla mira....

Lo muestra desacomodado, por toda la ruta del archivo PDF, JPG y DICOM, ya que al no subir archivos los muestra bien ordenados, el código que muestra la segunda tabla es el querry de arriba junto con este código que acomoda los datos en la tabla ...

<?php if ($total1 > 0) { ?>
<p><em><font color="#00FFFF">Total de Estudios: <?php echo $total1; ?></font></em></p>
<table width="1157" border="0" cellspacing="0" cellpadding="0">
 <tr>
 <th width="94">Fecha</th>
 <th width="122">Estudio</th>
 <th width="188">Tipo de Estudio</th>
 <th>Hospital</th>
 <th width="130">Especialista</th>
 <th width="329" style="text-align: center">Detalle Medico</th>
 <th width="41" style="text-align: center">PDF</th>
 <th width="35" style="text-align: center">JPG</th>
 <th width="54" style="text-align: center">DICOM</th>
 </tr>
 <?php while ($rsEmp = mysql_fetch_assoc($queEmp1)) { ?>
 <tr>
 <td width="94"><font color="#00FFFF"><?php echo $rsEmp['fecha_estudio']; ?></font></td>
 <td width="122"><font color="#00FFFF"><?php echo $rsEmp['estudio']; ?></font></td>
 <td width="188"><font color="#00FFFF"><?php echo $rsEmp['tipo_estudio']; ?></font></td>
 <td><font color="#00FFFF"><?php echo $rsEmp['clinica']; ?></font></td>
 <td width="130"><font color="#00FFFF"><?php echo $rsEmp['medico']; ?></font></td>
 <td width="329"><font color="#00FFFF"><?php echo $rsEmp['detalle']; ?></font></td>
 <td width="41"><font color="#00FFFF"><?php echo $rsEmp['pdf']; ?></font></td>
 <td width="35"><font color="#00FFFF"><?php echo $rsEmp['jpg']; ?></font></td>
 <td width="54"><font color="#00FFFF"><?php echo $rsEmp['dicom']; ?></font></td>
 </tr>
 <?php } ?>
</table>

donde estas tres lineas muestran la ruta del archivo....

 <td width="41"><font color="#00FFFF"><?php echo $rsEmp['pdf']; ?></font></td>
 <td width="35"><font color="#00FFFF"><?php echo $rsEmp['jpg']; ?></font></td>
 <td width="54"><font color="#00FFFF"><?php echo $rsEmp['dicom']; ?></font></td>

aquí es donde me gustaria me ayudaras, por favor, quisiera que en vez de mostrar la ruta del archivo, muestre un icono o imagen png por ejemplo "iconpdf.png (en el...

1 respuesta

Respuesta
1

Te hago una recomendación.

Cuando hagas el guardado de la ubicación en la base de datos, no guardes la ubicación del archivo en el servidor (toda la ruta desde la raíz del árbol de directorios) si no desde la raíz de tu sitio.

La diferencia radica en que si guardas toda la ruta desde tu árbol de directorios guardarás la ruta de esta forma.

/home/nombre_usuario/public_html/environment/archivos/archivo.pdf

Tu sitio web al estar dentro del directorio "public_html" no puede ver más "abajo" que su sitio público por lo cual esta ruta presenta dos problemas.

No es visible desde la web al estar en una zona privada dentro del servidor.

Estas entregando información de la ubicación de tu sitio web en el equipo por lo cual puedo recibir información que en manos mal intencionadas puede ser una vulnerabilidad de seguridad y puedes poner la aplicación en riesgo.

Cuando guardes la ubicación en la base de datos, haz referencia desde el directorio donde está tu sitio ya que esta ubicación si estará a la vista desde la web.

Te haré un ejemplo resumido de tu script.

//Esta es la referencia para guardar el archivo de forma fisica en tu máquina
$directorio = $_SERVER['DOCUMENT_ROOT'].'/environment/archivos/';
//esta es la referencia para publicar el archivo en tu web
$directorio_web = '/environment/archivos/';
//guardo en la base de datos haciendo referencia a la variable $directorio_web
$sql = "INSERT into he_estudios (pdf, jpg, dicom) values ('".$directorio_web.$nombrepdf."','".$directorio_web.$nombrejpg."','".$directorio_web.$nombredicom."')";
 $resultado = mysql_query($sql);

Cuando ya hayas guardado en la base de datos, podrás simplemente con un enlace, poner a disposición de tus clientes los archivos.

<td width="41"><a href="<?php echo $rsEmp['pdf']; ?>">Archivo pdg</a></td>
 <td width="35"><a href="<?php echo $rsEmp['jpg']; ?>">Archivo jpg</a></td>
 <td width="54"><a href="<?php echo $rsEmp['dicom']; ?>">archivo dicom</a></td>

De esta forma al hacer click en el enlace se descargará el archivo.

Ohh!! muchas gracias esa parte de la ruta no lo sabia gracias amigo, por otra parte en cuanto llegue a mi casa lo pruebo, me imagino que en la tabla ya se vera el link para descarga no es así? y de ser así como puedo poner na imagen como te comentaba con el link de descarga??

Modifica la linea del link por la siguiente

<td width="41"><a href="<?php echo $rsEmp['pdf']; ?>"><img src="ruta_a_la_imagen.jpg" alt="archivo"></a></td>

De esta forma, en vez de que aparezca en el enlace la palabra "archivo" aparecerá la imagen. Pon atención a colocar bien la ubicación de la imagen, si no, aparecerá una imagen de enlace roto.

Ok OK, bueno tiene lógica todo, llegando a casa lo compruebo y modifico, en verdad agradezco muchísimo tu ayuda, espero seguir contando con la misma, prometo no preguntar mucho je je, gracias amigo.

Mil gracias Amigo me va de maravilla tu código, en verdad te agradezco muchísimo ..........
Estuve haciendo pruebas y funciono de maravilla pero ahorita que quiero volver a hacer las pruebas me guara la ruta en la DB pero ya no me sube los archivos crees que sea de mi hosting o algo porque de buenas a primeras ya no me funciona

Se me olvido decirte que el hosting en donde estoy es uno gratuito quiero imaginarme que es por eso o me equivoco?

Mi código para subir los archivos es el siguiente....

<?php
if(isset($_POST['submit'])) {
 // Datos de conexión a configurar
 $server = "mysql.nixiweb.com";
 $user = "u387253748_vic";
 $pass = "123456";
 $bbdd = "u387253748_healt";
 // Ruta donde se guardarán las imágenes
 //$directorio = $_SERVER['DOCUMENT_ROOT'].'/environment/archivos/';
 $directorio_web = '/environment/archivos/';
 // Conecto a la BBDD
 $dbh = mysql_connect($server, $user, $pass);
 $db = mysql_select_db($bbdd);
 // Recibo los datos de los campos
 $id = $_POST["id"];
 $fecha = $_POST["fecha"];
 $estudio = $_POST["estudio"];
 $testudio = $_POST["testudio"];
 $hospital = $_POST["hospital"];
 $especialista = $_POST["especialista"];
 $detalle = $_POST["detalle"];
 // Recibo los datos del campo Subir Interpretación PDF
 $nombrepdf = $_FILES['txtpdf']['name'];
 $tipopdf = $_FILES['txtpdf']['type'];
 $tamanopdf = $_FILES['txtpdf']['size']; 
 // Recibo los datos del campo Subir ZIP, contenedor de imágenes JPG
 $nombrejpg = $_FILES['txtjpg']['name'];
 $tipojpg = $_FILES['txtjpg']['type'];
 $tamanojpg = $_FILES['txtjpg']['size'];
 // Recibo los datos del campo Subir ZIP, contenedor de imágenes DICOM
 $nombredicom = $_FILES['txtdicom']['name'];
 $tipodicom = $_FILES['txtdicom']['type'];
 $tamanodicom = $_FILES['txtdicom']['size'];
// Guardamos en la BBDD 
 $link = mysql_connect ($server, $user, $pass);
 mysql_select_db($bbdd,$link);
 $sql = "INSERT into he_estudios (username, fecha_estudio, estudio, tipo_estudio, clinica, medico, detalle, pdf, jpg, dicom) values 
 ('$id','$fecha','$estudio','$testudio','$hospital','$especialista','$detalle','".$directorio_web.$nombrepdf."','".$directorio_web.$nombrejpg."','".$directorio_web.$nombredicom."')";
 $resultado = mysql_query($sql);
 // Por si queremos la ID asignada a la imagen
 $id = mysql_insert_id();
 // Ahora comprobaremos que todo ha ido correctamente
 $my_error = mysql_error($link);
 if(!empty($my_error)) {
 echo '<font color="red">Ha habido un error al insertar los valores. $my_error</font>';
 //echo "Ha habido un error al insertar los valores. $my_error";
 } else {
 echo '<font color="red">Datos enviados exitosamente.</font>';
 //echo "Imagen introducida satisfactoriamente";
 }
 } else {
 echo "Error, Todavia NO Ha Selecionado Nada";
 }
?>

Crees que tenga algún error, me sube bien los datos a la base de datos pero no me sube los archivos al servidor =(

Si revisas el código, no estás ejecutando la acción de move_uploaded_file tienes que habilitar pegar esas líneas haciendo referencia a la variable $directorio que actualmente está comentada.

move_uploaded_file($_FILES['txtpdf']['tmp_name'],$directorio.$nombrepdf);
 move_uploaded_file($_FILES['txtjpg']['tmp_name'],$directorio.$nombrejpg);
 move_uploaded_file($_FILES['txtdicom']['tmp_name'],$directorio.$nombredicom);

Perdón amigo el código que te envíe, era uno anterior este es el código que utilizo....

<?php
if(isset($_POST['submit'])) {
 // Datos de conexión a configurar
 $server = "mysql.nixiweb.com";
 $user = "u387253748_vic";
 $pass = "123456";
 $bbdd = "u387253748_healt";
 // Ruta donde se guardarán las imágenes
 //$directorio = $_SERVER['DOCUMENT_ROOT'].'/environment/archivos/';
 $directorio_web = '/environment/archivos/';
 // Conecto a la BBDD
 $dbh = mysql_connect($server, $user, $pass);
 $db = mysql_select_db($bbdd);
 // Recibo los datos de los campos
 $usuario = $_POST["usuario"];
 $fecha = $_POST["fecha"];
 $estudio = $_POST["estudio"];
 $testudio = $_POST["testudio"];
 $hospital = $_POST["hospital"];
 $especialista = $_POST["especialista"];
 $detalle = $_POST["detalle"];
 // Recibo los datos del campo Subir Interpretación PDF
 $nombrepdf = $_FILES['txtpdf']['name'];
 $tipopdf = $_FILES['txtpdf']['type'];
 $tamanopdf = $_FILES['txtpdf']['size']; 
 // Recibo los datos del campo Subir ZIP, contenedor de imágenes JPG
 $nombrejpg = $_FILES['txtjpg']['name'];
 $tipojpg = $_FILES['txtjpg']['type'];
 $tamanojpg = $_FILES['txtjpg']['size'];
 // Recibo los datos del campo Subir ZIP, contenedor de imágenes DICOM
 $nombredicom = $_FILES['txtdicom']['name'];
 $tipodicom = $_FILES['txtdicom']['type'];
 $tamanodicom = $_FILES['txtdicom']['size'];
// Guardamos en la BBDD 
 $link = mysql_connect ($server, $user, $pass);
 mysql_select_db($bbdd,$link);
//Nos Aseguramos de que no aya otra imagen con el mismo nombre 
 //$queEmp = "SELECT nombre_archivo FROM tablaimagenes WHERE nombre_archivo='$nombrejpg'";
 //$resEmp = mysql_query($queEmp, $link) or die(mysql_error());
 //$totEmp = mysql_num_rows($resEmp);
 //if($totEmp > 0){
 //echo "El Nombre De La Imagen No Esta Disponible. <a href='javascript:history.back();'>Regresar Y Cambiar El Nombre</a>";
 //exit();
 //}
 // $sql = "INSERT into he_estudios (pdf, jpg, dicom) values ('$directorio$nombrepdf','$directorio$nombrejpg','$directorio$nombredicom')";
 // $resultado = mysql_query($sql);
 $sql = "INSERT into he_estudios (username, fecha_estudio, estudio, tipo_estudio, clinica, medico, detalle, pdf, jpg, dicom) values 
 ('$usuario','$fecha','$estudio','$testudio','$hospital','$especialista','$detalle','".$directorio_web.$nombrepdf."','".$directorio_web.$nombrejpg."','".$directorio_web.$nombredicom."')";
 $resultado = mysql_query($sql);
 // Por si queremos la ID asignada a la imagen
 $id = mysql_insert_id();
 move_uploaded_file($_FILES['txtpdf']['tmp_name'],$directorio_web.$nombrepdf);
 move_uploaded_file($_FILES['txtjpg']['tmp_name'],$directorio_web.$nombrejpg);
 move_uploaded_file($_FILES['txtdicom']['tmp_name'],$directorio_web.$nombredicom);
 // Ahora comprobaremos que todo ha ido correctamente
 $my_error = mysql_error($link);
 if(!empty($my_error)) {
 echo '<font color="red">Ha habido un error al insertar los valores. $my_error</font>';
 //echo "Ha habido un error al insertar los valores. $my_error";
 } else {
 echo '<font color="red">Datos enviados exitosamente.</font>';
 //echo "Imagen introducida satisfactoriamente";
 }
 } else {
 echo "Error, Todavia NO Ha Selecionado Nada";
 }
?>

actualmente tengo deshabilitado esa instruccion

move_uploaded_file($_FILES['txtpdf']['tmp_name'],$directorio_web.$nombrepdf);
move_uploaded_file($_FILES['txtjpg']['tmp_name'],$directorio_web.$nombrejpg);
move_uploaded_file($_FILES['txtdicom']['tmp_name'],$directorio_web.$nombredicom);

lo habilito y me aparece este error...

 

Warning: move_uploaded_file(/environment/archivos/session - copia (2).zip): failed to open stream: No such file or directory in /home/u387253748/public_html/environment/form_med/home/upload.php on line 72 Warning: move_uploaded_file(): Unable to move '/tmp/phpUfrLww' to '/environment/archivos/session - copia (2).zip' in /home/u387253748/public_html/environment/form_med/home/upload.php on line 72 Warning: move_uploaded_file(/environment/archivos/session - copia.zip): failed to open stream: No such file or directory in /home/u387253748/public_html/environment/form_med/home/upload.php on line 73 Warning: move_uploaded_file(): Unable to move '/tmp/phpIXp2lU' to '/environment/archivos/session - copia.zip' in /home/u387253748/public_html/environment/form_med/home/upload.php on line 73 Warning: move_uploaded_file(/environment/archivos/session.zip): failed to open stream: No such file or directory in /home/u387253748/public_html/environment/form_med/home/upload.php on line 74 Warning: move_uploaded_file(): Unable to move '/tmp/phpGlZjbi' to '/environment/archivos/session.zip' in /home/u387253748/public_html/environment/form_med/home/upload.php on line 74 Datos enviados exitosamente.

Y no suben los archivos pero si gurada la ruta en la BD

Recuerda que manejas dos variables

$Directorio tiene toda la ruta desde la raíz del sistema operativo de tu servidor. Esta variable va en la función move_uploaded_file ya que necesita esa ruta para depositar los nuevos archivos en un directorio.

La variable $directorio_web es la que va en la query y que te sirve para poder localizar los archivos desde la web.

Usa cada variable dependiendo de su correcto uso y tu script tendría que funcionar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas