Foros del Web » Programando para Internet » PHP »

Subir imágenes a Mysql con php

Estas en el tema de Subir imágenes a Mysql con php en el foro de PHP en Foros del Web. Hola a todos, Hace poco que he comenzado con esto del php y he llegado a un punto en el cual me supera. Estoy creando ...
  #1 (permalink)  
Antiguo 09/06/2009, 12:01
 
Fecha de Ingreso: mayo-2009
Mensajes: 83
Antigüedad: 14 años, 11 meses
Puntos: 1
Exclamación Subir imágenes a Mysql con php

Hola a todos,
Hace poco que he comenzado con esto del php y he llegado a un punto en el cual me supera. Estoy creando un formulario para un portal inmobiliario y he creado todos los campos para que me los inserte en mi base de datos, pero el campo para el archivo no hay forma de que me lo suba a la base, y pruebe lo que pruebe me da error.
Para subir la imagen a la base de datos he estado viendo un tutorial que tenéis en foros del web y si subo la imagen por separado del formulario me funciona, pero si lo intento mezclar con los demas campos y adaptarlo no funciona. El tutorial este: http://www.forosdelweb.com/f18/tutor...inario-127775/
Os paso los cosigos que estoy utilizando y me decíis si sabéis como se puede hacer!

Codigo del formulario:

Código PHP:
<?php
$conexion 
mysql_connect('localhost''usuario''contraseña');
mysql_select_db('nombre base de datos');
?>

<FORM enctype="multipart/form-data" method="post" action="fotobd.php">

<!-- Comienzo tabla 1 !-->

  <label>Tipo de vivienda:<br />
<select name="tipovivienda" id="tipovivienda">
  <option value="0">--Escoja tipo alquiler--</option>
  <?php
    $tablavivienda 
mysql_query("SELECT * FROM vivienda ORDER BY id ASC"); // Seleccionamos las ciudades de la tabla ciudades
    
