Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Insertar imagen en MySQL mediante PHP

Estas en el tema de Insertar imagen en MySQL mediante PHP en el foro de PHP en Foros del Web. Muy buenas. Desde hace bastante casi todo lo que he aprendido de programacion ha sido gracias a los buenos recursos de esta pagina. Tan buenos ...
  #1 (permalink)  
Antiguo 26/04/2013, 15:05
AwG
 
Fecha de Ingreso: abril-2013
Ubicación: Madrid, España
Mensajes: 21
Antigüedad: 11 años
Puntos: 0
Insertar imagen en MySQL mediante PHP

Muy buenas. Desde hace bastante casi todo lo que he aprendido de programacion ha sido gracias a los buenos recursos de esta pagina. Tan buenos que no hacia falta registrarme, ya que no habia dudas, pero ahora es hora de registrarse porque me ha surgido un problema con PHP.

Bien, tengo una web y quiero que para publicar noticias se pueda insertar una imagen con ella. He puesto en el form la opcion de adjuntarla pero a la hora de insertar la imagen en la base de datos no se por que me da error.

No se si sera el formato que le he dado en MySQL (longblob) o algo en la consulta. Aqui dejo el codigo a ver si alguien sabe por que.

Código PHP:
Ver original
  1. <?php
  2. include("conexion.php"); // Incluimos nuestro archivo de conexión con la base de datos
  3.  
  4. if(isset($_POST['añadir'])) // Si el boton de "añadir" fué presionado ejecuta el resto del código
  5. {
  6.     $titulo = mysql_real_escape_string($_POST['titulo']); // Recibimos el valor del <input name="titulo"...
  7.     $texto = mysql_real_escape_string($_POST['texto']);   // Recibimos el valor de la <textarea name="titulo"...
  8.     $autor = mysql_real_escape_string($_POST['autor']);
  9.     $imagen = mysql_real_escape_string($_POST['imagen']);
  10.     if(!empty($titulo) && !empty($texto) && !empty($autor) && !empty($imagen)) // Comprobamos que los valores recibidos no son NULL
  11.     {
  12.         $query_NuevaNoticia = mysql_query("INSERT INTO ".$db_table." SET titulo = '".$titulo."', fecha = NOW(),noticia = '".$texto."', autor='".$autor."', imagen=".$imagen); // Realizamos una consulta a la base de datos para insertar la nueva notica
  13.  
  14.         if($query_NuevaNoticia)
  15.         {
  16.             echo 'La noticia se añadió correctamente a la base de datos.'; // Si el registro (la noticia) se insertó en la base de datos, mostramos este mensaje
  17.         }
  18.         else
  19.         {
  20.             echo 'La noticia no pudo ser insertada en la base de datos'; // Si el registro (la noticia) no se insertó en la base de datos, mostramos este mensaje
  21.         }
  22.     }
  23.     else
  24.     {
  25.         echo 'Los campos no pueden estar vacios. Rellénalos para insertar la noticia en la base de datos'; // Si los valores recibidos por los campos de texto están vacios, no inserta el registro y muestra este mensaje
  26.     }
  27. }
  28.  
  29. ?>
  30.  
  31. <form action="nueva_noticia.php" method="post"> <!-- Creamos el formulario, utilizando la etiqueta form, cuyo atributo action="" indicará donde se procesará el formulario -->
  32.     Título de la noticia: <br /><input name="titulo" type="text" enctype="multipart/form-data"/> <br />
  33.     Texto de la noticia:  <br /><textarea name="texto"></textarea> <br />
  34.     Autor: <input name="autor" type="text" /><br />
  35.     Archivo: <input name="imagen" type="file" onChange="ver(form.file.value)">
  36.     <br />
  37.     <input type="submit" name="añadir" value="Publicar noticia" />
  38. </form>

El codigo funcionaba bien hasta que he modificado lo de la imagen

Muchas gracias de antebrazo
  #2 (permalink)  
Antiguo 26/04/2013, 15:12
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Insertar imagen en MySQL mediante PHP

