Foros del Web » Programando para Internet » PHP »

ingresar varias imágenes a base de dtos

Estas en el tema de ingresar varias imágenes a base de dtos en el foro de PHP en Foros del Web. saludos, tengo un problema puesto que no se como hacer para ingresar varias imagenes a una base de datos, el ejercicio es el siguiente. el ...
  #1 (permalink)  
Antiguo 29/07/2015, 15:51
 
Fecha de Ingreso: mayo-2015
Mensajes: 53
Antigüedad: 8 años, 10 meses
Puntos: 0
ingresar varias imágenes a base de dtos

saludos, tengo un problema puesto que no se como hacer para ingresar varias imagenes a una base de datos, el ejercicio es el siguiente.

el ejercicio trata de hacer un catalogo de vehiculos disponibles par ala venta en un almacen, tengo una unica tabla llamada vehiculos con todos los datos generales del vehiculo, ahora al diligenciar el formulario necesito que se puedan adjuntar VARIAS fotos de dicho vechiculo, logre mover las imagenes a una ruta especifica, pero no se como hacer con la base de datos? creo varios campos llamados imagen 1, imagen 2 etc en la bd? o como podria hacer?

el codigo del forrmulario es el siguiente:

Código HTML:
<form method="post" enctype="multipart/form-data">
                	<table  border="0" align="center">
                    	<tr>
                        	<td style="text-align:right">Marca</td>
                            <td align="left"><input type="text" name="marca"style="width:300px"></td>
                        </tr>
                        <tr>
                        	<td style="text-align:right">Linea</td>
                            <td><input type="text" name="linea"style="width:500px"></td>
                        </tr>
                        <tr>
                        	<td style="text-align:right">Modelo</td>
                            <td align="left"><input type="text" name="modelo" style="width:80px"></td>
                        </tr>
                        <tr>
                        	<td style="text-align:right">Kilometraje</td>
                            <td align="left"><input type="text" name="kilometraje" style="width:80px">Kilometros</td>
                        </tr>
                        <tr>
                        	<td style="text-align:right">Precio</td>
                            <td align="left"><input type="text" name="precio" style="width:80px"></td>
                        </tr>
                        <tr>
                        	<td style="text-align:right">Imagenes</td>
                            <td align="left"><input type="file" name="archivo[]" multiple="multiple" style="width:200px"></td>
                        </tr>
                        <tr>
                        	<td style="text-align:right">Descripción</td>
                            <td><textarea name="descipcion" cols="30" rows="4" id="message" style="width:500px"></textarea></td>
                        </tr>
                    </table>
                     <input type="submit" name="enviar" value="Enviar">
                    
                </form> 
el codigo con el cual muevo las imagenes a mi carpeta es el siguiente:

Código PHP:
# definimos la carpeta destino
                 
$carpetaDestino="archivos/";
                 if (isset(
$_POST['enviar']))
                 {
                    
# si hay algun archivo que subir
                    
if($_FILES["archivo"]["name"][0])
                    {
                         
# recorremos todos los arhivos que se han subido
                        
for($i=0;$i<count($_FILES["archivo"]["name"]);$i++)
                        {
                             
# si es un formato de imagen
                            
if($_FILES["archivo"]["type"][$i]=="image/jpeg" || $_FILES["archivo"]["type"][$i]=="image/pjpeg" || $_FILES["archivo"]["type"][$i]=="image/gif" || $_FILES["archivo"]["type"][$i]=="image/png")
                            {
                 
                                
# si exsite la carpeta o se ha creado
                                
if(file_exists($carpetaDestino) || @mkdir($carpetaDestino))
                                {
                                    
$origen=$_FILES["archivo"]["tmp_name"][$i];
                                    
$destino=$carpetaDestino.$_FILES["archivo"]["name"][$i];
                 
                                    
# movemos el archivo
                                    
if(@move_uploaded_file($origen$destino))
                                    {
                                        echo 
"<br>".$_FILES["archivo"]["name"][$i]." movido correctamente";
                                    }else{
                                        echo 
"<br>No se ha podido mover el archivo: ".$_FILES["archivo"]["name"][$i];
                                    }
                                }else{
                                    echo 
"<br>No se ha podido crear la carpeta: up/".$user;
                                }
                            }else{
                                echo 
"<br>".$_FILES["archivo"]["name"][$i]." - NO es imagen jpg";
                            }
                        }
                    }else{
                        echo 
"<br>No se ha subido ninguna imagen";
                    }
                 }
                                 
                
