Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] insertar multiples imagenes un un mismo input PDO

Estas en el tema de insertar multiples imagenes un un mismo input PDO en el foro de PHP en Foros del Web. hola amigos actualmente estoy tratando de armar un código que me permita insertar varias imágenes en un mismo input, para eso el input esta configurado ...
  #1 (permalink)  
Antiguo 02/04/2017, 15:05
Avatar de aviweb2015  
Fecha de Ingreso: abril-2016
Ubicación: venezuela
Mensajes: 215
Antigüedad: 8 años
Puntos: 1
insertar multiples imagenes un un mismo input PDO

hola amigos actualmente estoy tratando de armar un código que me permita insertar varias imágenes en un mismo input, para eso el input esta configurado de esta forma

Código PHP:
Ver original
  1. <input type="file" name="file[]" multiple>


método para insertar

Código PHP:
Ver original
  1. <!-- proceso para registrar-->
  2.  
  3.  
  4. <?php
  5.   if(!isset($_POST['guardar'])){
  6.    
  7.   }else{
  8.       $allowedExts = array("gif", "jpeg", "jpg", "png");
  9.       $temp = explode(".", $_FILES["file"]["name"]);
  10.       $extension = end($temp);
  11.       $imagenes_multiple="";
  12.       $random=rand(1,999999);
  13.       if ((($_FILES["file"]["type"] == "image/gif")
  14.         || ($_FILES["file"]["type"] == "image/jpeg")
  15.         || ($_FILES["file"]["type"] == "image/jpg")
  16.         || ($_FILES["file"]["type"] == "image/pjpeg")
  17.         || ($_FILES["file"]["type"] == "image/x-png")
  18.         || ($_FILES["file"]["type"] == "image/png"))){
  19.         //Verificamos que sea una imagen
  20.         if ($_FILES["file"]["error"] > 0){
  21.           //verificamos que venga algo en el input file
  22.           echo "Error numero: " . $_FILES["file"]["error"] . "<br>";
  23.         }else{
  24.           //subimos la imagen
  25.  
  26.           $imagenes_multiple= $random.'_'.$_FILES["file"]["name"];
  27.           if(file_exists("../galerias/".$random.'_'.$_FILES["file"]["name"])){
  28.               echo $_FILES["file"]["name"] . " Ya existe. ";
  29.             }else{
  30.           move_uploaded_file($_FILES["file"]["tmp_name"],
  31.           "../galerias/" .$random.'_'.$_FILES["file"]["name"]);
  32.  
  33.  
  34.  
  35.  
  36.  
  37. foreach ($_FILES['file']['name'] as $i => $name) {
  38.  
  39.  
  40. $sql=$DB_con->prepare("INSERT INTO detalles_categorias (fk_categorias, precio, descripcion, detalles, imagenes_multiple) VALUES
  41. (:fk_categorias, :precio, :descripcion ,:detalles ,:imagenes_multiple)");
  42.  
  43. $sql->bindParam(':fk_categorias',$_POST['fk_categorias']);
  44. $sql->bindParam(':precio',$_POST['precio']);
  45. $sql->bindParam(':descripcion',$_POST['descripcion']);
  46. $sql->bindParam(':detalles',$_POST['detalles']);
  47. $sql->bindParam(':imagenes_multiple',$_POST['imagenes_multiple'][$i]);
  48. $sql->execute();
  49.  
  50. }
  51.  
  52. if($sql)
  53.  
  54.  
  55.        
  56. $mensaje= "<div class='col s12 card-panel teal lighten-2 center'>
  57. <h5 class='black-text text-darken-2 center CONDENSED LIGHT5'>
  58. ¡ Bien Hecho: Registro Insertado Correctamente !
  59. </h5>
  60. </div>";
  61. //header("refresh:5;registrar_multiple.php");
  62.           }
  63.         }
  64.       }else{
  65.  
  66. $mensaje= "<div class='col s12 card-panel blue lighten-2 center'>
  67. <h5 class='black-text text-darken-2 center CONDENSED LIGHT5'>
  68. ¡ Ups Aviso: El Registro ya se Encuentra Insertado o el Formato no es Soportado!
  69. </h5>
  70. </div>";
  71. //header("refresh:5;registrar_multiple.php");
  72.  
  73.       }
  74.   }
  75. ?>


pero no logro que me funcione me da la siguiente advertencia:

Warning: explode() expects parameter 2 to be string, array given in C:\xampp\htdocs\multiple_img\admin\registrar_multi ple.php on line 29

Warning: end() expects parameter 1 to be array, null given in C:\xampp\htdocs\multiple_img\admin\registrar_multi ple.php on line 30



gracias de ante mano
__________________
yoclens avilan
  #2 (permalink)  
Antiguo 02/04/2017, 16:49
 
Fecha de Ingreso: septiembre-2015
Mensajes: 142
Antigüedad: 8 años, 7 meses
Puntos: 13
Respuesta: insertar multiples imagenes un un mismo input PDO

a ver los problemas te los marca claramente


Cita:
Warning: explode() expects parameter 2 to be string, array given in C:\xampp\htdocs\multiple_img\admin\registrar_multi ple.php on line 29

Warning: end() expects parameter 1 to be array, null given in C:\xampp\htdocs\multiple_img\admin\registrar_multi ple.php on line 30
le estas pasando un array , que es el del input type file, cierto ?
y el segundo error es por el primero.

ya que :
Código PHP:
Ver original
  1. $extensión = end($temp);
  2. espera la variable de $temp.

recorre el array del input file como recorres otro array while , for , foreach y dentro hacer las validaciones correspondientes.
  #3 (permalink)  
Antiguo 03/04/2017, 14:00
Avatar de aviweb2015  
Fecha de Ingreso: abril-2016
Ubicación: venezuela
Mensajes: 215
Antigüedad: 8 años
Puntos: 1
Respuesta: insertar multiples imagenes un un mismo input PDO

Cita:
Iniciado por sonystar_17 Ver Mensaje
a ver los problemas te los marca claramente




le estas pasando un array , que es el del input type file, cierto ?
y el segundo error es por el primero.

ya que :
Código PHP:
Ver original
  1. $extensión = end($temp);
  2. espera la variable de $temp.

recorre el array del input file como recorres otro array while , for , foreach y dentro hacer las validaciones correspondientes.



gracias amigo por tu respuesta, he modificado todo el código y he conseguido que trabaje pero el único problema es que me repite los registros en la tabla detalles_categorias cuando solo debería insertar 1 registro porque en la tabla detalles_img guardo el id del registro detalles_categorias conjuntamente con las imagenes


anexo codigo

Código PHP:
Ver original
  1. <?php
  2.  
  3.   //error_reporting( ~E_NOTICE ); // avoid notice
  4.  
  5.  include '../conexion/conexion.php';
  6.  
  7.   if(isset($_POST['guardar'])){
  8.  
  9.  
  10.     foreach($_FILES['imagen']['tmp_name'] as $key => $tmp_name ){
  11.    
  12.     $fk_categorias = $_POST['fk_categorias'];
  13.     $precio = $_POST['precio'];
  14.     $descripcion = $_POST['descripcion'];
  15.     $detalles = $_POST['detalles'];
  16.  
  17.     $imgFile = $key.$_FILES['imagen']['name'][$key];
  18.     $tmp_dir = $_FILES['imagen']['tmp_name'][$key];
  19.     $imgSize = $_FILES['imagen']['size'][$key];
  20.    
  21.    
  22.     if(empty($_POST["fk_categorias"])){
  23.       $errMSG = "Por favor ingrese la categoria.";
  24.     }
  25.     else if(empty($precio)){
  26.       $errMSG = "Por favor ingrese el precio.";
  27.     }
  28.     else if(empty($descripcion)){
  29.       $errMSG = "Por favor ingrese la descripcion del articulo.";
  30.     }
  31.     else if(empty($detalles)){
  32.       $errMSG = "Por favor ingrese algun detalle para el articulo.";
  33.     }
  34.  
  35.     else if(empty($imgFile)){
  36.       $errMSG = "Por favor Seleccione los Archivo de imagen.";
  37.     }
  38.     else
  39.     {
  40.       $upload_dir = '../galerias/'; // upload directory
  41.  
  42.       $imgExt = strtolower(pathinfo($imgFile,PATHINFO_EXTENSION)); // get image extension
  43.    
  44.       // valid image extensions
  45.       $valid_extensions = array('jpeg', 'jpg', 'png', 'gif'); // valid extensions
  46.    
  47.       // rename uploading image
  48.       $imagen = rand(1000,1000000).".".$imgExt;
  49.        
  50.       // allow valid image file formats
  51.       if(in_array($imgExt, $valid_extensions)){    
  52.         // Check file size '5MB'
  53.         if($imgSize < 10000000)        {
  54.  
  55.           move_uploaded_file($tmp_dir,$upload_dir.$imagen);
  56.         }
  57.  
  58.         else{
  59.              $errMSG = "¡ Ups Aviso: Lo siento, su archivo es demasiado grande !";
  60.              //header("refresh:5;registrar_multiple.php");
  61.  
  62.         }
  63.       }
  64.          else{
  65.               $errMSG = "¡ Ups Aviso: Lo sentimos, sólo se permiten archivos JPG, JPEG, PNG y GIF !";
  66.               header("refresh:5;registrar_multiple.php");
  67.         }
  68.     }
  69.    
  70.    
  71.     // si no hay errores continuo...
  72.     if(!isset($errMSG))
  73.     {
  74.  
  75.       $sql=$DB_con->prepare("INSERT INTO detalles_categorias (fk_categorias, precio, descripcion, detalles) VALUES
  76.      (:fk_categorias, :precio, :descripcion ,:detalles)");
  77.       $sql->bindParam(':fk_categorias',$_POST['fk_categorias']);
  78.       $sql->bindParam(':precio',$_POST['precio']);
  79.       $sql->bindParam(':descripcion',$_POST['descripcion']);
  80.       $sql->bindParam(':detalles',$_POST['detalles']);
  81.       $sql->execute();
  82.       $last_id = $DB_con->lastInsertId();
  83.  
  84.  
  85.  
  86.       $sql2=$DB_con->prepare("INSERT INTO detalles_img (id, imagen) VALUES (:id, :imagen)");
  87.       $sql2->bindParam(':id',$last_id);
  88.       $sql2->bindParam(':imagen',$imagen);
  89.      
  90.  
  91.       if($sql2->execute())
  92.       {
  93.        
  94.         $successMSG = "¡ Bien Hecho: Registro Insertado Correctamente !";
  95.         //header("refresh:5;registrar_multiple.php");
  96.  
  97.       }
  98.       else
  99.       {
  100.  
  101.               $errMSG = "¡ Ups Aviso: Hubo un error al insertar el registro !";
  102.               header("refresh:5;registrar_multiple.php");
  103.              
  104.  
  105.       }
  106.     }
  107.   }
  108. }
  109. ?>
__________________
yoclens avilan
  #4 (permalink)  
Antiguo 04/04/2017, 07:56
Avatar de aviweb2015  
Fecha de Ingreso: abril-2016
Ubicación: venezuela
Mensajes: 215
Antigüedad: 8 años
Puntos: 1
Respuesta: insertar multiples imagenes un un mismo input PDO

ya lo pude solucionar anexo código

Código PHP:
Ver original
  1. <!-- proceso para registrar-->
  2. <?php
  3. error_reporting( ~E_NOTICE ); // avoid notice
  4. include '../conexion/conexion.php';
  5. if (isset($_POST['guardar'])) {
  6.     $fk_categorias = $_POST['fk_categorias'];
  7.     $precio        = $_POST['precio'];
  8.     $descripcion   = $_POST['descripcion'];
  9.     $detalles      = $_POST['detalles'];
  10.    
  11.  
  12.  
  13.     if (empty($fk_categorias)) {
  14.         $errMSG = "Por favor ingrese la categoria.";
  15.     } else if (empty($precio)) {
  16.         $errMSG = "Por favor ingrese el precio.";
  17.     } else if (empty($descripcion)) {
  18.         $errMSG = "Por favor ingrese la descripcion del articulo.";
  19.     } else if (empty($detalles)) {
  20.         $errMSG = "Por favor ingrese algun detalle para el articulo.";
  21.     }
  22.     if (empty($errMSG)) {
  23.         $imagen_bd = array();
  24.         foreach ($_FILES['imagen']['tmp_name'] as $key => $tmp_name) {
  25.             if ( ! empty($errMSG)) {
  26.                 //echo $errMSG;
  27.                 header("refresh:5;registrar_multiple.php");
  28.                 break;
  29.             }
  30.             $imgFile          = $key . $_FILES['imagen']['name'][$key];
  31.             $tmp_dir          = $_FILES['imagen']['tmp_name'][$key];
  32.             $imgSize          = $_FILES['imagen']['size'][$key];
  33.             $upload_dir       = '../galerias/'; // upload directory
  34.             $imgExt           = strtolower(pathinfo($imgFile, PATHINFO_EXTENSION)); // get image extension
  35.             //validar la extension de la imagen
  36.             $valid_extensions = array(
  37.                 'jpeg',
  38.                 'jpg',
  39.                 'png',
  40.                 'gif'
  41.             ); // valid extensions
  42.             // rename uploading image
  43.             $imagen           = rand(1000, 1000000) . "." . $imgExt;
  44.             $imagen_bd[]      = $imagen;
  45.             // allow valid image file formats
  46.             if (in_array($imgExt, $valid_extensions)) {
  47.                 // Check file size '5MB'
  48.                 if ($imgSize < 10000000) {
  49.                     move_uploaded_file($tmp_dir, $upload_dir . $imagen);
  50.                 } else {
  51.                     $errMSG = "¡ Ups Aviso: Lo siento, su archivo es demasiado grande !";
  52.                     header("refresh:5;registrar_multiple.php");
  53.                 }
  54.             } else {
  55.                 $errMSG = "¡ Ups Aviso: Lo sentimos, sólo se permiten archivos JPG, JPEG, PNG y GIF !";
  56.                 header("refresh:5;registrar_multiple.php");
  57.             }
  58.         }
  59.         // si no hay errores continuo...
  60.         $sql = $DB_con->prepare("INSERT INTO detalles_categorias (fk_categorias, precio, descripcion, detalles) VALUES (:fk_categorias, :precio, :descripcion ,:detalles)");
  61.         $sql->bindParam(':fk_categorias', $fk_categorias);
  62.         $sql->bindParam(':precio', $precio);
  63.         $sql->bindParam(':descripcion', $descripcion);
  64.         $sql->bindParam(':detalles', $detalles);
  65.         $sql->execute();
  66.         $last_id = $DB_con->lastInsertId();
  67.         foreach ($imagen_bd as $img) {
  68.             $sql2    = $DB_con->prepare("INSERT INTO detalles_img (id, imagen) VALUES (:id, :imagen)");
  69.             $sql2->bindParam(':id', $last_id);
  70.             $sql2->bindParam(':imagen', $img);
  71.             if ($sql2->execute()) {
  72.                 $successMSG = "¡ Bien Hecho: Registro Insertado Correctamente !";
  73.                 header("refresh:5;registrar_multiple.php");
  74.             } else {
  75.                 $errMSG = "¡ Ups Aviso: Hubo un error al insertar el registro !";
  76.                 header("refresh:5;registrar_multiple.php");
  77.             }
  78.         }
  79.     } else {
  80.         //echo $errMSG;
  81.         //header("refresh:5;registrar_multiple.php");
  82.     }
  83. }
  84. ?>
  85. <!-- fin proceso para registrar-->
__________________
yoclens avilan

Etiquetas: imagenes, input, multiples, pdo, registro, sql
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 16:01.