Foros del Web » Programando para Internet » PHP »

Upload múltiple a base datos mysql

Estas en el tema de Upload múltiple a base datos mysql en el foro de PHP en Foros del Web. Hola a todos, me llamo Carlos y soy casi nuevo en el mundo de Php. Estoy estudiándolo y aplicándolo sobre una web que regirá una ...
  #1 (permalink)  
Antiguo 22/07/2012, 11:59
 
Fecha de Ingreso: julio-2012
Ubicación: Valencia
Mensajes: 13
Antigüedad: 12 años, 5 meses
Puntos: 1
Upload múltiple a base datos mysql

Hola a todos, me llamo Carlos y soy casi nuevo en el mundo de Php. Estoy estudiándolo y aplicándolo sobre una web que regirá una pequeña inmobiliaria..
Tengo un formulario para añadir todos los datos de cada vivienda: Características e Imágenes& Vídeos, que después visualizo en una página php.
Hasta aquí todo bien. Para las características perfecto, pero para las imágenes me resulta bastante tedioso introducir los datos, me explico.
Tengo 10 input para introducir la fotos. Es tedioso porque se tarda mucho tiempo en subir una vivienda y en realidad casi siempre podrán ser unas 20 a 35 fotos y un vídeo.
¿Es mejor tener una sola tabla Mysql para todas las características y las imágenes o tener dos tablas diferente(tblcaract y tblmultimedia) unidas por el mismo id?
He estado mirando por Internet y me he empapado de muchísimas formas de subir imágenes múltiples, pero el problema que tengo es que el método que me sube las fotos al servidor no me las sube a la base datos y viceversa.
Al final me he decidido por usar jquery.uploadify.js. Vi un ejemplo y me gusta mucho pero no sé como hacer para que las imágenes que ha subido al servidor me las grabe en la base datos Mysql.
Alguien puede aconsejarme qué debo hacer?
Alguien puede ayudarme?
Si alguien está dispuesto puedo enviarle lo que tengo por mail y así saber exactamente lo que tengo.
Gracias por anticipado...
  #2 (permalink)  
Antiguo 22/07/2012, 12:09
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 7 meses
Puntos: 320
Respuesta: Upload múltiple a base datos mysql

hola charlibi27 bienvenido al foro, yo tube que realizar algo similar a lo que tu propones y te comento que no es recomendable subir las imagenes a la base de datos ya que se cargara mucho, si insistes en hacerlo definitivamente es mejor tener dos tablas asociadas con id asi no tendras un limite de imagenes por vivienda y sera mas rapido el acceso pero te propongo la forma en que yo lo solucione:

1_recibes del formulario los datos (la info de los campos y las 10-20 imagenes)
2_insertas en tu bd los datos del formulario usando un id autoincrementado
3_guardas las imagenes recibidas en una carpeta del servidor (imagenes-vivendas por ejemplo) renombradas a ImgViv-{IDVIVIENDA}-{NUMFOTO}.jpg
lugo para mostrarlas en la web solo haces un for dentro de esa carpeta buscando los nombres que empiecen con "ImgViv-{IDVIVIENDA}" (donde IDVIVIENDA) lo obtubiste previamente de la base de datos ) y haces un echo de esta imagen con un estilo css y demas cosas que quieras, no es muy dificil, si te interesa te puedo pasar el codigo que to tengo para que lo revises, son unas 30 lineas masomenos en total saludos
  #3 (permalink)  
Antiguo 23/07/2012, 02:48
 
Fecha de Ingreso: julio-2012
Ubicación: Valencia
Mensajes: 13
Antigüedad: 12 años, 5 meses
Puntos: 1
Respuesta: Upload múltiple a base datos mysql

Gracias NSD. La verdad que lo que tenía pensado era subir las imagenes a una carpeta y grabar en la base de datos la dirección de las mismas.. pero no consigo realizarlo.
Si me pasaras tu código sería genial. [email protected]
  #4 (permalink)  
