PHP - suban archivos

   
Vista:

suban archivos

Publicado por alberto (18 intervenciones) el 21/12/2012 09:36:52
Hola :
Estoy creando como práctica a mis estudios autodidactas una web en la que las personas puedan subir archivos mediante un formulario, hasta aquí bien lo iré desgrosando después poco a poco con el código.
El archivo lo subo a una carpeta bien y después a una base de datos mediante sqlite,puesto que es la que estoy utilizando en toda la web.
El problema ,es que no se decirle a la base de datos que me muestre el archivo , txt o docx, le digo que me muestre los megas, extension y nombre y todo bien .Pero me he quedado en el final sin saber mostrar el contenido, no se si me he bloqueado ya con tanto código, pués en mis prácticas no habia trabajado nunca con bases de datos.
Os muestro el código:
FORMULARIO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<body>
 
<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>
INSTALACION
 
//Creamos la conexion-----------------------------------------------------------------------
$conexion=sqlite_open('autorizados.db')or die("No se ha podido realizar la conexion por");
 
//Creamos una consulta y la base de datos---------------------------------------------------
 
$consulta=
<<<SQL
CREATE TABLE descargas
(
id INT PRIMARY KEY ,
ruta_fichero CHAR(255),
comentario CHAR(255)
);


SQL;

1
2
3
4
5
//Lanzamos la consulta-----------------------------------------------------------------------
$resultado=sqlite_exec($conexion,$consulta);
 
//Cerramos la conexion-----------------------------------------------------------------------
sqlite_close($conexion);


FORMULARIO ME LO ENVIA A ENVIAR.PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// 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 = sqlite_open("autorizados.db");
//Establecer consulta------------------------------------------------------------------------------------------------
 
$consulta = "INSERT INTO descargas (ruta_fichero, comentario) VALUES ('" . $destino . "','" . $comentario . "')";
 
$resultado = sqlite_exec($conexion,$consulta);
 if ($resultado) {
  echo "El fichero se ha subido al servidor correctamente\n";
 }
}
else {
echo "Se ha producido un error al subir el fichero\n";
}

Y SE MUESTRA EN DESCARGAS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
echo "
<h1>DESCARGA DE FICHEROS</h1>
";
// Conecta con la Base de Datos----------------------------------------------------------------------
$conexion = sqlite_open('autorizados.db')or die("No se ha podido conectar con la base de datos");
//Establecer la consulta-----------------------------------------------------------------------------
$consulta=
 
 "SELECT ruta_fichero, comentario FROM descargas";
 
 
//Lanzar la consulta---------------------------------------------------------------------------------
 
$resultado = sqlite_query( $conexion,$consulta);
if ($resultado) {
 // Recorre todas las filas de la tabla y carga la información en la página web
 while ($fila = sqlite_fetch_array($resultado)) {
 
  $ruta = $fila["ruta_fichero"];
  $comentario = $fila["comentario"];
 }
}


Por favor ayuda clara estoy totalmente bloqueado y no veo ni las teclas.
Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

suban archivos

Publicado por xve (5512 intervenciones) el 21/12/2012 10:42:49
Hola Alberto, la verdad es que seguir tu código cuesta un poco, al no haber ninguna tabulación, no se ve muy claro donde empiezan y terminan los tags, bucles, etc...

De todas maneras, revisa la instrucción mime_content_type()
http://php.net/manual/es/function.mime-content-type.php

Con ella, podrás crear la cabecera para mostrar el typo de archivo... algo así:

1
2
header("Content-Type: ".mime_content_type($file));
header("Content-Disposition: attachment;filename=nombreArchivoDescargar");


Coméntanos si te sirve, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

suban archivos

Publicado por alberto albert_decas@hotmail.com (18 intervenciones) el 21/12/2012 20:14:14
No acabo de entender como , me dicen que no se puede que un navegador no puede abrir un programa con un formato propietario.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

