Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: NEMESIS PALADIN en 9 Marzo 2018, 18:03 pm



Título: Extraer link externo o interno desde BD con php
Publicado por: NEMESIS PALADIN en 9 Marzo 2018, 18:03 pm
Buenos dias, tengo una duda sobre como extraer correctamente un link de descarga a una pagina externa o un link interno para ver un archivo. Mi objetivo es poder hacer que al darle click al texto de un campo resultado de una busqueda, me mande directamente al link externo o al archivo pdf guardado en el servidor, dependiendo de como se haya guardado el registro previamente. Soy amateur en esto de la programacion weby el codigo no es mio, solo lo adapté

Este es el campo que contiene el link externo o el nombre de mi archivo guardado en el mismo servidor

<td align="center"><a href="archivo.php?id=<?php echo $datos['id']?>" target="_blank"><?php echo $datos['Nombre_archivo']; ?></a></td>


Este es el codigo que deberia diferenciar entre link externo o interno dependiendo si mi columna (tipo archivo) contiene la palabra link para enlace externo si se hizo el registro de esa forma, si no contiene la palabra link entonces contiene un archivo guardado en el mismo servidor y me manda a la ruta donde está

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <?php
        include 'config.inc.php';
        $db=new Conect_MySql();
            $sql = "select*from ensayo where id=".$_GET['id'];      #consulta del archivo
            $query = $db->execute($sql);
            if($datos=$db->fetch_row($query)){
                if($datos['Tipo_archivo'] == "link"){
 
                }else{ ?>
        <iframe src="../registros/archivosensayo/<?php echo $datos['Nombre_archivo']; ?>" width="100%" height="950px"></iframe>   <!--se muestra el archivo-->
 
                <?php } } ?>
    </body>
</html>

Mi problema es que en todos los casos, el codigo me manda a una ruta interna donde se almacenan los archivos, aun si el registro contiene la palabra link y un enlace externo para descarga, me sigue enviando a una ruta interna en la que obviamente no hay nada y no tengo la mas minima idea de como hacer que funcione correctamente.
Gracias de antemano


Título: Re: Extraer link externo o interno desde BD con php
Publicado por: srWhiteSkull en 12 Marzo 2018, 16:10 pm
La ruta interna será la ruta donde los guardaste y debería ser eso lo que se guarde en la base de datos, y no solo el nombre del fichero. Normalmente debería ser una carpeta y un fichero alojados en una carpeta "pública" de la cual los usuarios puedan acceder sin pasar por la aplicación web y si por medio de una url (podrías usar $_SERVER["DOCUMENT_ROOT"]). La url será la ruta externa que me imagino es a lo que te refieres, en ella simplemente debería bastar el dominio y la carpeta donde alojaste el fichero.

En resumen, almacena los documentos en la base de datos con la ruta después del public_html o la carpeta local que has definido como "pública" y luego para usarla en el enlace usa esa ruta más el dominio y listo.
 


Título: Re: Extraer link externo o interno desde BD con php
Publicado por: Penguin en 12 Marzo 2018, 23:14 pm
No entiendo exactamente cuál es el problema, pero la primer consulta con if, está vacía:

Código:
if($datos['Tipo_archivo'] == "link"){
 
                }

Ahí le estás diciendo al código "si 'tipo_archivo' es igual a 'link' hace lo siguiente" y no le indicas nada, rápidamente cerras la condición con la llave para usar el else, en caso contrario. Creo que lo que buscas sería algo como esto:

Código:
if($datos['Tipo_archivo'] == "link"){?>

        <iframe src="<?php echo $datos['Nombre_archivo']; ?>" width="100%" height="950px"></iframe> <!--se muestra el link, suponiendo que "Nombre_Archivo" contiene el enlace externo, siempre y cuando "Tipo_Archivo" sea igual a 'link'-->
          <?php
                }else{ ?>
        <iframe src="../registros/archivosensayo/<?php echo $datos['Nombre_archivo']; ?>" width="100%" height="950px"></iframe>   <!--se muestra el archivo interno-->
 
                <?php } } ?>