iogi35
Usuario Novato
Usuario Novato

Necesito ayuda. He creado una base de datos de noticias con imágenes asociadas a éstas. Esto lo he hecho creando un campo texto en la tabla de las noticias con el nombre de la imagen (que se encontrará en un subdirectorio llamado /images). O sea, primero inserto la noticia desde un formulario; posteriormente "subo" la imagen desde otro formulario.
Esto funciona, pero no lo veo del todo correcto, porque al eliminar noticias, la imagen permanece en el subdirectorio. Lo ideal sería hacerlo con un campo BLOB en la tabla de noticias y en un único formulario subir tanto la noticia como la imagen, almacenándolas ambas en diferentes campos del mismo registro. Pero no tengo ni idea de cómo hacerlo.
1. Cómo insertar la imagen con el resto de los datos del registro desde el formulario?
2. Cómo referenciar la imagen en el documento html?
Si tenéis alguna sugerencia, estaré atento.
Muchas gracias!!

Avatar Image
Machacateclados
Machacateclados

Para conseguir esto pos sencillo:

Creas un archivo de conexión config.php:

Codigo:

<?php
//establece una conexión con la base de datos.
$dbhost = "localhost";
$dbuname = "usuario";
$dbpass = "contraseña";
$dbname = "base de datos";

$conexion = mysql_connect($dbhost,$dbuname,$dbpass) or die("No se pudo realizar la conexion con el servidor.");
mysql_select_db($dbname,$conexion) or die("No se puede seleccionar BD"); // tu_bd es el nombre de la Base de datos .. por siaca.
?>




Una página para insertar las fotos insertar.php:

Codigo:

<?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","Usuario","contraseña") or die("No se pudo realizar la conexion con el servidor.");
mysql_select_db("nuke",$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 archivos (id, archivo_binario, archivo_nombre, archivo_peso, archivo_tipo) VALUES ('', '$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: listar_imagenes.php"); // si ha ido todo bien
exit;
?>


Ahora otro para ver la imagen insertada listar_imagenes.php:


Codigo:

<?php
include("config.php");

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

$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>";
}

?>


No olvides crear la tabla:
Codigo:

#
# Estructura de la tabla `archivos`
#

CREATE TABLE `archivos` (
`id` int(10) unsigned NOT NULL auto_increment,
`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 '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=5 ;


Espero que te aporte alguna idea dicho código pero....

Una cosa esto carga mucho la bd y no es recomendable
Avatar Image
Machacateclados
Machacateclados

Falta un código para ver las imágenes nombre del archivo ver.php:

Codigo:

<?php
if(isset($_GET['id'])) {

// you may have to modify login information for your database server:
$conexion = mysql_connect("localhost","root","jardin") or die("No se pudo realizar la conexion con el servidor.");
mysql_select_db("nuke",$conexion) or die("No se puede seleccionar BD"); // tu_bd es el nombre de la Base de datos .. por siaca.


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

$sql = "SELECT archivo_binario,archivo_tipo FROM archivos WHERE id='".$_GET['id']."'";

$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;

}
?>
ATENCIÓN: Este tema no tiene actividad desde hace más de 6 MESES,
te recomendamos abrir un nuevo tema en lugar de responder al actual
Opciones:
Ir al subforo:
Permisos:
TU NO PUEDES Escribir nuevos temas
TU NO PUEDES Responder a los temas
TU NO PUEDES Editar tus propios mensajes
TU NO PUEDES Borrar tus propios mensajes
Temas similares
TemaUsuariosRespuestasVisitasActividad
Por: , el 07/Jun/2003, 11:03
javierperez MaIcOl12kJun/03
Por: , el 09/Dic/2022, 17:07
drgII kar10s LiM HLET joshyba72kAug/23
Por: , el 04/Jul/2022, 01:31
proyecto.jarvisti NoSetup.org12kJul/22
Por: , el 18/Sep/2021, 16:55
krelsein02kSep/21
Por: , el 01/Abr/2019, 12:17
HackString marielo.29091323kMay/20