suban archivos

Publicado por xve (5512 intervenciones) el 22/12/2012 10:32:31
Alberto nos puedes mostrar el código?

Que tipo de archivo es?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

suban archivos

Publicado por alberto albert_decas@hotmail.com (18 intervenciones) el 22/12/2012 19:46:00
Perdón me parece que envié menos datos de la cuenta el archivo es docx , txt tipo word.
Es para que suban archivos y por un formulario enviar el archivo y por medio de un include meterlo
Estoy creando una web de un cole que los profes solo suban el archivo y por medio del include quede directamente incluido , sin necesidad de teclearlo en la página.
O sea creen un archivo de texto y al meterlo en el formulario quede directamente añadido.
Espero explicarme bien.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

suban archivos

Publicado por alberto albert_decas@hotmail.com (18 intervenciones) el 03/01/2013 07:36:05
Bueno he conseguido que si suban e incluso leerlo a traves de la segunda página y solucioné los acentos y ñ y ahora me encuentro en otro problema añadido , si subo texto en formato txt o htm o alguno más, perfecto me lo envia a la segunda página y lo muestra , pero si le adjunto al texto una imagen me la muestra rota.
Te envio el código y por favor haber si me mostrais la salida , gracias de nuevo.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//codigo de formulario-
<form method="POST" action="ver.php" enctype="multipart/form-data">
<div class="estilo_divs">Arxiu: <input type="file" name="archivo" size=50></div>
<div class="estilo_divs"><input type="submit" value="Subir" name="boton_enviar"></div>
</form>
</fieldset>
CODIGO VER.PHP
<?php
 
session_start();
//ESTO ES EL ARCHIVO A LEER
include header('Content-Type: text/html; charset=iso-8859-1').($_FILES['archivo']['tmp_name']);
 
 
 
 
if (isset($_POST['boton_enviar'])){ //aquí validamos si se ha enviado un archivo desde el formulario 
$archivo_nombre= $_FILES["archivo"]["name"]; //aquí se obtiene el nombre del archivo 
$archivo_tamaño = $_FILES["archivo"]["size"]; //tamaño del archivo 
$archivo_temporal = $_FILES["archivo"]["tmp_name"]; //direccion temporal en la que el servidor guarda el archivo antes de copiarlo 
 
 
 
$destino = 'archivos' ; //aquí se define la direccion en la que quieres que se guarden los archivos cuando los subes al servidor 
copy($_FILES['archivo']['tmp_name'],$destino.'/'. $_FILES['archivo']['name']); //esta instruccion es la que copia el archivo de la carpeta temporal a su destino en el servidor 
 
}
 
?>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

suban archivos

Publicado por xve (5512 intervenciones) el 03/01/2013 08:23:53
Hola Alberto, no te entiendo muy bien... que quieres decir con que te la muestra rota??
Podemos ver como la muestras?

Cuando dices que añades un texto a la imagen, te refieres modificar la imagen para que contenga un texto, verdad?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

suban archivos

Publicado por alberto (18 intervenciones) el 03/01/2013 14:18:55
Hola xve
pués

creo un archivo tipo html y me sale todo el texto a ese archivo le inserto una imagen y donde tendría que visualizarse la imagen solo veo el cuadro vacio y una x