Pues al igual que una cadena de texto, en la consulta debe llevar comillas tu valor, es claro que no colocas comillas simples al rededor de la variable de imagen.

Además los campos <input type="file"> no los puedes recibir de la misma forma con $_POST, tiene un procedimiento distinto, consulta el manual:

http://php.net/manual/es/features.file-upload.php
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 26/04/2013, 15:23
AwG
 
Fecha de Ingreso: abril-2013
Ubicación: Madrid, España
Mensajes: 21
Antigüedad: 11 años
Puntos: 0
Respuesta: Insertar imagen en MySQL mediante PHP

¿Tiene que ser con el $_FILES? Con ese no se por que cuando verifico a ver si no hay nada en empty me dice que la imagen esta vacia, asi que deduzco que o el formulario no lo esta enviado bien o no estoy trayendomelo bien
  #4 (permalink)  
Antiguo 26/04/2013, 15:25
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Insertar imagen en MySQL mediante PHP

Pues entonces primero aprende a trabajar con uploads y luego integras eso con lo que tienes, ¿no lo crees?

Consulta el manual, no muerde.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 26/04/2013, 15:26
AwG
 
Fecha de Ingreso: abril-2013
Ubicación: Madrid, España
Mensajes: 21
Antigüedad: 11 años
Puntos: 0
Respuesta: Insertar imagen en MySQL mediante PHP

Estoy aprendiendo, y como estoy aprendiendo tengo dudas, por eso posteo aqui, si tu me respondes que debo aprender antes de hacerlo entramos en un bucle infinito que se resume en que no aprendo xD
  #6 (permalink)  
Antiguo 26/04/2013, 15:29
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Insertar imagen en MySQL mediante PHP

Por eso te digo que consultes el manual, ahí resuelves tus dudas y de paso aprendes.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 26/04/2013, 15:34
AwG
 
Fecha de Ingreso: abril-2013
Ubicación: Madrid, España
Mensajes: 21
Antigüedad: 11 años
Puntos: 0
Respuesta: Insertar imagen en MySQL mediante PHP

Si lo he mirado, y he modificado la linea de tal forma que me ha quedado asi:

$imagen = mysql_real_escape_string($_FILES['imagen']['tmp_name']);

Pero me sigue diciendo que esta vacia, y segun lo del manual es asi como tengo que ponerlo. Pero claro, tampoco se si es lo que necesito insertar en la base de datos porque en el manual no hacen ejemplos con bases de datos
  #8 (permalink)  
Antiguo 26/04/2013, 15:37
AwG
 
Fecha de Ingreso: abril-2013
Ubicación: Madrid, España
Mensajes: 21
Antigüedad: 11 años
Puntos: 0
Respuesta: Insertar imagen en MySQL mediante PHP

He conseguido que me lo lea, ahora el problema esta en la consulta SQL, que dice que esperaba 2 parametros:

Warning: mysql_query() expects parameter 2 to be resource

Ni idea de lo que habla, la consulta esta bien
  #9 (permalink)  
Antiguo 26/04/2013, 15:38
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Insertar imagen en MySQL mediante PHP

El error dice que el segundo argumento está mal, revisa bien como ejecutas la función.

La consulta debe ser el primer argumento, pero algo le estás pasando como segundo argumento que no corresponde, sin ver el código real ni el mensaje completo de error sería como intentar adivinar.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 26/04/2013, 15:40
AwG
 
Fecha de Ingreso: abril-2013
Ubicación: Madrid, España
Mensajes: 21
Antigüedad: 11 años
Puntos: 0
Respuesta: Insertar imagen en MySQL mediante PHP

El segundo parametro es fecha = NOW() y esta bien, ese ya funcionaba
  #11 (permalink)  
Antiguo 26/04/2013, 15:43
AwG
 
Fecha de Ingreso: abril-2013
Ubicación: Madrid, España
Mensajes: 21
Antigüedad: 11 años
Puntos: 0
Respuesta: Insertar imagen en MySQL mediante PHP

Warning: mysql_query() expects parameter 2 to be resource, string given in C:\AppServ\www\pruebas\noticias\2\nueva_noticia.ph p on line 12