?> 
Se como hacer el ingreso a la base de datos y todo eso, pero no tengo mucha claridad como hacer para poder contar con todas las imagenes que ingrese.

Si fuese una sola imagen simplemente agrego un campo a la bd llamada imagen y copio el nombre del archivo, pero mi problema es como hacerlo con varias imagenes.
  #2 (permalink)  
Antiguo 29/07/2015, 16:16
 
Fecha de Ingreso: noviembre-2005
Mensajes: 144
Antigüedad: 18 años, 5 meses
Puntos: 2
Respuesta: ingresar varias imágenes a base de dtos

yo crearia una tabla exclusiva para las imagenes, despues si necesito relacionar con otras tablas, en la tabla imagen pondria campos para agrupar.
  #3 (permalink)  
Antiguo 29/07/2015, 21:07
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 2 meses
Puntos: 69
Respuesta: ingresar varias imágenes a base de dtos

Depende del número de imágenes que se puedan cargar y si va a ser un número fijo o variable. Podrías usar un campo por cada imagen, pero yo colocaría en un solo campo todos los nombres de las imágenes separados por comas.
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #4 (permalink)  
Antiguo 30/07/2015, 00:34
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: ingresar varias imágenes a base de dtos

Buenas,

Otra alternativa para obtener en un array todas las url (algo similar a una petición a una db) puedes serializar los datos.

serialize, unserialize, json_encode, json_decode

Así no tendrás una limitación por el número de imágenes/campos.

Siempre contemplando que solo puedes usar una tabla.

Si puedes usar mas tablas, o las fotos asociadas van a ser muchas, sería interesante plantearse una tabla solo para esto.

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #5 (permalink)  
Antiguo 30/07/2015, 06:14
 
Fecha de Ingreso: julio-2015
Mensajes: 7
Antigüedad: 8 años, 8 meses
Puntos: 0
Respuesta: ingresar varias imágenes a base de dtos

Cita:
Iniciado por juansemaster Ver Mensaje
yo crearia una tabla exclusiva para las imagenes, despues si necesito relacionar con otras tablas, en la tabla imagen pondria campos para agrupar.
Hola, Estoy de acuerdo con juansemaster. Creas una tabla exclusiva para las imagenes con dos campos (lo mas basico, id, rutaimg), asi puedes identificar (hacer select para mostrar en un futuro) donde pertenece cada imagen y localizar dicha imagen, obteniendo la ruta (tambien podrias guardar solo el nombre de la imagen, especificando una variable $rutaimg que al mostrar la imagen quedaria mas o menos asi)
Código PHP:
Ver original
  1. echo '<img src="'.$rutaimg.$nombreimg.'">
espero te haya sido de ayuda.
  #6 (permalink)  
Antiguo 30/07/2015, 09:30
 
Fecha de Ingreso: mayo-2015
Mensajes: 53
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: ingresar varias imágenes a base de dtos

Me asalta una duda, ya cree la tabla imágenes con in id y imagen, incorporando dentro del for la sentencia envió el nombre de cada imagen a la bd, pero me hago bolas al enviarle el id pero el del vehículo, osea el que se genera cunado ingreso un vehículo, el cual es autorincrementable, y ese es el que quiero enviar a la tabla id de imágenes, para poder relacionarlos..

porque se supone que solo después de que envio los datos del vehiculo es cuando obtengo el nuevo id, entonces como hago para enviarlo ese mismo id a la tabla de imagenes?
  #7 (permalink)  
Antiguo 30/07/2015, 09:37
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 2 meses
Puntos: 69
Respuesta: ingresar varias imágenes a base de dtos

Primero insertas los datos del vehículo en la tabla correspondiente, luego obtienes el último id generado con

mysqli_insert_id ($con)

Y luego insertas el id que acabaste de obtener con el nombre de cada imagen a guardar.
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #8 (permalink)  
Antiguo 31/07/2015, 09:05
 
Fecha de Ingreso: mayo-2015
Mensajes: 53
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: ingresar varias imágenes a base de dtos

Listo ya lo he solucionado, ahora tengo otro problema, no quiero abrir otro hilo par ano saturar el foro, sucede que agregue dos tablas a mi base de datos, una llamada marcas, y otra llamada lineas, en teoría cada marca tiene varias lineas, por ejemplo chevrolet tiene el aveo, spark, sail. etc, la idea es poner un select que busque en la tabla marcas la marca, y luego despliegue en un segundo select las lineas de esa marca, he conseguido un código que lo hace por medio de ajax, ahor alo qu eno puedo es capturar o traer el id de la linea, aqui los codigos:

el fomulario inicial:

