problemas al subir imagen a bd

Bueno continuando con mi proyecto de generador de publi, quiero dar la opcion a los clientes de poder insertar una imagen en su bloque de anuncios y tras crear la bd
 id 	        int(3)                auto_increment     				  	
nombre 	varchar(300) 	utf8_spanish_ci 				
tipo 	        varchar(300) 	utf8_spanish_ci 					
imagen 	longblob 	        BINARY
 
en el formulario
<form method="get" action="guardar.php" enctype="multipart/form-data">
Nombre: <input type="text" name="nombre" maxlength="100">

Imagen: <input type="file" name="imagen" size="40">



<input type="submit" name="submit" value="Subir">
</form>
en esta pagina (guardar.php) me da ERROR
<?
mysql_connect("localhost","","");
mysql_select_db("imagenes");
$imagen = addslashes(fread(fopen($imagen, "r"), filesize($imagen)));/*AQUI ESTA EL ERROR*/ 
$nombre = $_GET["nombre"];
mysql_query("INSERT INTO imagenes (nombre,imagen) VALUES ('$nombre','$imagen')");
?>
Pero no lo veo. ¿Podeis echarme una manita?
Lo mejor de caerse al tropezar, es volverse a levantar.
Mira, puedes decirme que vas a insertar en todos los campos? para entender mejor tu codigo porque aveces no se me da entenderlo hasta que me explican,

Haber en el campo nombre quieres insertar : El nombre de la imagen
En el campo tipo me imagino que la extension de la imagen no?
y en el campo imagen???
Es facil programar "Solo interesate en aprender"
La imagen propiamente ¿no?
Lo mejor de caerse al tropezar, es volverse a levantar.
mmmmmm te sugiero que mejor la imagen la subas a tu servidor y no a la bd, pero si la vaz a guardar desde un formulario tienes que usar la funcion $_FILES[''], asi la variable $imagen valdria = $imagen =$_FILES['imagen']['tmpname']

Bueno segun te entendi seria asi , pero si estoy mal dimelo
Es facil programar "Solo interesate en aprender"
Vale, tengo entendido que ralentiza a la bd el almacenaje de imagenes, aparte de que esta no es infinita.
Pero, como sería para guardarla en el server. Ten en cuenta que de momento el server está en mi maquina y no en un host.
Lo mejor de caerse al tropezar, es volverse a levantar.
Bien pues en este caso seria el formulario asi

<FORM method="POST" ENCTYPE="multipart/form-data">

<INPUT type=file name="imagen">
<INPUT type=submit value="Enviar">
</FORM>

Bueno el multipart/form-data es para que permita la subida de archivos



aqui harias tu peticion de insertar mysql obteniendo los datos del archivo subido

podria ser asi

mysql_query("INSERT INTO tu tabla(nombre,tipo,direccion) VALUES('".$_FILES['imagen']['tmpname']."',"'.$FILES['imagen']['type']."','carpeta/".$FILES['imagen]['name']."'") or die(mysql_error());

y para subirlo con esto

move_uploaded_file($_FILES['imagen']['tmpname'],"lacarpetadealmacenamiento/".$_FILES['imagen']['tmpname']);

