Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/03/2005, 15:40
demis57
 
Fecha de Ingreso: febrero-2002
Ubicación: Lima
Mensajes: 48
Antigüedad: 23 años, 2 meses
Puntos: 0
Me sale ? al guardar imágen en BD MySQL

Estimados amigos, estoy al borde de la desesperación con un código que ya use previamente en un sitio, sólo le cambiado algunas variables y datos adicionales de la tabla y no me funciona por nada del mundo

Lo que quiero, es insertar una imágen como un Blob en una BD MySQL, mi tabla tiene la siguiente estructura:

Cita:
CREATE TABLE `noticias` (
`id_noticia` int(4) NOT NULL auto_increment,
`autor` varchar(255) default NULL,
`titulo` varchar(255) default NULL,
`categoria` varchar(255) default NULL,
`fecha` datetime NOT NULL default '0000-00-00 00:00:00',
`noticia` blob,
`imagen_binario` blob,
`imagen_nombre` varchar(255) default NULL,
`imagen_peso` varchar(15) default NULL,
`imagen_tipo` varchar(15) default NULL,
KEY `id_noticia` (`id_noticia`)
) TYPE=MyISAM AUTO_INCREMENT=6 ;
Y mi código para guardar lo obtenido desde el formulario es el siguiente:

Código PHP:
    include("conex.php");
    $connect = conectarse();
    elegir();
        
if ($HTTP_POST_VARS)
    {
        //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'])){
        echo "Error, no se encontró la imágen"; //o como se llame el formulario ..
        exit;
        }
        
        // archivo temporal (ruta y nombre).
         $imagen_nombre_temporal=$_FILES[archivo][tmp_name] ;
        
        // leer del archvio temporal .. el binario subido.
        // "rb" para Windows .. Linux parece q con "r" sobra ...
        $imagen_contenido = addslashes(fread(fopen($imagen_nombre_temporal, "rb"), filesize($imagen_nombre_temporal)));
        
        // Obtener del array FILES (superglobal) los datos del binario .. nombre, tamaño y tipo.
        $imagen_nombre=$_FILES[archivo][name];
        $imagen_peso=$_FILES[archivo][size];
        $imagen_tipo=$_FILES[archivo][type];

        //recibimos las variables enviadas por el formulario
        $titulo=$_POST[titulo];
        $autor=$_POST[autor];
        $categoria=$_POST[categoria];
        $articulo=$_POST[articulo];
        
        //insertamos los registros almacenados en las variables
        $consulta = "INSERT INTO noticias VALUES (NULL,'$autor','$titulo','$categoria',NOW(),'$articulo', '$imagen_contenido', '$imagen_nombre', '$imagen_peso', '$imagen_tipo')";
        $grabar = mysql_query($consulta,$connect);        
        if($grabar){
        ?><script language="JavaScript">window.location="noticias_admin.php"</script><?php }
        else{
        echo 
"Se ha producido un error al publicar la noticia.<BR>Vuelve a Intentarlo.";
        }
    }
Puede que me falte cerrar algún { } por ahí, error de copiar y pegar.
El asunto es que el código corre, pero a la hora de revisar con el PhpMyAdmin el registro recien ingresado, en vez de aparecer X y el lapiz para borrar y editar respectivamente, sale un signo de interrgogación (?).
El problema está definitivamente en el campo imagen_binario, pues he probado insertando todos los demás campos menos ese, y no da esos ? ?, recien los da cuando ingreso ese campo diferente de NULL. Ahora, para tener una mejor referencia, les cuento que cuando intento darle editar a ese registro con el ? ? el MySQL me da el siguiente HORROR: "MySQL ha devuelto un valor vacío (i.e. cero columnas)."

Seguro de que uds me podrán dar luces en este dolor de cabeza , se despide

Demis