Código HTML:
Ver original
  1. <?php
  2.                @$consulta2 = "SELECT * FROM marcas";
  3.                 $resultado2 = $conexion->query($consulta2);
  4.                 ?>
  5.                 <form method="post" enctype="multipart/form-data" name="form1">
  6.                     <table  border="0" align="center">
  7.                         <div>
  8.                         <tr>
  9.                             <td style="text-align:right">Marca</td>
  10.                             <td align="left">
  11.                            
  12.                             <select name="marca" id="" onchange="from(document.form1.marca.value,'midiv','lineas.php')">
  13.                                 <option value="">Seleccione</option>
  14.                                 <?php
  15.                                 while($fila=mysqli_fetch_assoc($resultado2))
  16.                                 {
  17.                                     echo "<option value='".$fila['id']."'>".$fila['nombre']."</option>";
  18.                                 }
  19.                                 ?>
  20.                             </select>
  21.                             </td>
  22.                         </tr>
  23.                         </div>
  24.                         <tr>
  25.                             <td style="text-align:right">Linea</td>
  26.                             <td align="left" style="height:19px"><div id="midiv"></td>  
  27.                         </div>
  28.                         </tr>
  29.                        
  30.                         <tr>
  31.                             <td style="text-align:right">Modelo</td>
  32.                             <td align="left"><input type="text" name="modelo" style="width:80px"></td>
  33.                         </tr>
  34.                         <tr>
  35.                             <td style="text-align:right">Kilometraje</td>
  36.                             <td align="left"><input type="text" name="kilometraje" style="width:80px">Kilometros</td>
  37.                         </tr>
  38.                         <tr>
  39.                             <td style="text-align:right">Precio</td>
  40.                             <td align="left"><input type="text" name="precio" style="width:80px"></td>
  41.                         </tr>
  42.                         <tr>
  43.                             <td style="text-align:right">Imagenes</td>
  44.                             <td align="left"><input type="file" name="archivo[]" multiple style="width:200px"></td>
  45.                         </tr>
  46.                         <tr>
  47.                             <td style="text-align:right">Descripción</td>
  48.                             <td><textarea name="descipcion" cols="30" rows="4" id="message" style="width:500px"></textarea></td>
  49.                         </tr>
  50.                     </table>
  51.                      <input type="submit" name="enviar" value="Enviar">
  52.                    
  53.                 </form>

el archivo ajax:

Código Javascript:
Ver original
  1. unction obtiene_http_request()
  2. {
  3. var req = false;
  4. try
  5.   {
  6.     req = new XMLHttpRequest(); /* p.e. Firefox */
  7.   }
  8. catch(err1)
  9.   {
  10.   try
  11.     {
  12.      req = new ActiveXObject("Msxml2.XMLHTTP");
  13.   /* algunas versiones IE */
  14.     }
  15.   catch(err2)
  16.     {
  17.     try
  18.       {
  19.        req = new ActiveXObject("Microsoft.XMLHTTP");
  20.   /* algunas versiones IE */
  21.       }
  22.       catch(err3)
  23.         {
  24.          req = false;
  25.         }
  26.     }
  27.   }
  28. return req;
  29. }
  30. var miPeticion = obtiene_http_request();
  31. //***************************************************************************************
  32. function from(id,ide,url){
  33.         var mi_aleatorio=parseInt(Math.random()*99999999);//para que no guarde la página en el caché...
  34.         var vinculo=url+"?id="+id+"&rand="+mi_aleatorio;
  35.         //alert(vinculo);
  36.         miPeticion.open("GET",vinculo,true);//ponemos true para que la petición sea asincrónica
  37.         miPeticion.onreadystatechange=miPeticion.onreadystatechange=function(){
  38.                if (miPeticion.readyState==4)
  39.                {
  40.                    //alert(miPeticion.readyState);
  41.                        if (miPeticion.status==200)
  42.                        {
  43.                                 //alert(miPeticion.status);
  44.                                //var http=miPeticion.responseXML;
  45.                                var http=miPeticion.responseText;
  46.                                document.getElementById(ide).innerHTML= http;
  47.  
  48.                        }
  49.                }/*else
  50.                {
  51.             document.getElementById(ide).innerHTML="<img src='ima/loading.gif' title='cargando...' />";
  52.  
  53.                 }*/
  54.        }
  55.        miPeticion.send(null);
  56.  
  57. }
  58. //************************************************************************************************
  59. function limpiar()
  60. {
  61.     document.form.reset();
  62.    
  63. }


y el archivo lineas.php