Antiguo 23/07/2012, 07:35
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 7 meses
Puntos: 320
Respuesta: Upload múltiple a base datos mysql

hola de nuevo charlibi27 aqui te paso el codigo, (no te lo envio por mail asi si alguien mas le sirve puede encontrarlo en esta web) en tu servidor debes tener una carpeta llamada "Img-Viviendas" para que funcione, el script es este:
Código PHP:
Ver original
  1. <?php
  2. $conexionn = mysql_connect("localhost","user","pass"); //Datos de Acceso
  3. mysql_select_db('test'); //Base de datos
  4.  
  5. if ($_POST["action"] == "upload") {
  6.     $Descripcion=$_POST[Descripcion];
  7.     $Datos[Insert]="INSERT INTO viviendas VALUES('' , '".$_POST[Vivienda]."' , '".$_POST[Descripcion]."')";
  8.     $Datos[Consulta]=mysql_query($Datos[Insert]);
  9.     $Datos[Consulta]=mysql_query('SELECT LAST_INSERT_ID()');
  10.     $IDNV=mysql_result($Datos[Consulta],0);
  11.     for ($i=1;$i<=10;$i++){
  12.         $IDIMG='IMG'.$i;
  13.         $Extencion = explode(".", $_FILES[$IDIMG]['name']);
  14.         $NombreNuevo='Img-'.$IDNV.'-'.rand(0, 30).rand(0, 30).rand(0, 30).'.'.$Extencion[1];       
  15.         $tamano = $_FILES[$IDIMG]['size'];
  16.         $archivo = $_FILES[$IDIMG]['name'];
  17.         if ($archivo != "") {
  18.             $destino =  "Img-Viviendas/".$NombreNuevo;
  19.             if (copy($_FILES[$IDIMG]['tmp_name'],$destino)) {
  20.                 $status.= "Archivo subido: <b>".$archivo."</b> <br />";
  21.                 $Datos[Insert]="INSERT INTO imagenes VALUES('".$IDNV."' , '".$NombreNuevo."' , '".$_POST['Descripcion'.$IDIMG]."')";
  22.                 $Datos[Consulta]=mysql_query($Datos[Insert]);
  23.             } else {
  24.                 $status = "Error al subir el archivo";
  25.             }
  26.         } else {
  27.             $status.= "Error Archivo No Encontrado <br />";
  28. }   }   }
  29. ?>
  30. <html>
  31. <head>
  32.     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  33. </head>
  34. <body>
  35.  
  36.    <b>Sistema de carga de archivos</b>
  37. <hr />
  38.   <form action="upload.php" method="post" enctype="multipart/form-data">
  39.         Nombre de la Vivienda: <input name="Vivienda" type="Text" />
  40.         Descripcion de la vivienda: <textarea name="Descripcion"></textarea>
  41.         <br />Imagenes:<br />
  42. <?php
  43.     for ($i=1;$i<=10;$i++){
  44.         $IDIMG='IMG'.$i;
  45.         echo('<input name="'.$IDIMG.'" type="file" class="casilla" id="archivo" size="35" /><br />
  46.         Descripcion: <textarea name="Descripcion'.$IDIMG.'"></textarea>    
  47.         <hr />
  48.         ');
  49.     }    
  50. ?>
  51.       <input name="enviar" type="submit" class="boton" id="enviar" value="Guardar Datos" />
  52.       <input name="action" type="hidden" value="upload" />    </td>  
  53.     </form>
  54.     <hr />
  55.     <b style="color:#990000"><?php echo $status; ?></b>
  56.     <hr />
  57.     <b>Listado</b>
  58.     <hr />
  59.     <td class="infsub">
  60.    
  61.         <?php
  62.             $Vivienda='';
  63.             $Datos[Consulta]=mysql_query('SELECT V.Nombre NVIV, V.Descripcion DVIV, I.Nombre NIMG , I.Descripcion DIMG FROM viviendas V LEFT JOIN imagenes I ON V.ID=I.IDVIV');
  64.             while($Info=mysql_fetch_array($Datos[Consulta])){
  65.                 if($Info[NVIV]!=$Vivienda){    
  66.                     if($Vivienda!=''){echo('</table>');}
  67.                     echo('<hr /><b>'.$Info[NVIV].'</b><br /><p>'.$Info[DVIV].'</p><hr /><table>');
  68.                     $Vivienda=$Info[NVIV];
  69.                 }
  70.                 echo('<tr><td><img src="Img-Viviendas/'.$Info[NIMG].'" width="200px" /></td><td>'.$Info[DIMG].'</td></tr>');
  71.             }
  72.         ?>
  73. </table>
  74. </body>
  75. </html>
no tiene nada de css por lo que notaras que esta media tosca la interface, ya tu la adaptaras a tu web si te sirve, el codigo tambien es medio rustico puesto que adapte el que tenia a ts necesidades y no lo puli del todo pero ya tu le agegaras o quitaras detalles a tu convniencia.
para que funcione debes tener la siguientes tablas en la base de datos:

Código MySQL:
Ver original
  1. -- phpMyAdmin SQL Dump
  2. -- version 3.2.0.1
  3. -- http://www.phpmyadmin.net
  4. --
  5. -- Servidor: localhost
  6. -- Tiempo de generación: 23-07-2012 a las 10:34:30
  7. -- Versión del servidor: 5.1.36
  8. -- Versión de PHP: 5.3.1
  9.  
  10. SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
  11.  
  12. --
  13. -- Base de datos: `test`
  14. --
  15.  
  16. -- --------------------------------------------------------
  17.  
  18. --
  19. -- Estructura de tabla para la tabla `imagenes`
  20. --
  21.  
  22. CREATE TABLE IF NOT EXISTS `imagenes` (
  23.   `IDVIV` int(11) NOT NULL,
  24.   `Nombre` char(20) NOT NULL,
  25.   `Descripcion` text NOT NULL,
  26.   KEY `IDVIV` (`IDVIV`),
  27.   KEY `IDIMG` (`Nombre`)
  28. ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
  29.  
  30. --
  31. -- Volcar la base de datos para la tabla `imagenes`
  32. --
  33.  
  34.  
  35. -- --------------------------------------------------------
  36.  
  37. --
  38. -- Estructura de tabla para la tabla `viviendas`
  39. --
  40.  
  41. CREATE TABLE IF NOT EXISTS `viviendas` (
  42.   `ID` int(11) NOT NULL AUTO_INCREMENT,
  43.   `Nombre` char(30) NOT NULL,
  44.   `Descripcion` char(100) NOT NULL,
  45.   PRIMARY KEY (`ID`)
  46. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
  47.  
  48. --
  49. -- Volcar la base de datos para la tabla `viviendas`
  50. --
comenta si tienes alguna duda saludos!
  #5 (permalink)  
Antiguo 25/07/2012, 08:51
 
Fecha de Ingreso: julio-2012
Ubicación: Valencia
Mensajes: 13
Antigüedad: 12 años, 5 meses
Puntos: 1
Respuesta: Upload múltiple a base datos mysql

lo siento NSD, pero tu código me da error en la fila 10 y no sé porqué...
De todas formas acabo de encontrar la solución buscando por la red.
En breve la dejaré acá para que queda constancia...
Un saludo
  #6 (permalink)  
Antiguo 25/07/2012, 16:25
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 7 meses
Puntos: 320
Respuesta: Upload múltiple a base datos mysql

habria que depurar la consola mysql para seber la causa del error pero posiblemente alguna sentencia este devolviendo error (o el insert o el select), a mi me funciona correctamente por lo que tambien puede ser alguna diferencia en la vercion de php o mysql de nuestros server.
por otra parte, si ya solucionaste no vale la pena seguir buscando la causa, si puedes publicala para que otros puedan usarla, saludos
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Etiquetas: upload
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 11:38.