Código PHP:
Ver original
  1. <?php
  2. include("conexion.php"); // Incluimos nuestro archivo de conexión con la base de datos
  3.  
  4. if(isset($_POST['añadir'])) // Si el boton de "añadir" fué presionado ejecuta el resto del código
  5. {
  6.     $titulo = mysql_real_escape_string($_POST['titulo']); // Recibimos el valor del <input name="titulo"...
  7.     $texto = mysql_real_escape_string($_POST['texto']);   // Recibimos el valor de la <textarea name="titulo"...
  8.     $autor = mysql_real_escape_string($_POST['autor']);
  9.     $imagen = mysql_real_escape_string($_FILES['imagen']['tmp_name']);
  10.     if(!empty($titulo) && !empty($texto) && !empty($autor) && !empty($imagen)) // Comprobamos que los valores recibidos no son NULL
  11.     {
  12.         $query_NuevaNoticia = mysql_query("INSERT INTO ".$db_table." SET titulo = '".$titulo."', fecha = NOW(), autor='".$autor."'", "noticia = '".$texto."', imagen='".$imagen."'"); // Realizamos una consulta a la base de datos para insertar la nueva notica
  13.  
  14.         if($query_NuevaNoticia)
  15.         {
  16.             echo 'La noticia se añadió correctamente a la base de datos.'; // Si el registro (la noticia) se insertó en la base de datos, mostramos este mensaje
  17.         }
  18.         else
  19.         {
  20.             echo 'La noticia no pudo ser insertada en la base de datos'; // Si el registro (la noticia) no se insertó en la base de datos, mostramos este mensaje
  21.         }
  22.     }
  23.     else
  24.     {
  25.         echo 'Los campos no pueden estar vacios. Rellénalos para insertar la noticia en la base de datos'; // Si los valores recibidos por los campos de texto están vacios, no inserta el registro y muestra este mensaje
  26.     }
  27. }
  28.  
  29. ?>
  30.  
  31. <form action="nueva_noticia.php" method="post" enctype="multipart/form-data"> <!-- Creamos el formulario, utilizando la etiqueta form, cuyo atributo action="" indicará donde se procesará el formulario -->
  32.     Título de la noticia: <br /><input name="titulo" type="text" /> <br />
  33.     Texto de la noticia:  <br /><textarea name="texto"></textarea> <br />
  34.     Autor: <input name="autor" type="text" /><br />
  35.     Archivo: <input name="imagen" type="file" onChange="ver(form.file.value)">
  36.     <br />
  37.     <input type="submit" name="añadir" value="Publicar noticia" />
  38. </form>
  #12 (permalink)  
Antiguo 26/04/2013, 15:50
AwG
 
Fecha de Ingreso: abril-2013
Ubicación: Madrid, España
Mensajes: 21
Antigüedad: 11 años
Puntos: 0
Respuesta: Insertar imagen en MySQL mediante PHP

Yo en esa consulta no veo segundo parametro, no se a que se refiere Oo
  #13 (permalink)  
Antiguo 26/04/2013, 16:10
Avatar de xXn
xXn
 
Fecha de Ingreso: abril-2013
Ubicación: Buenos Aires
Mensajes: 41
Antigüedad: 11 años
Puntos: 2
Respuesta: Insertar imagen en MySQL mediante PHP

Hola, yo veo que como te han dicho anteriormente, la variable $imagen deberia ir en comillas, y ademas estas levantando mal $imagen, se usaria $_FILES

si lo que queres es subirla a tu servidor, y ademas ponerla en la base de datos, te dejo algo que hice recien, para que lo adaptes a tu codigo.
Espero que sea de ayuda, ya que soy nuevo.