Código PHP:
Ver original
  1. <?php require_once ('conexion/conexion.php');  
  2. $id=$_GET['id'];
  3. @$consulta2 = "SELECT * FROM lineas WHERE marcaId='".$id."'";
  4. $resultado2 = $conexion->query($consulta2);
  5. ?>
  6. <select>
  7.     <option value="">Seleccione</option>
  8.     <?php while($fila=mysqli_fetch_assoc($resultado2))
  9.     { ?>
  10.         <option><?php echo $fila['nombre']; ?></option>
  11.     <?php } ?>
  12. </select>


Como ven para almacenar estos datos en la tabla vehículo, capturo todos por valores por POST del formulario, pero el campo "linea" es traído desde un div "midiv" entonces no se como capturarlo, gracias

Última edición por diegodelpiero; 31/07/2015 a las 12:00
  #9 (permalink)  
Antiguo 01/08/2015, 07:14
 
Fecha de Ingreso: mayo-2015
Mensajes: 53
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: ingresar varias imágenes a base de dtos

Porfavor alguien que me colabore.
  #10 (permalink)  
Antiguo 01/08/2015, 08:46
 
Fecha de Ingreso: marzo-2014
Mensajes: 64
Antigüedad: 10 años, 1 mes
Puntos: 1
Respuesta: ingresar varias imágenes a base de dtos

programandoointentandolo.com/2012/11/como-hacer-una-galeria-de-imagenes-en-php.html aqui lo hacen muy sencillo ocupando indispensablemente 2 archivos js y un foreach
  #11 (permalink)  
Antiguo 01/08/2015, 12:51
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 2 meses
Puntos: 69
Respuesta: ingresar varias imágenes a base de dtos

Aquí te paso este código para que lo estudies y lo implementes, está muy fácil de usar:

Este es el código de la página principal:

Código PHP:
Ver original
  1. <?php
  2.     $mysql = new mysqli("localhost", "root", "", "prueba");
  3. ?>
  4. <html>
  5.     <head>
  6.         <title></title>
  7.         <script>
  8.             function GetLinea(str) {
  9.                 if(window.XMLHttpRequest) {
  10.                     xmlhttp = new XMLHttpRequest();
  11.                 }
  12.                 else if(window.ActiveXObject) {
  13.                     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  14.                 }
  15.                 xmlhttp.onreadystatechange = muestraContenido;
  16.                 xmlhttp.open("GET", "linea.php?marca=" + str, true);
  17.                 xmlhttp.send(null);
  18.                
  19.                 function muestraContenido() {
  20.                     if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
  21.                         var srespuesta = xmlhttp.responseText;
  22.                         document.getElementById("divlinea").innerHTML = srespuesta;
  23.                     }
  24.                 }
  25.             }
  26.         </script>
  27.     </head>
  28.     <body>
  29.         <form name="formulario" action="" method="post">
  30.             <div style="float: left; margin-right: 15px;">
  31.                 <select name="marca" onchange="GetLinea(this.value)">
  32.                     <option value="" selected>Seleccione...</option>
  33.                     <?php
  34.                         $sql = "SELECT * FROM Marca ORDER BY Marca ASC";
  35.                         $result = $mysql->query($sql);
  36.                         while ($row = $result->fetch_assoc())
  37.                         {
  38.                             echo "<option value='{$row['ID']}'>{$row['Marca']}</option>";
  39.                         }
  40.                     ?>
  41.                 </select>
  42.             </div>
  43.             <div id="divlinea">
  44.                 <select name="marca" onchange="GetLinea(this.value)">
  45.                     <option value="" selected>Seleccione...</option>
  46.                 </select>
  47.             </div>
  48.         </form>
  49.     </body>
  50. </html>

Este es el código de la página que devuelve las líneas pertenecientes a una marca (linea.php):
Código PHP:
Ver original
  1. <?php
  2.     $mysql = new mysqli("localhost", "root", "", "prueba");
  3.     if (isset($_GET['marca']))
  4.     {
  5.         $marca = $_GET['marca'];
  6.         $sql = "SELECT * FROM linea WHERE Marca = '{$marca}' ORDER BY Linea ASC";
  7.         $result = $mysql->query($sql);
  8.         echo "<select name='linea'>";
  9.         echo "<option value='' selected>Seleccione...</option>";
  10.         while ($row = $result->fetch_assoc())
  11.         {
  12.             echo "<option value='{$row['ID']}'>{$row['Linea']}</option>";
  13.         }
  14.         echo "</select>";
  15.     }
  16. ?>

Ajústalos a tus necesidades.
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]

Etiquetas: formulario, tabla
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:32.