y listo
Es facil programar "Solo interesate en aprender"
imagino que quieres decir:
VALUES('".$_FILES['imagen']['tmpname']."',"'.$_FILES['imagen']['type'].'",'carpeta/'.$_FILES['imagen]['name']."'") or die(mysql_error());
en vez de:
VALUES('".$_FILES['imagen']['tmpname']."',"'.$FILES['imagen']['type']."','carpeta/".$FILES['imagen]['name']."'") or die(mysql_error());
Lo mejor de caerse al tropezar, es volverse a levantar.
gjulian escribió:imagino que quieres decir:
VALUES('".$_FILES['imagen']['tmpname']."',"'.$_FILES['imagen']['type'].'",'carpeta/'.$_FILES['imagen]['name']."'") or die(mysql_error());
en vez de:
VALUES('".$_FILES['imagen']['tmpname']."',"'.$FILES['imagen']['type']."','carpeta/".$FILES['imagen]['name']."'") or die(mysql_error());
Debe de haber un error con las comillas aqui:
VALUES('".$_FILES['imagen']['tmpname']."',"'.$_FILES['imagen']['type'].'",'carpeta/'.$_FILES['imagen]['name']."'") or die(mysql_error());
Lo mejor de caerse al tropezar, es volverse a levantar.
si son pequeños errores de sintaxis.se me ha de ver pasado
Es facil programar "Solo interesate en aprender"
A ver si puedes revisar la sintaxis , porque yo me pierdo con tanto puntos y comas.
Gracias
Lo mejor de caerse al tropezar, es volverse a levantar.
mysql_query("INSERT INTO tu tabla(nombre,tipo,direccion) VALUES('".$_FILES['imagen']['tmpname']."','".$_FILES['imagen']['type']."','carpeta/".$_FILES['imagen']['name']."'") or die(mysql_error());
Es facil programar "Solo interesate en aprender"
Pues sigue sin funcionar. Este es el form:
<FORM method="POST" ENCTYPE="multipart/form-data" action="guardar.php">
<INPUT type=file name="imagen">
<INPUT type=submit value="Enviar">
</FORM>

y esta la de envio:
<?
mysql_connect("localhost","","");
mysql_select_db("imagenes");
$imagen = $imagen =$_FILES['imagen']['tmpname']; Esta es la linea 12
mysql_query("INSERT INTO imagenes(imagenes)
VALUES('".$_FILES['imagen']['tmpname']."','".$_FILES['imagen'] ['type']."','C:\WAMP/WWW/imagenes/objetos".$_FILES['imagen']['name']."'") or die(mysql_error()); y esta la 14
move_uploaded_file($_FILES['imagen']['tmpname'],"C:\WAMP/WWW/imagenes/objetos".$_FILES['imagen']['tmpname'])
?>

Y me da este error:
Notice: Undefined index: tmpname in C:\wamp\www\imagenes\guardar.php on line 12
Notice: Undefined index: tmpname in C:\wamp\www\imagenes\guardar.php on line 14
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 2.
Lo mejor de caerse al tropezar, es volverse a levantar.
Bueno pues es facil, despues del insert into continua la tabla y despues un parentesis y dentro del parentesis pueden ir varios campos dondese va a insertar esa informacion, si te das cuenta dentro del values tiene a insertar 3 campos y mas atras le dices que solo inserte en uno ese es un pequeño error de sintaxis, tambien existe otro donde pones doble declaracion de la variable $imagens, de esta forma %imagenes = $imagenes = <----- no se acepta en php , entonces quedaria de esta manera

<form method="post" enctype="multipart/form-data" action="guardar.php">
<input type="file" name="imagen">
<input type="submit" value="Enviar">
</form>

y esta la de envio:
<?
$conectar = mysql_connect("localhost","","");
$bd= mysql_select_db("imagenes");
$imagen = $_FILES['imagen']['tmpname']; Esta es la linea 12
$peticion = mysql_query("INSERT INTO imagenes(AQUI DEBEN DE IR 3 CAMPOS O DISMINUIRLE DOS EN EL VALUES)
VALUES('".$_FILES['imagen']['tmpname']."','".$_FILES['imagen'] ['type']."','C:\WAMP/WWW/imagenes/objetos".$_FILES['imagen']['name']."'") or die(mysql_error()); y esta la 14
move_uploaded_file($_FILES['imagen']['tmpname'],"C:\WAMP/WWW/imagenes/objetos".$_FILES['imagen']['tmpname']); //aqui le falto un punto y coma
?>
Es facil programar "Solo interesate en aprender"
Osea que en el "form" el "name" de "imagen" lo divides en tres campos y los tres campos de mi bd se deben llamar: tmpname, type, name.
¿Es asi? y si es asi ¿como recibe esa informacion con tan solo subir una imagen?
NO LO ENTIENDO
Lo mejor de caerse al tropezar, es volverse a levantar.
Mmmmm no, de hecho puse 3 campos porque empezaste con tres campos pero pueden ser los que sean, mira te voy a explicar la funcion donde se obtiene el nombre tipo y todo lo de la imagen es con la variable $_FILES['aquielnombrequeteniaelform'] de aqui sale otro corchete mas que es lo que quieres obtener del campo donde esta la opcion de subir imagen, ['tmpname'] -> sirve para obtener el nombre temporal de la imagen o archivo, ['type']--> sirve para obtener el tipo de imagen que subio o extension ya que no solo se pueden subir imagenes al servidor si no que mas cosas, quedando un ejempo asi:

<input type="file" name="ejemplo">

<?php

echo $_FILES['ejemplo']['tmpname'];
?>
Es facil programar "Solo interesate en aprender"
Estoy totalmente alicaido, no consigo subir la imagen a la bd.
Est es lo que tengo en el form:
<FORM method="POST" ENCTYPE="multipart/form-data" action="guardar.php">

<INPUT type=file name="imagen">
<INPUT type=submit value="Enviar">
</FORM>
Y esto en guardar.php:
<?php

mysql_connect("localhost","","");
mysql_select_db("imagenes");
$imagen =$_FILES['imagen']['tmpname'];
move_uploaded_file('$_FILES["imagen"]["tmpname"]','C:\WAMP/WWW/imagenes/objetos');
mysql_query("INSERT INTO imagenes(imagen)
values("'$_FILES['imagen']['tmpname']',C:\WAMP/WWW/imagenes/objetos")") or die(error en la tabla);

?>
Lo he simplificado al maximo y no consigo guardar nada en la bd.
¡¡¡¡ESTOY DE LOS NERVIOS :evil: :evil: !!!!
Lo mejor de caerse al tropezar, es volverse a levantar.
Bueno tras mucho buscar y probar he encontrado este codigo con el que consigo subir las imagenes a la bd.
Pero la sintexis de este codigo me desmorona lo poco que creia saber sobre mysql. (NO PREGUNTARÉ). Este tema me trae de cabeza, ya lo aprenderé.
Con tiempo y practica.
<?php
mysql_connect("localhost","","");
mysql_select_db("imagenes");
if (isset($_POST['enviar'])) {
    $tipos = array("image/gif","image/jpeg","image/bmp","image/pjpeg");
    $maximo = 202400; //200Kb
    if (is_uploaded_file($_FILES['imagen']['tmp_name'])) { // Se ha subido?
        if (in_array($_FILES['imagen']['type'],$tipos) && $_FILES['imagen']['size'] <= $maximo) { // Es correcto?
            $fp = fopen($_FILES['imagen']['tmp_name'], 'r'); //Abrimos la imagen[/b]
            $imagen = fread($fp, filesize($_FILES['imagen']['tmp_name'])); //Extraemos el contenido de la imagen]
            $imagen = addslashes($imagen);
            fclose($fp); //Cerramos imagen
            if(!get_magic_quotes_gpc())    $nombre = addslashes($_FILES['imagen']['name']); // Arreglamos el Nombre
            else $nombre = $_FILES['imagen']['name'];
           $query = "INSERT INTO `imagenes` (imagen,nombre,tipo,descripcion,fecha,ip) VALUES ";
            $query.= "('".$imagen."','".$nombre."','".$_FILES['imagen']['type']."','";
            $query.= mysql_real_escape_string($_POST['descripcion'])."','";
            $query.= date("d/m/y",time())."','".$_SERVER['REMOTE_ADDR']."')";
                        if (mysql_query($query)) echo '[img]visor.php?mostrar='.mysql_insert_id().'[/img]';    
           else echo mysql_error();    
        } else echo "El formato del archivo no es correcto o es mayor de 200Kb";
    } else echo "La imagen no ha sido subida";
}

?>
La pregunta ahora es ¿como mostrar la imagen?
Lo mejor de caerse al tropezar, es volverse a levantar.
Bueno, pues la verdad soy sincero y yo nunca he subido imagenes a una base de datos, asi que en eso no podre ayudarte.
Es facil programar "Solo interesate en aprender"
Sin problema, la verdad es que contigo he aprendido bastantes cosas y seguramente seguiré aprendiendo.
Gracias por todo.
Ahora debo seguir buscando como mostrar la imagen guardada.
Lo mejor de caerse al tropezar, es volverse a levantar.
Bueno ultimamente en la semana no habia tenido mucho tiempo de pasarme por aqui y corregir mejor tus dudas , mas explicadas y todo eso como antes, pero hoy sabado he tenido mas tiempo y me decidi hacerte tu sistema de subida de imagenes(pero como ya te lo habia comentado, no subirlas a la bd sino en el servidor), asi que pues aqui te dejo todo lo que he hecho y me dices si te funciona yo ya lo probe y si me funciono muy bien

Bien primero necesitaremos la bd en donde se almacenaran los datos de la imagen asi que creala asi:
--
-- Estructura de tabla para la tabla `imagenes`
--

CREATE TABLE IF NOT EXISTS `imagenes` (
  `imagen_id` int(10) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(200) NOT NULL,
  `url` varchar(300) NOT NULL,
  PRIMARY KEY (`imagen_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8mb4;


Aqui el archivo subir.html :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Subida de imagenes por cesar_ed * CCTW</title>
</head>

<body>
<form action="subir.php"  enctype="multipart/form-data" method="post">
<input type="file" name="imagen" />

<input type="submit" value="subir" />
</form>
</body>
</html>

aqui el subir.php

if(!is_uploaded_file($_FILES['imagen']['tmp_name']))
   {
    echo "Error al subir archivo";
    }
    else {
    $conectar = mysql_connect("localhost","root","CHKDSKK1");
    $bd = mysql_select_db("cctw");
    $nombre = explode(".",$_FILES['imagen']['name']);
    $peticion = mysql_query("INSERT INTO imagenes(nombre,url) VALUES('".$nombre[0]."','subidas/".$_FILES['imagen']['name']."')") or die(mysql_error());
    move_uploaded_file($_FILES['imagen']['tmp_name'],"subidas/".$_FILES['imagen']['name']);
    echo "Se ha subido correctamente tu imagen";
    }

Y aqui el mostrar.php
$conectar = mysql_connect("localhost","root","CHKDSKK1");
	$bd = mysql_select_db("cctw");
	
	$verificar = mysql_query("SELECT * FROM imagenes");
	
	$numeros = mysql_num_rows($verificar);
	if($numeros <= 0)
	{
	 echo "No se han encontrado imagenes";
	 }
	 else {
	    echo "
Estas son las imagenes encontradas:
";
	    while($imagen = mysql_fetch_array($verificar))
		{
		  
		   echo '[img]'.$imagen['url'].'[/img]
';
		   }
		  }

Te recuerdo que para que funcione debes de crear una carpeta llamada subidas dentro de la carpeta en la que crees estos archivos, asi por ejemplo el subir.html esta en : micarpeta/subir.html entonces la carpeta subidas debe estar dentro de micarpeta quedando asi : micarpeta/subidas
si lo subes a un servidor te recuerdo darle permisos de escritura a la carpeta subidas para que se pueda subir correctamente.

Eso seria todo si tienes alguna duda dimelo, o espero que te sirva si aun no has podido con lo de subir imagene a la bd

suerte :P
Es facil programar "Solo interesate en aprender"
Gracias cesar_ed, lo probaré. Pero ahora voy a cenar que mañana madrugo.
Aunque el sistema de guardar la imagen en una carpeta, no se si será conveniente en mi proyecto, ya que la imagen subida debe aparecer en la muestra que crea el cliente en mi pagina y quizas sea mas complicado al tener que indicar rutas o borrarlas caso de no satisfacerle al cliente. No se si me explico.
Y bueno si conseguí guardar la imagen en un campo de bd, pero ahora al pedirle a mysql la consulta me devuelve la imagen codificada.
Aqui te dejo el codigo por si le quieres echar un vistazo:
Este es mostrar.php
<?php
mysql_connect("localhost", "gxxx", "xxx");
mysql_select_db("imagenes");
$result = mysql_query("SELECT imagen, nombre FROM imagenes");
if(mysql_num_rows($result)){
echo "<table border = '1'>\n";
echo "<tr> \n";
echo "<td>imagen</td> \n";
echo "<td>nombre</td> \n";
echo "</tr> \n";

while ($row = mysql_fetch_array($result)){
echo "<tr> \n";
echo "<td>".$row["imagen"]."</td> \n";
echo "<td>".$row["nombre"]."</td> \n";
   }
   echo "</table> \n";
	 header("Content-Type: ".$result['type']);
} else {
echo "¡ No se ha encontrado ningún registro !";
} 
?>
Lo mejor de caerse al tropezar, es volverse a levantar.
mmmm

en el code que te di ya viene un mostrar.php ya solo debes modificarlo a tu gusto si quieres que muestre todas las imagenes con while y solo 1 con if y añadiendole un WHERE ala bd , mmm no te entendi mucho srry
Es facil programar "Solo interesate en aprender"
Vale, probé tu codigo y va de fabula.
Ahora voy a tratar de que las muestre con el texto escrito por el cliente , encima de ellas.
Lo mejor de caerse al tropezar, es volverse a levantar.
Bueno pues aqui me tienes otra vez.
No se como hacer para mezclar las 2 subidas y que me la devuelva en un div todo junto.
Mira estos son los code de subida y solicitud
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
<html xmlns="http://www.w3.org/1999/xhtml"/>
<head>
<title>Page title</title>
<link rel="stylesheet" type="text/css" href="estilo.css" media="all" />
<meta http-equiv="Content-Type" content="text/html" charset="iso-8859-1"/>
</head>

<body>
<?php

if(!is_uploaded_file($_FILES['imagen']['tmp_name']))
   {
    echo "Error al subir archivo";
    }
    else {
    include ("conecta.php");
    $nombre = explode(".",$_FILES['imagen']['name']);
    $peticion = mysql_query("INSERT INTO anuncios(nombre,url) 
		VALUES('".$nombre[0]."','subidas/".$_FILES['imagen']['name']."')") or die(mysql_error());
    move_uploaded_file($_FILES['imagen']['tmp_name'],"subidas/".$_FILES['imagen']['name']);    
}
 include ("conecta.php");
 $texto = $_POST["texto"];
$texto = htmlentities($texto, ENT_QUOTES);
$texto = str_replace("[b]","[b]", $texto);
$texto = str_replace("[/b]","[/b]", $texto);
$texto = str_replace("[i]","[i]", $texto);
$texto = str_replace("[/i]","[/i]", $texto);
$texto = str_replace("[negro]","<font color=#000>", $texto);
$texto = str_replace("[navy]","<font color=navy>", $texto);
$texto = str_replace("[rojo]","<font color=#FF0000>", $texto);
$texto = str_replace("[verde]","<font color=#088A08>", $texto);
$texto = str_replace("[amari]","<font color=#FFFF00>", $texto);
$texto = str_replace("[blanco]","<font color=#FFF>", $texto);
$texto = str_replace("[bgro]","<td class=bgro>", $texto);
$texto = str_replace("[bgbla]","<td class=bgbla>", $texto);
$texto = str_replace("[bgve]","<td class=bgve>", $texto);
$texto = str_replace("[bgne]","<td class=bgne>", $texto);
$texto = str_replace("[bgama]","<td class=bgama>", $texto);
$texto = str_replace("[bgnav]","<td class=bgnav>", $texto);
$texto = str_replace("[bgaz]","<td class=bgaz>", $texto);
$texto = str_replace("[bgte]","<td class=bgte>", $texto);
$texto = str_replace("[bgaqua]","<td class=bgaqua>", $texto);
$texto = str_replace("[bgsil]","<td class=bgsil>", $texto);
$texto = str_replace("[bggray]","<td class=bggray>", $texto);
$texto = str_replace("[bgoli]","<td class=bgoli>", $texto);
$texto = str_replace("[bglime]","<td class=bglime>", $texto);
$texto = str_replace("[bgmarr]","<td class=bgmarr>", $texto);
$texto = str_replace("[bgfus]","<td class=bgfus>", $texto);
$texto = str_replace("[bgpur]","<td class=bgpur>", $texto);
$texto = str_replace("\r\n", "
", $texto);
$texto = str_replace("

", "</p>

", $texto);
$intro = mysql_query("INSERT INTO anuncios (bloque) 
values ('$texto')")or die('Error en tabla');
		$intro = mysql_query("SELECT * FROM anuncios ORDER BY imagen_id DESC LIMIT 1");  
   $numeros = mysql_num_rows($intro);
   if($numeros > 0)
   {
    echo ($imagen = mysql_fetch_array($intro)); 
		echo "
";
         echo '[img]'.$imagen['url'].'[/img]
';	
				 echo "<table style='border:red 1px solid'> \n";
echo "<tr> \n";
echo "<td class='a'>su bloque</td></tr> \n";
echo "</table> \n";
echo "
 \n";
do {
echo "<div id='bloque'> \n";
echo "<table> \n";
echo "<tr> \n";
echo "<td class='y'>".$numeros["bloque"]. "</td></tr> \n";
echo "</table> \n";
} 
while ($numeros = mysql_fetch_array($intro));
echo "<table> \n";
echo "</table> \n";
echo "</div> \n";
}

else {
echo "¡ La base de datos está vacia !";
}
          
   
?>

</body>
</html>
Solo me devuelve: "Array" vacio y la tabla "su bloque".
¿Donde esta el fallo?
¿Podrías echarle un vistazo?
Gracias
Lo mejor de caerse al tropezar, es volverse a levantar.