Código PHP:
Ver original
  1. <?php
  2.     $nombre      = $_POST['prd_nombre'];
  3.     $descripcion = $_POST['prd_descripcion'];
  4.     $precio      = $_POST['prd_precio'];
  5.     $categoria   = $_POST['cat_id'];
  6.     $prd_alta    = date("Y-m-d");
  7.     $foto1       = $_FILES['prd_foto1']['name'];
  8.     $foto2       = $_FILES['prd_foto2']['name'];
  9.     $foto1_tmp = $_FILES['prd_foto1']['tmp_name']; //REFERENCIA AL NOMBRE TEMPORAL DEL ARCHIVO
  10.     $foto2_tmp = $_FILES['prd_foto2']['tmp_name']; //REFERENCIA AL NOMBRE TEMPORAL DEL ARCHIVO
  11.    
  12.     //MOVER A UN DIRECTORIO DE TRABAJO
  13.     move_uploaded_file($foto1_tmp,"./imagenes/".$foto1);
  14.     move_uploaded_file($foto2_tmp,"./imagenes/".$foto2);
  15.    
  16.     //LO AGREGAMOS A LA BASE DE DATOS
  17.     include("conexion.php");
  18.     $sql = "INSERT INTO productos(prd_id, prd_nombre,prd_descripcion,prd_precio,cat_id,prd_alta,prd_foto1,prd_foto2) VALUES(NULL,'$nombre','$descripcion','$precio','$categoria','$prd_alta','$foto1','$foto2')";
  19.     mysqli_query($link,$sql); //AGREGO REGISTRO
  20. ?>
  #14 (permalink)  
Antiguo 26/04/2013, 16:20
AwG
 
Fecha de Ingreso: abril-2013
Ubicación: Madrid, España
Mensajes: 21
Antigüedad: 11 años
Puntos: 0
Respuesta: Insertar imagen en MySQL mediante PHP

Pero mira en el mensaje anterior he puesto el codigo actualizado, tengo comillas y $_FILES. Es muy parecido a tu codigo, y no funciona
  #15 (permalink)  
Antiguo 26/04/2013, 16:39
AwG
 
Fecha de Ingreso: abril-2013
Ubicación: Madrid, España
Mensajes: 21
Antigüedad: 11 años
Puntos: 0
Respuesta: Insertar imagen en MySQL mediante PHP

Es que con esa estructura de consulta si me voy al phpmyadmin e inserto a mano si que va, pero lo pongo en el codigo php y da error de no se que segundo parametro:

insert into noticias set titulo='Noticia2', fecha = now(), autor='Nacho', noticia='Holaaaaaaaaaaaaaaa', imagen='hola'
  #16 (permalink)  
Antiguo 26/04/2013, 17:06
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Insertar imagen en MySQL mediante PHP

Yo si veo el segundo argumento, ¿o crees que los errores son inventados?

Vamos a mirar la linea de la consulta:
Código PHP:
Ver original
  1. $query_NuevaNoticia = mysql_query("INSERT INTO ".$db_table." SET titulo = '".$titulo."', fecha = NOW(), autor='".$autor."'", "noticia = '".$texto."', imagen='".$imagen."'"); // Realizamos una consulta a la base de datos para insertar la nueva notica

Aquí estás concatenando y antes de la noticia se nota la coma que separa argumentos, de algún modo la colocas fuera del texto y la escribes mal, dando como resultado un segundo argumento.

Veamos de nuevo ya corregido:
Código PHP:
Ver original
  1. $query_NuevaNoticia = mysql_query("INSERT INTO ".$db_table." SET titulo = '".$titulo."', fecha = NOW(), autor='".$autor."', noticia = '".$texto."', imagen='".$imagen."'"); // Realizamos una consulta a la base de datos para insertar la nueva notica

A ver si así lo ves.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #17 (permalink)  
Antiguo 26/04/2013, 17:22
Avatar de xXn
xXn
 
Fecha de Ingreso: abril-2013
Ubicación: Buenos Aires
Mensajes: 41
Antigüedad: 11 años
Puntos: 2
Respuesta: Insertar imagen en MySQL mediante PHP

pateke tiene razon, no me di cuenta, igualmente copie el codigo en el ide que utilizo y me dice que hay un error y me muestra esa coma, si es asi, es raro que no te mostro el error.( igual no se que utilizas para programar)

Etiquetas: formulario, mediante, mysql, registro
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.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:14.