while ($registrovivienda mysql_fetch_array($tablavivienda)) { // Vamos a repetir una Option (opcion), de la Lista Desplegable, por cada ciudad en la tabla
?>
        <option value="<?php echo $registrovivienda['id']; ?>"><?php echo $registrovivienda['tipo']; ?></option>
  <?php
    
// termina la zona de repeticion
    
mysql_free_result($tablavivienda); // se libera la memoria usada por la tabla
?>
</select>
    </label>
    <font color="red">(*)</font></p>
                                     <p>
    <label>Ciudad:<br />
      <select name="ciudad" id="ciudad">
        <option value="0">---Escoja la ciudad---</option>
        <?php
    $tablaciudades 
mysql_query("SELECT * FROM ciudades ORDER BY nombre ASC"); // Seleccionamos las ciudades de la tabla ciudades
    
while ($registrociudad mysql_fetch_array($tablaciudades)) { // Vamos a repetir una Option (opcion), de la Lista Desplegable, por cada ciudad en la tabla
?>
        <option value="<?php echo $registrociudad['id']; ?>"><?php echo $registrociudad['nombre']; ?></option>
<?php
    
// termina la zona de repeticion
    
mysql_free_result($tablaciudades); // se libera la memoria usada por la tabla
?>
      </select>
    <font color="red">(*)</font><br />
      <br />
      <label>Población / Zona:<br />
      <input name="poblacion" type="text" id="poblacion" size="21" maxlength="30" />
  <font color="red">(*)</font><br />
      <br /><label>
      <label>E-mail:<br />
<input name="email" type="text" id="email" size="21" maxlength="50" />
<font color=red>(*)</font></label>
<br />
<br />
<label>Teléfono:
<br />
<input name="telefono" type="text" id="telefono" size="21" maxlength="30" />
</label> 

<!-- Fin tabla 1 !-->

<br />
<br />
<label>Precio:<br />
  <input name="precio" type="text" id="precio" size="16" maxlength="20" />
</label>
</p>
                                     <p>
  <label>Metros Cuadrados:<br />
    <input name="m2" type="text" id="m2" size="16" maxlength="10" />
  </label>
  <br />
  <br />
  <label>Nº Habitaciones:
    <br />
    <input name="habitaciones" type="text" id="habitaciones" size="16" maxlength="2" />
  </label>
  <br />
  <br />
  <label>N&ordm; Ba&ntilde;os:
    <br />
    <input name="banos" type="text" id="banos" size="16" maxlength="2" />
  </label>
  </p>
  <p>
  <label>Segundamano
    <input name="estado" type="radio" id="estado_0" value="Segundamano" checked="checked" />
  </label>
  <label>Obra Nueva
    <input type="radio" name="estado" value="Obra Nueva" id="estado_1" />
  </label>
</p>
<label>Opci&oacute;n a Compra: Si
    <input name="opcion" type="radio" id="opcion_0" value="Si" checked="checked" />
  </label>
  <label>No
    <input type="radio" name="opcion" value="No" id="estado_1" />
  </label>
</p>
<p>
  <label>Particular
     <input name="cliente" type="radio" id="cliente_0" value="Particular" checked="checked" />
  </label>
  <label>Inmobiliaria
     <input type="radio" name="cliente" value="Inmobiliaria" id="cliente_1" />
  </label>
  </p>
<p>
  <label>Descripción Inmueble<br />
<textarea name="descripcion" id="descripcion" cols="40" rows="5"></textarea>
  </label>
</p>
<p>
  <label>Archivo: <br />
    <INPUT type="file" name="archivo" size="30">
  </label>
</p>
  <p>
  <input type="submit" name="cmdBuscar" id="cmdBuscar" value="Enviar">
  </p>
  <p>&nbsp;</p>
</form>

<?php
mysql_close
($conexion); // Cierro la conexion con la base de datos
?>
Codigo para insertar la imagen en la base de datos:

Código PHP:
<?php

    
// Primero comprobamos que ningún campo esté vacío y que todos los campos existan.
    
if(isset($_POST['tipovivienda']) && !empty($_POST['tipovivienda']) &&
    isset(
$_POST['ciudad']) && !empty($_POST['ciudad']) && isset($_POST['poblacion']) && !empty($_POST['poblacion']) && isset($_POST['email']) && !empty($_POST['email']) && isset($_POST['telefono']) && !empty($_POST['telefono']) && isset($_POST['precio']) && !empty($_POST['precio']) && isset($_POST['habitaciones']) && !empty($_POST['habitaciones']) && isset($_POST['banos']) && !empty($_POST['banos']) && isset($_POST['m2']) && !empty($_POST['m2']) && isset($_POST['cliente']) && !empty($_POST['cliente']) && isset($_POST['estado']) && !empty($_POST['estado']) && isset($_POST['opcion']) && !empty($_POST['opcion']) && isset($_POST['descripcion']) && !empty($_POST['descripcion'])) {


        
// Si entramos es que todo se ha realizado correctamente

        
$link mysql_connect("localhost","usuario","contraseña");
        
mysql_select_db("nombre base de datos",$link);

        
// Con esta sentencia SQL insertaremos los datos en la base de datos
        
mysql_query("INSERT INTO propiedades (idvivienda,idciudad,poblacion,email,telefono,precio,habitaciones,banos,m2,cliente,estado,opcion,descripcion)
        VALUES ('{$_POST['tipovivienda']}','{$_POST['ciudad']}','{$_POST['poblacion']}','{$_POST['email']}','{$_POST['telefono']}','{$_POST['precio']}','{$_POST['habitaciones']}','{$_POST['banos']}','{$_POST['m2']}','{$_POST['cliente']}','{$_POST['estado']}','{$_POST['opcion']}','{$_POST['descripcion']}')"
,$link);

        
// Ahora comprobaremos que todo ha ido correctamente
        
$my_error mysql_error($link);

        if(!empty(
$my_error)) {

            echo 
"Ha habido un error al insertar los valores. $my_error"

        } else {

            echo 
"Los datos han sido introducidos satisfactoriamente";

        }

    } else {

        echo 
"Error, no ha introducido todos los datos";

    }

?>
Este es el código que intento amoldar con el tutorial pero no lo consigo, así que lo dejo como estaría sin introducir ningún tipo de codigo para insertar la imagen y así lo veréis más claro.
Perdonar por el desorden de los códigos pero como ya os he dicho los estoy utilizando para hacer pruebas.

Si tenéis cualquier otra pregunta no dudéis en hacermela!

Gracias y un saludo!
  #2 (permalink)  
Antiguo 10/06/2009, 03:53
 
Fecha de Ingreso: mayo-2009
Mensajes: 83
Antigüedad: 14 años, 11 meses
Puntos: 1
Respuesta: Subir imágenes a Mysql con php

Alguien me puede ayudar?

Me estoy volviendo loco y no se como lo puedo hacer!!!
  #3 (permalink)  
Antiguo 10/06/2009, 11:29
 
Fecha de Ingreso: mayo-2009
Mensajes: 83
Antigüedad: 14 años, 11 meses
Puntos: 1
Respuesta: Subir imágenes a Mysql con php

Ya lo he resuelto!

Gracias
  #4 (permalink)  
Antiguo 10/06/2009, 11:44
Avatar de Dragon_Mandarin  
Fecha de Ingreso: marzo-2005
Ubicación: Santiago de Chile
Mensajes: 231
Antigüedad: 19 años, 1 mes
Puntos: 14
Respuesta: Subir imágenes a Mysql con php

Cita:
Iniciado por Info23 Ver Mensaje
Ya lo he resuelto!

Gracias
En una de ésas podrías postear acá lo que lograste, es probable que le sirva a otras personas de este foro.

Bye
  #5 (permalink)  
Antiguo 10/06/2009, 14:44
 
Fecha de Ingreso: mayo-2009
Mensajes: 83
Antigüedad: 14 años, 11 meses
Puntos: 1
Respuesta: Subir imágenes a Mysql con php

Claro que si!

Los siguientes códigos sirven para insertar un formulario con diversos campos incluyendo un campo para subir archivos a Mysql con códigos php

Formulario php y html:

Código PHP:
<?php
$conexion 
mysql_connect('localhost''''');
mysql_select_db('');
?>
<?php
if (isset($_GET['proceso'])){
echo 
$_GET['proceso']."<br>";
}
?>
<FORM enctype="multipart/form-data" method="post" action="insertar.php">
<label>Tipo de vivienda:<br />
<select name="tipovivienda" id="tipovivienda">
  <option value="0">--Escoja tipo alquiler--</option>
  <?php
    $tablavivienda 
mysql_query("SELECT * FROM vivienda ORDER BY id ASC"); // Seleccionamos las ciudades de la tabla ciudades
    
while ($registrovivienda mysql_fetch_array($tablavivienda)) { // Vamos a repetir una Option (opcion), de la Lista Desplegable, por cada ciudad en la tabla
?>
        <option value="<?php echo $registrovivienda['id']; ?>"><?php echo $registrovivienda['tipo']; ?></option>
  <?php
    
// termina la zona de repeticion
    
mysql_free_result($tablavivienda); // se libera la memoria usada por la tabla
?>
</select>
    </label>
    <font color="red">(*)</font></p>
                                     <p>
    <label>Ciudad:<br />
      <select name="ciudad" id="ciudad">
        <option value="0">---Escoja la ciudad---</option>
        <?php
    $tablaciudades 
mysql_query("SELECT * FROM ciudades ORDER BY nombre ASC"); // Seleccionamos las ciudades de la tabla ciudades
    
while ($registrociudad mysql_fetch_array($tablaciudades)) { // Vamos a repetir una Option (opcion), de la Lista Desplegable, por cada ciudad en la tabla
?>
        <option value="<?php echo $registrociudad['id']; ?>"><?php echo $registrociudad['nombre']; ?></option>
<?php
    
// termina la zona de repeticion
    
mysql_free_result($tablaciudades); // se libera la memoria usada por la tabla
?>
      </select>
    <font color="red">(*)</font><br />
      <br />
      <label>Población / Zona:<br />
      <input name="poblacion" type="text" id="poblacion" size="21" maxlength="30" />
  <font color="red">(*)</font><br />
      <br /><label>
      <label>E-mail:<br />
<input name="email" type="text" id="email" size="21" maxlength="50" />
<font color=red>(*)</font></label>
<br />
<br />
<label>Teléfono:
<br />
<input name="telefono" type="text" id="telefono" size="21" maxlength="30" />
</label> 

<!-- Fin tabla 1 !-->

<br />
<br />
<label>Precio:<br />
  <input name="precio" type="text" id="precio" size="16" maxlength="20" />
</label>
</p>
                                     <p>
  <label>Metros Cuadrados:<br />
    <input name="m2" type="text" id="m2" size="16" maxlength="10" />
  </label>
  <br />
  <br />
  <label>Nº Habitaciones:
    <br />
    <input name="habitaciones" type="text" id="habitaciones" size="16" maxlength="2" />
  </label>
  <br />
  <br />
  <label>N&ordm; Ba&ntilde;os:
    <br />
    <input name="banos" type="text" id="banos" size="16" maxlength="2" />
  </label>
  </p>
  <p>
  <label>Segundamano
    <input name="estado" type="radio" id="estado_0" value="Segundamano" checked="checked" />
  </label>
  <label>Obra Nueva
    <input type="radio" name="estado" value="Obra Nueva" id="estado_1" />
  </label>
</p>
<label>Opci&oacute;n a Compra: Si
    <input name="opcion" type="radio" id="opcion_0" value="Si" checked="checked" />
  </label>
  <label>No
    <input type="radio" name="opcion" value="No" id="estado_1" />
  </label>
</p>
<p>
  <label>Particular
      <input name="cliente" type="radio" id="cliente_0" value="Particular" checked="checked" />
  </label>
  <label>Inmobiliaria
     <input type="radio" name="cliente" value="Inmobiliaria" id="cliente_1" />
  </label>
  </p>
<p>
  <label>Descripción Inmueble<br />
<textarea name="descripcion" id="descripcion" cols="40" rows="5"></textarea>
  </label>
<label>Archivo:</label>
  <INPUT type="file" name="archivo" size="30">
  <INPUT type="submit" name="submit" value="Subir archivo">
</form>
Codigo php para insertar el formulario en la base de datos:

Código PHP:
<?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","","") or die("No se pudo realizar la conexion con el servidor.");
mysql_select_db("",$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"r"), 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'];
$tipovivienda=$_POST['tipovivienda'];
$ciudad=$_POST['ciudad'];
$poblacion=$_POST['poblacion'];
$email=$_POST['email'];
$telefono=$_POST['telefono'];
$precio=$_POST['precio'];
$habitaciones=$_POST['habitaciones'];
$banos=$_POST['banos'];
$m2=$_POST['m2'];
$cliente=$_POST['cliente'];
$estado=$_POST['estado'];
$opcion=$_POST['opcion'];
$descripcion=$_POST['descripcion'];
//insertamos los datos en la BD.
$consulta_insertar "INSERT INTO propiedades (id, archivo_binario, archivo_nombre, archivo_peso, archivo_tipo, idvivienda, idciudad, poblacion, email, telefono, precio, habitaciones, banos, m2, cliente, estado, opcion, descripcion) VALUES ('', '$binario_contenido', '$binario_nombre', '$binario_peso', '$binario_tipo', '$tipovivienda', '$ciudad', '$poblacion', '$email', '$telefono', '$precio', '$habitaciones', '$banos', '$m2', '$cliente', '$estado', '$opcion', '$descripcion')";
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;
?>
  #6 (permalink)  
Antiguo 10/06/2009, 14:47
Avatar de Dragon_Mandarin  
Fecha de Ingreso: marzo-2005
Ubicación: Santiago de Chile
Mensajes: 231
Antigüedad: 19 años, 1 mes
Puntos: 14
De acuerdo Respuesta: Subir imágenes a Mysql con php

Súper!
  #7 (permalink)  
Antiguo 16/06/2009, 10:43
 
Fecha de Ingreso: junio-2009
Ubicación: Valencia
Mensajes: 45
Antigüedad: 14 años, 10 meses
Puntos: 8
Respuesta: Subir imágenes a Mysql con php

Cita:
Iniciado por Info23 Ver Mensaje
...
Para subir la imagen a la base de datos he estado viendo un tutorial que tenéis en foros del web y si subo la imagen por separado del formulario me funciona, pero si lo intento mezclar con los demas campos y adaptarlo no funciona. ...
Hola Info23,

No me he leído el tutorial que indicas, pero para la aplicación que estás haciendo (un portal inmobiliario, si no me equivoco) te recomiendo no almacenar los ficheros de imágenes en la base de datos. Si lo haces, penalizarás el rendimiento de la base de datos y te aumentará su tamaño considerablemente con cada nueva imagen. Yo te recomiendo que las imágenes las subas a una carpeta, por ejemplo "images" y que guardes en base de datos el nombre de la imagen para poder acceder a ella.

De todas formas esto es sólo una opinión personal.

Salu2,
Carlos.
  #8 (permalink)  
Antiguo 16/06/2009, 11:57
 
Fecha de Ingreso: mayo-2009
Mensajes: 83
Antigüedad: 14 años, 11 meses
Puntos: 1
Respuesta: Subir imágenes a Mysql con php

Este problema ya lo he resuelto, pero finalmente he introducido las imágenes en la base de datos por dos motivos:

-Si necesito borrar el anuncio porque el inmueble ya ha sido alquilado, solo con borrar el anuncio de la base de datos automáticamente se me borrará la foto ya que se almacena junto a la descripción.

-Y también había leido en un tutorial que si las imágenes no superaban los 50 kb era recomendable guardarlas en la base de datos...no se hasta que punto será cierto esto...
  #9 (permalink)  
Antiguo 16/06/2009, 13:30
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Subir imágenes a Mysql con php

Las imagenes guardadas en base de datos necesariamente te obligan a generar una consulta por cada una que tengas que mostrar, independientemente del tamaño, si tienes planeado solo unas pocas visitas, no tendras problema.

Ahora, depende de ti analizar si te conviene sobrecargar el servidor MySQL cada que se muestren anuncios o agregar algunas lineas adicionales para eliminar archivos cuando la transaccion ya fue realizada.
__________________
- León, Guanajuato
- GV-Foto
  #10 (permalink)  
Antiguo 16/06/2009, 19:03
 
Fecha de Ingreso: abril-2003
Mensajes: 1.129
Antigüedad: 21 años
Puntos: 34
Respuesta: Subir imágenes a Mysql con php

Le pasó como me pasa a mi a veces, posteo una duda, y minutos después de postearla, me cae la ficha y me doy cuenta de como se debía hacer algo :P
__________________
elGastronomo
  #11 (permalink)  
Antiguo 17/06/2009, 07:26
 
Fecha de Ingreso: mayo-2009
Mensajes: 83
Antigüedad: 14 años, 11 meses
Puntos: 1
Respuesta: Subir imágenes a Mysql con php

Gracias chicos por vuestro interés!
  #12 (permalink)  
Antiguo 22/02/2010, 14:15
 
Fecha de Ingreso: mayo-2009
Mensajes: 9
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: Subir imágenes a Mysql con php

Hola todo muy lindo, pero nadie csi nadie en estos articulos, pone los nombres de los rchivos y ls bses de datos. graxis igual por el aporte... ;)
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 13:03.