Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/06/2006, 01:11
Raules
 
Fecha de Ingreso: mayo-2005
Ubicación: Murcia
Mensajes: 319
Antigüedad: 19 años, 7 meses
Puntos: 0
Como Puedo Ver Los Archivos Que Subo A La Base De Datos

Bueno explico más o menos la intención que tengo y esto esta basado sobre el faq de Cluster sobre subir archivos binarios a la BD
El script que Cluster menciona en el faq está súper bien y es lo que realmente busco.

Tengo un sistema de sesiones, en el cual el usuario entra con uss/pass, y ve todo lo relativo a su usuario.
En un apartado el usuario tiene que enviar un archivo y un comentario a la base de datos y posteriormente me gustaría ver en la página los datos que mente ese usuario.

Bien pues con los códigos que pongo ahora lo sube todo a la base de datos y todo pero la imagen no la puedo ver… eso porque es?

Porque yo lo que quiero es que suba varios archivos en diferentes días, y que lo diferencie con la id del usuario…


Tengo la siguiente estructura en la base de datos:


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

CREATE TABLE soporte (
  Ticket int (3) NOT NULL auto_increment,
  id int(3) 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,
  comentario_admin varchar (255)   NOT NULL
  PRIMARY KEY  (ticket)
) TYPE=MyISAM;
En el codigo donde tengo el formulario tengo lo siguiente:

Formulario.php

Código PHP:
<html>
.....

<?php 
if (isset($_GET['proceso'])){ 
echo 
$_GET['proceso']."<br>"

?>
</p>
<FORM enctype="multipart/form-data" method="post" action="insertar.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>
<p></p><p></p>
<br /><br /><table width="470" height="18" cellpadding="2" cellspacing="2" class="estilotabla">
<tr>
<td colspan="3" width="454" class="estilocelda">SOPORTE</td>
</tr><tr>
<td><?php 
mysql_connect
("localhost","USS","PASS") or die ("no se ha podido conectar a la BD"); 

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

    
$sql "SELECT * FROM soporte WHERE id='".$_SESSION['id']."'"
    
$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['ticket']."\">"
        echo 
"<br> <a href=\"ver.php?id=".$registro['ticket']."\" target=\"_blank\">Nombre archivo:</a> ".$registro['archivo_nombre']; 
        echo 
"<br> Tipo archivo: ".$registro['archivo_tipo']; 
        echo 
"<br> Peso: ".$registro['archivo_peso']." bytes.<br><br>"
    } 

?>
....
</html>
Insertar.php

Código PHP:
<?php 
// INICIAS LA SESION
session_start();
//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: cliente_soporte.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","USS","PASS") or die("No se pudo realizar la conexion con el servidor."); 
mysql_select_db("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 (ticket,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: $HTTP_REFERER");  // si ha ido todo bien 
exit; 
?>

Y el codigo ver.php es el siguiente:

Código PHP:
<?php  

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

    
mysql_connect("localhost","uss","pass") or die ("no se ha podido conectar a la BD");  

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

 
$sql "SELECT * FROM soporte WHERE id='".$_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;  

}  
?>

Ojalá puedan ayudarme o ver que error tengo ......

millones de gracias...

Última edición por Raules; 23/06/2006 a las 11:43 Razón: El titulo no es acoge con lo que tiene el contenido