Foros del Web » Programando para Internet » PHP »

Tutorial ejemplo: Subir archivos a tu BD (guardando en la BD en binario)

Estas en el tema de Tutorial ejemplo: Subir archivos a tu BD (guardando en la BD en binario) en el foro de PHP en Foros del Web. Cita: Iniciado por ortiz Antes que nada, tengo que decir que los 4 scripts estan muy bien explicados. Yo no soy programador y los entiendo ...

  #331 (permalink)  
Antiguo 21/06/2006, 06:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por ortiz
Antes que nada, tengo que decir que los 4 scripts estan muy bien explicados. Yo no soy programador y los entiendo más o menos bien.

Por otro lado, he seguido correctamente el tutorial hasta el momento fatídico, el momento ver_thumbnail.php. Extrae toda la información de la BD correctamente pero, me sale el recuadrito del enlace roto(parece que esto es bastante común). Siguiendo los consejos de búsqueda de errores de Cluster he acotado todos los posibles:

1) Tengo soporte completo de librerias GD:

GD Support enabled
GD Version bundled (2.0.28 compatible)
FreeType Support enabled
FreeType Linkage with freetype
FreeType Version 2.1.4
GIF Read Support enabled
GIF Create Support enabled
JPG Support enabled
PNG Support enabled
WBMP Support enabled
XBM Support enabled

2) La sentencia encargada de recoger el valor del id de la fila de la tabla archivos, lo hace correctamente.

3) La conexión a mi bd es correcta, utilizo un include. [problema!]
4)
Código PHP:
$consulta mysql_query($sql,$cbd) or die(mysql_error()); 
Utilizo esta sentencia para conocer pobiles errores, por si acaso.

[problema!]
Después de todo esto, seguía sin poder ver correctamente los thumbnails supuestamente generados. En esas que me dió por clickar al menu que se genera sobre la imagen del link roto, y me llevó a una pantalla con errores, creados por el mysql_error.
El error concreto era algo extraño pero se deducía que había problemas con el include ("conecta.php"). Así que fui cerrando en cada script la conexión abierta con mysql_close($conexion).

Y entonces funcionó. Ya véis, la parida más grande del mundo. En fin, más vale tarde que nunca.
Gracias por reportar ese problema ..

Realmente según la teoría de PHP .. todos los scripts de PHP es PHP al finalizar la ejecución de estos quien (si no lo hace uno mismo en código) cierra conexiones y mata toda variable en curso activa .. Pero bueno, tomo nota .. pues es buena práctica igualmente cerrar conexiones y liberar memoria de "record-set's" cuando ya no se usen ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #332 (permalink)  
Antiguo 21/06/2006, 06:30
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por August
Hola Cluster

Cuando uso un .gif, en el fondo de la imagen (en los espacios vacios) se ve negro, se puede hacer algo con imagecolortransparent (), si es asi, como se le haria?
Deberías realizar tu preguna en un tema nuevo .. Realmente el tema de generación de GIF es un tema a tratar a parte pues depende mucho de que versión de GD uses si es que dispone de dicho soporte entre otras cosas.

Sería recomendable que generarses PNG's con trasnparencia en lugar de GIF (por lo menos para tratarlos con GD .. ). (por mi parte no me he metido mucho en este tema concreto .. pero según la documentación algo se puede hacer al respecto).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #333 (permalink)  
Antiguo 21/06/2006, 06:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Raules
Como puedo hacer para enviar los archivos a la base de datos con la id del usuario?

Porque en el formulario pongo
Código HTML:
<input type="hidden" NAME="id" VALUE="<?=$_SESSION['id']?>" /> 
y cuando veo la base de datos me lo pone con otra id..

Como puedo solucionarlo?
Realmente no sé por qué propagas una variable de sesión en un formulario bajo un campo oculto cuando perfectamente en tu script que inserta dicho dato puedes usarlo directamente .. para eso es una variable de sesión.

Es decir .. usa en tu INSERT clásico dicha variable $_SESSION['id'] .. (con su session_start() correspondiente en el script que haga el INSERT ...)

Por otro lado .. ten cuidado .. En este ejemplo se usa una variable "id" para otros fines .. intenta no usar los mismos nombres, o cambias el nombre de tu variable de sesión o la que los scripts de ejemplo usan ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #334 (permalink)  
Antiguo 21/06/2006, 06:51
 
Fecha de Ingreso: mayo-2005
Ubicación: Murcia
Mensajes: 319
Antigüedad: 19 años
Puntos: 0
...

Cita:
Iniciado por Cluster
Realmente no sé por qué propagas una variable de sesión en un formulario bajo un campo oculto cuando perfectamente en tu script que inserta dicho dato puedes usarlo directamente .. para eso es una variable de sesión.

Es decir .. usa en tu INSERT clásico dicha variable $_SESSION['id'] .. (con su session_start() correspondiente en el script que haga el INSERT ...)

Por otro lado .. ten cuidado .. En este ejemplo se usa una variable "id" para otros fines .. intenta no usar los mismos nombres, o cambias el nombre de tu variable de sesión o la que los scripts de ejemplo usan ..

Un saludo,
Por ejemplo en el insert que pongo es este y me esta dando error :

Código:
INSERT INTO soporte (id,comentario_cliente, archivo_binario, archivo_nombre, archivo_peso, archivo_tipo) VALUES ('$_SESSION['id']','$comentario_cliente', '$binario_contenido', '$binario_nombre', '$binario_peso', '$binario_tipo')
Que es el insert que utilizo en la pagina de insertar.php que tienes en tu script o donde te refieres para hacerlo?

Perdona por el foyon pero estoy viendo que es un gran script para lo que quiero y me gustaria ver como me queda

Enorahuena por lo que estas haciendo...
  #335 (permalink)  
Antiguo 21/06/2006, 07:02
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
No sé que estructura tiene tu tabla "soporte" .. He de suponer o mejor dicho es lo más sano que ese ID sea un campo autonumérico y único ..

Si tu quieres guardar a su vez ese variable de sesión para otro tipo de relaciones . OK, pero dale un nombre de campo más coherente a lo que realmente significa .. no sé "usuario" .. o "id_usuario" .. o "id_de_lo_que_sea" ...


Realmente aquí ya estás haciendo una adptación y modificación del tutorial básico, intenta si tienes más problemas al respecto iniciar un tema nuevo, expón la estructura de tu tabla y código concreto completo que usas .. + haz referencia a que te basastes en este tutorial de este tema (aunque en el fondo no tienes problemas con lo que este tutorial describe sino con tu adpatación especifica de tu código ..)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #336 (permalink)  
Antiguo 21/06/2006, 07:38
 
Fecha de Ingreso: mayo-2005
Ubicación: Murcia
Mensajes: 319
Antigüedad: 19 años
Puntos: 0
El codigo que tengo es este...

Bueno explico más o menos el funcionamiento de lo que quiero.
Me he creado un pequeño sistema en el cual un usuario que yo de de alta pueda ver sus datos (perfil), pueda ver sus cuentas, enviar un soporte que es lo que estoy intentando hacer con este script que viendo el funcionamiento veo que sirve..

Por ejemplo simplemente quiero que envie un archivo y un texto plano a la base de datos que es lo que consiste este script, pero que me lo guarde con la id del usuario que es la misma id que tengo en la tabla soporte(tiene el mismo número porque se lo pongo yo manualmente)..

Es decir que en la misma id habrá varios archivos y comentarios y que a la hora de hacer por ejemplo la consulta para ver los archivos se veran con la condicion de ascendente para ver los ultimos primero o viceversa.

Esta es la tabla que tengo en la base de datos:


Código:
#
# Estructura de tabla para la tabla `soporte`
#

CREATE TABLE soporte (
  id int(10) NOT NULL auto_increment,
  fecha date NOT NULL,
  archivo_binario blob NOT NULL,
  archivo_nombre varchar(255) NOT NULL default '',
  archivo_peso varchar(15) NOT NULL default '',
  archivo_tipo varchar(25) NOT NULL default '',
  comentario_cliente varchar(255) NOT NULL default '',
  comentario_administador varchar(255) NOT NULL default '',
  PRIMARY KEY  (id)
) TYPE=MyISAM;
En el formulario tengo lo siguiente:

Formulario.php

Código PHP:
<HTML> 
<HEAD> 
<TITLE>Binario a BD</TITLE> 
</HEAD> 
<BODY> 
<?php 
if (isset($_GET['proceso'])){ 
echo 
$_GET['proceso']."<br>"

?> 
<FORM enctype="multipart/form-data" method="post" action="insertar_soporte.php">
<table width="470" height="18" cellpadding="2" cellspacing="2" class="estilotabla"><tr><td colspan="2" class="estilocelda">ENVIAR SOPORTE </td></tr><tr><td></td><td>&nbsp;</td></tr><tr>
<td width="128">Comentarios:</td>
<td width="326"><textarea name="comentario_cliente"></textarea>
</td>
</tr><tr><td>Archivo:</td>
<td><INPUT type="file" name="archivo" size="30"> </td>
</tr><tr><td>&nbsp;</td><td>
<INPUT type="submit" name="submit"value="Enviar"> </td>
</tr></table></form>
</BODY> 
</HTML>
Y en el codigo insertar_soporte.php tengo el siguiente codigo:

Código PHP:
<?php 
//Primero, arranca el bloque PHP y checkea si el archivo tiene nombre.  Si no fue asi, te remite de nuevo al formulario de inserción: 
// No se comprueba aqui si se ha subido correctamente. 
if (empty($_FILES['archivo']['name'])){ 
header("location: formulario.php?proceso=falta_indicar_fichero"); //o como se llame el formulario .. 
exit; 


//establece una conexión con la base de datos. 
$conexion mysql_connect("localhost","","") or die("No se pudo realizar la conexion con el servidor."); 
mysql_select_db("tu_bd",$conexion) or die("No se puede seleccionar BD"); // tu_bd es el nombre de la Base de datos .. por siaca. 

// archivo temporal (ruta y nombre). 
$binario_nombre_temporal=$_FILES['archivo']['tmp_name'] ; 

// leer del archvio temporal .. el binario subido. 
// "rb" para Windows .. Linux parece q con "r" sobra ... 
$binario_contenido addslashes(fread(fopen($binario_nombre_temporal"rb"), filesize($binario_nombre_temporal))); 

// Obtener del array FILES (superglobal) los datos del binario .. nombre, tabamo y tipo. 
$binario_nombre=$_FILES['archivo']['name']; 
$binario_peso=$_FILES['archivo']['size']; 
$binario_tipo=$_FILES['archivo']['type']; 

//insertamos los datos en la BD. 
$consulta_insertar " INSERT INTO soporte (id,comentario_cliente, archivo_binario, archivo_nombre, archivo_peso, archivo_tipo) VALUES ('$_SESSION['id']','$comentario_cliente', '$binario_contenido', '$binario_nombre', '$binario_peso', '$binario_tipo')"
mysql_query($consulta_insertar,$conexion) or die("No se pudo insertar los datos en la base de datos."); 
header("location: formulario.php");  // si ha ido todo bien 
exit; 
?>
No se si me explico bien porque estoy empezando y no tengo mucha idea...

Estoy haciendo algo mal? que es lo que tengo que añadir?

Gracias Cluster y perdona por darte el foyon
  #337 (permalink)  
Antiguo 21/06/2006, 08:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Como te decía antes .. con esta definición de tu tabla para el campo "id":

id int(10) NOT NULL auto_increment,

No corresponde que pretendas insertar en dicho campo un valor "X" .. ese campo se genera autonumérico .. TU con tu código no lo tocas para nada ...

A lo sumo como te decía antes también .. crea un campo más en esa tabla que sea tu "ID" própio. Será en ese campo que crees donde hagas tu insert con tu variable de sesión ..

Código PHP:
$consulta_insertar " INSERT INTO soporte (id,comentario_cliente, archivo_binario, archivo_nombre, archivo_peso, archivo_tipo,id_tuyo) VALUES ('','$comentario_cliente', '$binario_contenido', '$binario_nombre', '$binario_peso', '$binario_tipo','".$_SESSION['tu_id']."')"
Y recuerda que te hará falta un "session_Start()" en ese script para acceder a tu variable de sesión (como lo harás en otros scripts ya de tu aplicación ...)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #338 (permalink)  
Antiguo 21/06/2006, 08:53
 
Fecha de Ingreso: mayo-2005
Ubicación: Murcia
Mensajes: 319
Antigüedad: 19 años
Puntos: 0
Entonces añado en la tabla de la base de datos esto por ejemplo:

Código:
CREATE TABLE soporte (
  id int(10) NOT NULL,
  id_soporte (10) NOT NULL auto_increment,
  fecha date NOT NULL,
  archivo_binario blob NOT NULL,
  archivo_nombre varchar(255) NOT NULL default '',
  archivo_peso varchar(15) NOT NULL default '',
  archivo_tipo varchar(25) NOT NULL default '',
  comentario_cliente varchar(255) NOT NULL default '',
  comentario_administador varchar(255) NOT NULL default '',
  PRIMARY KEY  (id_soporte)
) TYPE=MyISAM;
Añado el id soporte y la consulta la pondría mas o menos asi..

Código PHP:
$consulta_insertar " INSERT INTO soporte (id_soporte,comentario_cliente, archivo_binario, archivo_nombre, archivo_peso, archivo_tipo,id) VALUES ('','$comentario_cliente', '$binario_contenido', '$binario_nombre', '$binario_peso', '$binario_tipo','".$_SESSION['id']."')"
Pero lo que no me queda claro es donde puedo poner la variable sesion start..

La podría poner por ejemplo en el codigo de insertar?

insertar.php

Código PHP:
<?php  
//defino una sesion y guardo datos 
session_start(); 
$_SESSION['id']= $id;

//Primero, arranca el bloque PHP y checkea si el archivo tiene nombre.  Si no fue asi, te remite de nuevo al formulario de inserción:  
// No se comprueba aqui si se ha subido correctamente.  
if (empty($_FILES['archivo']['name'])){  
header("location: formulario.php?proceso=falta_indicar_fichero"); //o como se llame el formulario ..  
exit;  
}  

//establece una conexión con la base de datos.  
$conexion mysql_connect("localhost","","") or die("No se pudo realizar la conexion con el servidor.");  
mysql_select_db("tu_bd",$conexion) or die("No se puede seleccionar BD"); // tu_bd es el nombre de la Base de datos .. por siaca.  

// archivo temporal (ruta y nombre).  
$binario_nombre_temporal=$_FILES['archivo']['tmp_name'] ;  

// leer del archvio temporal .. el binario subido.  
// "rb" para Windows .. Linux parece q con "r" sobra ...  
$binario_contenido addslashes(fread(fopen($binario_nombre_temporal"rb"), filesize($binario_nombre_temporal)));  

// Obtener del array FILES (superglobal) los datos del binario .. nombre, tabamo y tipo.  
$binario_nombre=$_FILES['archivo']['name'];  
$binario_peso=$_FILES['archivo']['size'];  
$binario_tipo=$_FILES['archivo']['type'];  

//insertamos los datos en la BD.  
$consulta_insertar " INSERT INTO soporte (id,comentario_cliente, archivo_binario, archivo_nombre, archivo_peso, archivo_tipo) VALUES ('$_SESSION['id']','$comentario_cliente', '$binario_contenido', '$binario_nombre', '$binario_peso', '$binario_tipo')";  
mysql_query($consulta_insertar,$conexion) or die("No se pudo insertar los datos en la base de datos.");  
header("location: formulario.php");  // si ha ido todo bien  
exit;  
?>
Quedaría asi bien con lo que me estas explicando...
perdona por el foyon cluster...
  #339 (permalink)  
Antiguo 21/06/2006, 09:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
El "Id" de esa tabla .. dejalo como estaba, y adade tu campo própio .. eres tu el que va a gestionar el valor de ese campo con tu variable de sesión ..:

Cita:
id int(10) NOT NULL auto_increment,
id_soporte (10) NOT NULL,
Cita:
Añado el id soporte y la consulta la pondría mas o menos asi..
Tampoco es correcto .. realmente no sé si ves claro con funciona una sentencia de SQL "INSERT (podrías ver algún que otro tutorial de PHP y de Mysql .. te hace falta .. en las FAQ's lo puedes encontrar).

Sería algo tipo:
Código PHP:
$consulta_insertar " INSERT INTO soporte (id,id_soporte,comentario_cliente, archivo_binario, archivo_nombre, archivo_peso, archivo_tipo,id) VALUES ('','".$_SESSION['id']."','$comentario_cliente', '$binario_contenido', '$binario_nombre', '$binario_peso', '$binario_tipo')"
Cita:
Pero lo que no me queda claro es donde puedo poner la variable sesion start..
session_start() no es una variable .. sino una "función .. :
www.php.net/session_start (please .. hechale una miradita ..)

Cita:
$_SESSION['id']= $id;
Pero .. si usas $_SESSION['id'] .. DONDE! declaras esa variable de sesión ..?

En el script que realizar el INSERT, NO tienes que hacer ningúna asignación de variables como esa .. para eso en el INSERT (sentencia SQL que vas a ejecutar) según el ejemplo que te expongo en este mensaje .. ya lo accedo directamente .. Sólo es necesario al principio de ese script la función session_start() tal cual ya la pusistes.


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #340 (permalink)  
Antiguo 21/06/2006, 12:52
 
Fecha de Ingreso: mayo-2005
Ubicación: Murcia
Mensajes: 319
Antigüedad: 19 años
Puntos: 0
no me muestra la imagen

Ya he conseguido subir la imagen y todo a la base de datos pero ahora como puedo ver la imagen?

Se ve el nombre de la imagen y todo pero la imagen no puede verse eso porque es?
O que tengo que hacer?

Última edición por Raules; 21/06/2006 a las 13:56
  #341 (permalink)  
Antiguo 21/06/2006, 15:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Raules
Ya he conseguido subir la imagen y todo a la base de datos pero ahora como puedo ver la imagen?

Se ve el nombre de la imagen y todo pero la imagen no puede verse eso porque es?
O que tengo que hacer?
Realmente si no especificas al menos que estás intentando probar o como pretendes ver tus imagenes .. no sé que más decir al respecto.

Sólo te digo que en principio deberías haber probado el tutorial y sus scripts tal cual están .. si eso te funciona y lo llegas a entender .. ahí haces tus modificaciones. No sé en que punto estarás ahora .. pero debes ser más especifico y detallado cuando reportas un problema ..(así no acabaremos nunca ..).

Por otro lado .. ya tienes más problemas de "adpatación" según tus necesidades de lo que este tutorial comenta que del uso en sí y "tal cual" se entrega este tutorial.

Intenta realizar tu pregunta en un tema nuevo .. haz mención que usas o te basas en este tutorial y sobre todo adjunta tu "tabla" la estructura de la misma (para que se tenga referencia).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #342 (permalink)  
Antiguo 22/06/2006, 06:21
 
Fecha de Ingreso: mayo-2005
Ubicación: Murcia
Mensajes: 319
Antigüedad: 19 años
Puntos: 0
Perdona Cluster he puesto como me dijiste un nuevo tema en la siguiente url

http://www.forosdelweb.com/f18/como-puedo-ver-archivos-que-subo-base-datos-403914/


Por favor si puedes ayudarme te lo agradezco mucho de verdad

Gracias
  #343 (permalink)  
Antiguo 26/06/2006, 13:44
 
Fecha de Ingreso: mayo-2005
Ubicación: Murcia
Mensajes: 319
Antigüedad: 19 años
Puntos: 0
Cluster,
abria alguna forma de que se pudiera subir y ver cual quier tipo de archivo...?
Como se podria hacer?
  #344 (permalink)  
Antiguo 27/06/2006, 06:57
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Raules
Cluster,
abria alguna forma de que se pudiera subir y ver cual quier tipo de archivo...?
Como se podria hacer?
En principio .. el sistema en sí: subir un archivo y almacenarlo en la BBDD como está .. se presta para que subas cualquier tipo de archivo.

El hecho de que "veas" el archivo o se entregue para su descarga depende de las cabeceras HTTP empleadas en los ejemplos. Esto es parte del protocolo HTTP.

Lo principal sería ajustar la propiedad "Content-disposition" a:

Para ver un archivo en línea (siempre y cuando tenga el navegador que lo pretenda ver el plug-in asociado ..):
Código PHP:
$content_disposition="inline"
Y como está ahora en los ejemplos .. si quieres ofrecer el archivo a descargar .. forzar la descarga:
Código PHP:
$content_disposition="attachment"
También hay que indicar el tipo de archivo que envias ("Content-type") como ya hacen los ejemplos .. eso ajustará e indicará que "plug-in" tendrá que llamar tu navegador para visualizar el tipo de archivo que envies a este.

Código PHP:
header("Content-Type: ".$tipo_mime_archivo); 
header("Content-Disposition: ".$content_disposition."; filename=\"".trim($filename)."\""); 
(Las variables usadas como veras no son equivalentes a las usadas en este "tutorial" .. tendrás que adaptarlo tu .. Te recomiendo que leas algo sobre el protocolo HTTP para sacarle más partido e implementar otras funcionalidades de este tipo ..).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #345 (permalink)  
Antiguo 27/06/2006, 08:10
Avatar de elcamaleon007  
Fecha de Ingreso: julio-2004
Ubicación: Asunción - Paraguay
Mensajes: 256
Antigüedad: 19 años, 9 meses
Puntos: 0
muy bueno!!!!
y como hago que para que cuando subo la img me mande a un link como listar, donde muestre solo la img que subi y tenga dos links o botones que digan "confirmar" o "eliminar" ?? y levanten o borren la img de la BD??? ^^
  #346 (permalink)  
Antiguo 27/06/2006, 08:36
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por elcamaleon007
muy bueno!!!!
y como hago que para que cuando subo la img me mande a un link como listar, donde muestre solo la img que subi y tenga dos links o botones que digan "confirmar" o "eliminar" ?? y levanten o borren la img de la BD??? ^^
Deberías hacer tu pregunta en un tema nuevo ..

Sólo te comento que los datos (tus archivos que subes a la BBDD) quedan en un campo de la misma .. así que si sabes ya operar con registros en tus BBDD y sabes "borrar" un registro dado (por su ID) se trata simplemente de hacer un "DELETE" a dicho registro.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #347 (permalink)  
Antiguo 27/06/2006, 08:56
Avatar de elcamaleon007  
Fecha de Ingreso: julio-2004
Ubicación: Asunción - Paraguay
Mensajes: 256
Antigüedad: 19 años, 9 meses
Puntos: 0
y acaso si lo posteo aca no es mas amplio el tutorial??????
lo unico que necesito es esto

<?php
//----esto en el listar_imagenes.php

$sql = "SELECT id,archivo_nombre,archivo_tipo,archivo_peso FROM archivos";
$consulta = mysql_query($sql) or die ("No se pudo ejecutar la consulta");

While ($registro=mysql_fetch_assoc($consulta)){
echo "<img src=\"ver.php?id=".$registro['id']."\">";
echo "<br> Nombre archivo: ".$registro['archivo_nombre'];
echo "<br> Tipo archivo (MIME formato): ".$registro['archivo_tipo'];
echo "<br> Peso: ".$registro['archivo_peso']." bytes.<br><br>";
//aca un link que me permita borrar la imagen
}

?>
  #348 (permalink)  
Antiguo 27/06/2006, 09:08
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por elcamaleon007
y acaso si lo posteo aca no es mas amplio el tutorial??????
lo unico que necesito es esto

<?php
//----esto en el listar_imagenes.php

$sql = "SELECT id,archivo_nombre,archivo_tipo,archivo_peso FROM archivos";
$consulta = mysql_query($sql) or die ("No se pudo ejecutar la consulta");

While ($registro=mysql_fetch_assoc($consulta)){
echo "<img src=\"ver.php?id=".$registro['id']."\">";
echo "<br> Nombre archivo: ".$registro['archivo_nombre'];
echo "<br> Tipo archivo (MIME formato): ".$registro['archivo_tipo'];
echo "<br> Peso: ".$registro['archivo_peso']." bytes.<br><br>";
//aca un link que me permita borrar la imagen
}

?>
Bueno ... haz tu pregunta donde quieras. Sólo te comento una vez más que el tutorial explica y gestiona archivos en forma binaria . .como si se tratase de otro registro más en tus BBDD ... así que acciones como "borrar" y demás son exactamente iguales que en el uso común de tu BBDD.

Te preguntaba antes que si sabes borrar un registro de tu BBDD por un ID dado? ..

Te comento esto por qué es la misma filosofía ..

El "link" que buscas es lo mismo que de ver.php y en el fondo es el mismo script .. salvo que ahí haces un:

Código PHP:
$sql="DELETE FROM tabla WHERE ID='".$_GET['id']."'"
Esa es la filosofía .. El tema de poner un "alert" para confirmar si se borra o no .. mejor consulta en el foro de Javacript (se trata de evitar con javascrip que se continue la ejecución de tu link o no ...)

(no recuerdo el nombre de las variables ni campos de las tablas implicadas ..).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #349 (permalink)  
Antiguo 27/06/2006, 09:27
Avatar de elcamaleon007  
Fecha de Ingreso: julio-2004
Ubicación: Asunción - Paraguay
Mensajes: 256
Antigüedad: 19 años, 9 meses
Puntos: 0
Gracias Cluster ^^
  #350 (permalink)  
Antiguo 28/06/2006, 09:40
Avatar de elcamaleon007  
Fecha de Ingreso: julio-2004
Ubicación: Asunción - Paraguay
Mensajes: 256
Antigüedad: 19 años, 9 meses
Puntos: 0
CLuuuuusssteeeerrrr tengo algun error ak.. cual es???

Código PHP:
<?php

//------Conexion------------------
$conexion mysql_connect("localhost","root","") or die("No se pudo realizar la conexion con el servidor.");
mysql_select_db("BD",$conexion) or die("No se puede seleccionar BD");
//------Conexion------------------

// archivo temporal (ruta y nombre).
$binario_nombre_temporal=$_FILES['archivo']['tmp_name'] ;

// leer la foto en binarios
$binario_contenido addslashes(fread(fopen($binario_nombre_temporal"rb"), filesize($binario_nombre_temporal)));

// traer valores del form
$nombre $HTTP_POST_VARS["nombre"];
$nacimiento $HTTP_POST_VARS["nacimiento"];
$estudios $HTTP_POST_VARS["estudios"];
$nacionalidad $HTTP_POST_VARS["nacionalidad"];
$comentario $HTTP_POST_VARS["comentario"];

//insertar datos en BD.
$consulta_insertar "INSERT INTO alumnos (id, foto, nombre, nacimiento, estudios, nacionalidad, comentario) VALUES ('',     '$binario_contenido', '$nombre', '$nacimiento', '$estudios', '$nacionalidad', '$comentario')";
mysql_query($consulta_insertar,$conexion) or die("No se pudo insertar los datos en la base de datos.");

header("location: datos.php");  // si todo bien
exit;
?>

Última edición por Cluster; 28/06/2006 a las 09:58
  #351 (permalink)  
Antiguo 28/06/2006, 10:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por elcamaleon007
CLuuuuusssteeeerrrr tengo algun error ak.. cual es???

Código PHP:
<?php

//------Conexion------------------
$conexion mysql_connect("localhost","root","") or die("No se pudo realizar la conexion con el servidor.");
mysql_select_db("BD",$conexion) or die("No se puede seleccionar BD");
//------Conexion------------------

// archivo temporal (ruta y nombre).
$binario_nombre_temporal=$_FILES['archivo']['tmp_name'] ;

// leer la foto en binarios
$binario_contenido addslashes(fread(fopen($binario_nombre_temporal"rb"), filesize($binario_nombre_temporal)));

// traer valores del form
$nombre $HTTP_POST_VARS["nombre"];
$nacimiento $HTTP_POST_VARS["nacimiento"];
$estudios $HTTP_POST_VARS["estudios"];
$nacionalidad $HTTP_POST_VARS["nacionalidad"];
$comentario $HTTP_POST_VARS["comentario"];

//insertar datos en BD.
$consulta_insertar "INSERT INTO alumnos (id, foto, nombre, nacimiento, estudios, nacionalidad, comentario) VALUES ('',     '$binario_contenido', '$nombre', '$nacimiento', '$estudios', '$nacionalidad', '$comentario')";
mysql_query($consulta_insertar,$conexion) or die("No se pudo insertar los datos en la base de datos.");

header("location: datos.php");  // si todo bien
exit;
?>
Es una adivinanza?

Si no detallas o reportas algún problema en concreto .. es complicado ver el problema.

Sólo unos comentarios:
* En mi ejemplos del tutorial no accedo a las variables externas (las de tus formularios) por $HTTP_POST_VARS .. sino por sus arrays asociados: $_POST y equivalentes ...

* Según el INSERT que haces .. estás omitiendo un montón de datos sobre la imagen -necesarios- para las funcionalidades de descargas de esos archivos o de visualización .. Me refiero a que estás descartando por completo el "type" .. el "size" y otra información sobre el archivo ...

Con esos "problemas" y sin reportar el problema concreto que tienes realmente me complica dar algún consejo o solución sobre tu problema concreto.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #352 (permalink)  
Antiguo 28/06/2006, 12:20
Avatar de elcamaleon007  
Fecha de Ingreso: julio-2004
Ubicación: Asunción - Paraguay
Mensajes: 256
Antigüedad: 19 años, 9 meses
Puntos: 0
bueno..ya lo solucione muchas grax! ^^
  #353 (permalink)  
Antiguo 28/06/2006, 12:37
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por elcamaleon007
bueno..ya lo solucione muchas grax! ^^
Pues no está de más que indiques cual era tu problema .. aunque no tenga nada que ver con el código que expusistes ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #354 (permalink)  
Antiguo 28/06/2006, 13:40
 
Fecha de Ingreso: mayo-2005
Ubicación: Murcia
Mensajes: 319
Antigüedad: 19 años
Puntos: 0
Cita:
Iniciado por Cluster
En principio .. el sistema en sí: subir un archivo y almacenarlo en la BBDD como está .. se presta para que subas cualquier tipo de archivo.

El hecho de que "veas" el archivo o se entregue para su descarga depende de las cabeceras HTTP empleadas en los ejemplos. Esto es parte del protocolo HTTP.

Lo principal sería ajustar la propiedad "Content-disposition" a:

Para ver un archivo en línea (siempre y cuando tenga el navegador que lo pretenda ver el plug-in asociado ..):
Código PHP:
$content_disposition="inline"
Y como está ahora en los ejemplos .. si quieres ofrecer el archivo a descargar .. forzar la descarga:
Código PHP:
$content_disposition="attachment"
También hay que indicar el tipo de archivo que envias ("Content-type") como ya hacen los ejemplos .. eso ajustará e indicará que "plug-in" tendrá que llamar tu navegador para visualizar el tipo de archivo que envies a este.

Código PHP:
header("Content-Type: ".$tipo_mime_archivo); 
header("Content-Disposition: ".$content_disposition."; filename=\"".trim($filename)."\""); 
(Las variables usadas como veras no son equivalentes a las usadas en este "tutorial" .. tendrás que adaptarlo tu .. Te recomiendo que leas algo sobre el protocolo HTTP para sacarle más partido e implementar otras funcionalidades de este tipo ..).

Un saludo,
Esque yo por ejemplo pongo en el codigo de ver.php esto

Código PHP:
header("Content-Type: $tipo");  
header("Expires: 0");  
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
Que en teoria con esto me dejaria ver cualquier archivo, segun he visto en algunas preguntas del foro...,
pero nose el problema cual es que no me veo el archivo que subo a la base de datos, por ejemplo puedo ver los archivos de imagen pero de texto no(txt, doc...) O estoy haciendo algo mal?
Estoy utilizando el mismo codigo de este faq pero sin los thumbails.
  #355 (permalink)  
Antiguo 28/06/2006, 14:04
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Raules

Esque yo por ejemplo pongo en el codigo de ver.php esto


Código PHP:
header("Content-Type: $tipo");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");


Que en teoria con esto me dejaria ver cualquier archivo, segun he visto en algunas preguntas del foro...,
pero nose el problema cual es que no me veo el archivo que subo a la base de datos, por ejemplo puedo ver los archivos de imagen pero de texto no(txt, doc...) O estoy haciendo algo mal?
Estoy utilizando el mismo codigo de este faq pero sin los thumbails.
Esas cabeceras en concreto no ajustan más que propiedades sobre el caché de los datos que generas a nivel de cliente (navegador) o como este los tiene que tratar en ese aspecto .. pero nada que ver con ver "en linea" archivos (de todo tipo o los que tu navegador reconozca)

Las cabeceras en concreto que permiten ver o no el archivo las indico en el mensaje que mencionas. Es decir .. el "juego" está en las cabeceras: Content-Type y Content-Disposition.

Si tienes problemas .. por favor indica todo el código que uses completo .. no omitas nada.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #356 (permalink)  
Antiguo 28/06/2006, 14:26
 
Fecha de Ingreso: mayo-2005
Ubicación: Murcia
Mensajes: 319
Antigüedad: 19 años
Puntos: 0
Cita:
Iniciado por Cluster
Esas cabeceras en concreto no ajustan más que propiedades sobre el caché de los datos que generas a nivel de cliente (navegador) o como este los tiene que tratar en ese aspecto .. pero nada que ver con ver "en linea" archivos (de todo tipo o los que tu navegador reconozca)

Las cabeceras en concreto que permiten ver o no el archivo las indico en el mensaje que mencionas. Es decir .. el "juego" está en las cabeceras: Content-Type y Content-Disposition.

Si tienes problemas .. por favor indica todo el código que uses completo .. no omitas nada.

Un saludo,
Yo tengo puesto el siguiente codigo en ver.php
Código PHP:
<?php 
header
("Content-Type: ".$archivo_tipo);  
header("Content-Disposition: ".$content_disposition."; filename=\"".trim($filename)."\"");

if(isset(
$_GET['ticket'])) { 

    
// you may have to modify login information for your database server: 
    
$conexion=mysql_connect("localhost","xxx","xxx") or die ("no se ha podido conectar a la BD"); 

    
mysql_select_db("xxx") or die ("no se ha podido seleccionar la BD"); 

    
$sql "SELECT * FROM soporte WHERE ticket='".$_GET['ticket']."'"

    
$consulta mysql_query($sql,$conexion); 

    
$datos mysql_result($consulta,0,"archivo_binario"); 
    
$tipo mysql_result($consulta,0,"archivo_tipo"); 

    
header("Content-type: $tipo"); 
    echo 
$datos


?>
Y con esto no puedo ver el tipo de texto por ejemplo que es el que utilizare mas o menos de .txt o .doc, las imagenes si las ve perfectamente.

Aunque si dices la posibilidad de poder descargar el codigo que sera mas comodo que verlo directamente ay pues tb pero entonces donde tendría que poner :
Código PHP:
$content_disposition="attachment"
nose estoy haciendo algo mal en la estructura del codigo php pero no averiguo muy bien donde es, parte porque soy un inutil novato y estoy intentando hacer una cosa que nose si se puede hacer...

Sabrias decirme que estoy haciendo bien, sabiendo la intencion que quiero, que es ver o descargar el archivo que este en la base de datos de tipo .txt o .doc
  #357 (permalink)  
Antiguo 28/06/2006, 15:35
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Estas cabeceras no están colocadas bien:

header("Content-Type: ".$archivo_tipo);
header("Content-Disposition: ".$content_disposition."; filename=\"".trim($filename)."\"");

Fijate donde generas "$archivo_tipo" y donde la defines ..tampoco coincide el nombre .. tu usas $tipo no "$archivo_tipo" .. igual pasa con la otra variable $filename que no existe en ese código!. Esa variable es el nombre del archivo (tendrás que obtenerla de tu consulta a tu BBDD ..).

Fijate bien en esos detalles . .aunque uno no sepa que hace el código .. ya sabes que $algo es una variable .. si no aparece en tu código te debes preguntar "de donde la tendría que obtener" ..

Como pretendes ver los archivos "en linea" (no entregarlos a descargar) .. debes usar "inline" (no "attachment") .. Todo quedaría algo así (no lo he probado ...):

Código PHP:
<?php  

if(isset($_GET['ticket'])) {  

    
// you may have to modify login information for your database server:  
    
$conexion=mysql_connect("localhost","xxx","xxx") or die ("no se ha podido conectar a la BD");  

    
mysql_select_db("xxx") or die ("no se ha podido seleccionar la BD");  

    
$sql "SELECT * FROM soporte WHERE ticket='".$_GET['ticket']."'";  

    
$consulta mysql_query($sql,$conexion);  

    
$datos mysql_result($consulta,0,"archivo_binario");  
    
$tipo mysql_result($consulta,0,"archivo_tipo");  
    
$filename mysql_result($consulta,0,"archivo_nombre"); // no recuerdo si "archivo_nombre" es el nombre del campo que contiene dicho dato .. revisalo!  
   
    
header("Content-Type: ".$tipo);   
    
header("Content-Disposition: inline; filename=\"".trim($filename)."\""); 

    echo 
$datos;  

}  
?>

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #358 (permalink)  
Antiguo 28/06/2006, 16:39
 
Fecha de Ingreso: mayo-2005
Ubicación: Murcia
Mensajes: 319
Antigüedad: 19 años
Puntos: 0
No hace nada por lo menos con los archivos de texto, simplemente me lleva a la pagina de listar.php y de mala forma no sale ningun error ni nada..

he puesto tal cual me has dicho tu el codigo y no va aunque he visto que as puesto

Código PHP:
header("Content-Type: ".$tipo); 
y no funcionaba entonces pensaba yo que seria mejor ponerlo de esta forma:

Código PHP:
header("Content-Type: $tipo"); 
y aun así tampoco va..., y si me pusiera algun error o algo vale pero esque la verdad que no pone error ninguno.
  #359 (permalink)  
Antiguo 29/06/2006, 10:31
Avatar de ing_aprendiz  
Fecha de Ingreso: septiembre-2005
Mensajes: 136
Antigüedad: 18 años, 7 meses
Puntos: 0
hola cluster gracias por tu tutorial la verdad jace rato que estaba buscando algo así, por otro lado puedes ayudarme con lo siguiente: necesito pasar el valor de una variable en tes paginas me explico luego de registrar el proyecto pasas ese id a la pagina formulario.php (donde subo los archivos a la bd) y alli lo pasa pero tambien necesito que me la pase de formulario.php a insertar.php (para hacer el insert en la base de datos) pero no me lo pasa tu podrias decirme como hago esto.

gracias por tu ayuda y espero pronta respuesta
  #360 (permalink)  
Antiguo 29/06/2006, 14:09
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Raules
No hace nada por lo menos con los archivos de texto, simplemente me lleva a la pagina de listar.php y de mala forma no sale ningun error ni nada..

he puesto tal cual me has dicho tu el codigo y no va aunque he visto que as puesto

Código PHP:
header("Content-Type: ".$tipo); 
y no funcionaba entonces pensaba yo que seria mejor ponerlo de esta forma:

Código PHP:
header("Content-Type: $tipo"); 
y aun así tampoco va..., y si me pusiera algun error o algo vale pero esque la verdad que no pone error ninguno.
Comenta las líneas referentes a header() y observa a ver si ves algún mensaje de error ..

Podría ser también que PHP no esté mostrando mensajes de error por estar desactivado. Revisalo o fuerzalo usando:

error_reporting (función o por configuración de php.ini) y también revisa en tu php.ini si tienes acceso la directiva: display_errors (debe estar a ON).

Si no veo mensaje de error .. realmente es complicado ver que puede suceder (además que no tengo tampoco oportunidad de probar exactamente con tus scripts ni menos con los datos que tu BBDD almacenó al registrar tus archivos ...).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado

SíEste tema le ha gustado a 44 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 21:32.