Además he incluido para poder ver ,el archivo temporar y supongo que no es lo mejor que habrá que poner en el código para mostrar en pantalla el del archivo
include ($_FILES['archivo']['tmp_name']

Mil gracias por atenderme.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

suban archivos

Publicado por xve (5512 intervenciones) el 03/01/2013 15:23:05
La verdad Alberto, sin ver el código no se que puede ser... nos puedes mostrar el código?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

suban archivos

Publicado por alberto albert_decas@hotmail.com (18 intervenciones) el 03/01/2013 15:52:33
Te lo estoy mostrando no se si no te sale .
te lo muestro de nuevo:

//codigo de formulario-
<form method="POST" action="ver.php" enctype="multipart/form-data">
<div class="estilo_divs">Arxiu: <input type="file" name="archivo" size=50></div>
<div class="estilo_divs"><input type="submit" value="Subir" name="boton_enviar"></div>
</form>
</fieldset>
CODIGO VER.PHP
<?php

session_start();
//ESTO ES EL ARCHIVO A LEER
include header('Content-Type: text/html; charset=iso-8859-1').($_FILES['archivo']['tmp_name']);


if (isset($_POST['boton_enviar'])){ //aquí validamos si se ha enviado un archivo desde el formulario
$archivo_nombre= $_FILES["archivo"]["name"]; //aquí se obtiene el nombre del archivo
$archivo_tamaño = $_FILES["archivo"]["size"]; //tamaño del archivo
$archivo_temporal = $_FILES["archivo"]["tmp_name"]; //direccion temporal en la que el servidor guarda el archivo antes de copiarlo


$destino = 'archivos' ; //aquí se define la direccion en la que quieres que se guarden los archivos cuando los subes al servidor
copy($_FILES['archivo']['tmp_name'],$destino.'/'. $_FILES['archivo']['name']); //esta instruccion es la que copia el archivo de la carpeta temporal a su destino en el servidor

}

?>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

suban archivos

Publicado por xve (5512 intervenciones) el 03/01/2013 16:20:27
Hola Alberto, te pido mil disculpas, pero aquí hay alguna cosa que me falla... me indicas que visualizas un recuadro vacío con una cruz.... cuando aparece un cuadro vacío con una cruz, entiendo que hay en el código algo un <img> apuntando a una imagen que no existe...

pero el código que nos muestras, no muestras nada por pantalla, simplemente copias el archivo... no se ver donde muestras la imagen o haces algún echo ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

suban archivos

Publicado por alberto albert_decas@hotmail.com (18 intervenciones) el 03/01/2013 18:22:40
Ante todo muchas gracias por estar aquí:
Te explico:
Se recoge en el formulario y lo muestro en la segunda pantalla a través de un include

include header('Content-Type: text/html; charset=iso-8859-1').($_FILES['archivo']['tmp_name']);

le digo que me muestre en idioma español encadenado con el archivo temporal del form
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

suban archivos

Publicado por xve (5512 intervenciones) el 03/01/2013 22:19:12
La verdad es que nunca havia visto esto del include header(...... pero de todas maneras, $_FILES['archivo']['tmp_name'] equivale al nombre del archivo temporal, no al contenido del archivo.

Si quieres mostrar el archivo, tienes que abrirlo previamente... puedes utilizar por ejemplo readfile() http://es1.php.net/manual/es/function.readfile.php

Si envias una imagen, y la quieres mostrar, tendrás que cambiar el Contet-Type, ya que tendrás que indicar que envías una imagen, y de que formato es... para ello, puedes utilizar la función mime_content_type() http://es1.php.net/manual/es/function.mime-content-type.php

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

suban archivos

Publicado por alberto albert_decas@hotmail.com (18 intervenciones) el 04/01/2013 06:51:49
La verdad es que hago todo tipo de pruebas, a veces para aprender otras por que no se por donde voy.
Te explico . Estoy creando una web y me gustaría que las personas autorizadas pudieran publicar en ella ,es para una comunidad de aprendizaje y como al no tener ellos conocimientos de dreamweaver ,ni códigos ... hicieran sus archivos con word , texto e imágenes con los temas que crean oportunos y lo graben en una archivo ,entonces entren en la web y mediante un formulario suban el archivo y automáticamente quede publicado.
Estoy probando como puedes ver códigos , pero si sabes algún script o pagina que me pueda ayudar a los pasos a seguir te estaría muy agradecido aunque ya lo estoy por la gran ayuda que das.
Y perdón por el tiempo que te robo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar