Foros del Web » Programando para Internet » PHP »

Problemas con utilizar input select como array

Estas en el tema de Problemas con utilizar input select como array en el foro de PHP en Foros del Web. Hola que tal, bueno lo que pasa es que tengo un script para subir múltiples imágenes y tiene la opción de subir las imágenes directamente ...
  #1 (permalink)  
Antiguo 30/07/2012, 00:13
 
Fecha de Ingreso: agosto-2009
Mensajes: 292
Antigüedad: 14 años, 8 meses
Puntos: 5
Problemas con utilizar input select como array

Hola que tal, bueno lo que pasa es que tengo un script para subir múltiples imágenes y tiene la opción de subir las imágenes directamente a la carpeta publica o privada y por ejemplo si selecciono la carpeta public en todas se suben a la carpeta public, pero si una imagen las selecciono en la carpeta privada todas se suben a la privada.

Aquí les dejo mis códigos haber si me pueden echar la mano a corregir este problema

Código HTML:
Ver original
  1. <div class="panel"><input type="file" name="file[]" id="fileupload">
  2.     <div class="styled-select">
  3.       <select name="select-folder[]">
  4.       <option value="public">Public</option>
  5.       <option value="private">Private</option>
  6.     </select>
  7.     </div>
  8.   </div>
  9.  
  10.  
  11.   <div class="panel"><input type="file" name="file[]" id="fileupload">
  12.     <div class="styled-select">
  13.       <select name="select-folder[]">
  14.       <option value="public">Public</option>
  15.       <option value="private">Private</option>
  16.     </select>
  17.     </div>
  18.   </div>

Código PHP:
Ver original
  1. foreach($_POST["select-folder"] as $folder) {
  2.     if($folder == "private") {
  3.         $query_insert_folder = "INSERT INTO PRIVATE VALUES ('$id')";
  4.         $result_query_insert_folder = mysql_query($query_insert_folder);
  5.     }
  6. }

Saludos y gracias de antemano
  #2 (permalink)  
Antiguo 30/07/2012, 00:21
 
Fecha de Ingreso: julio-2012
Mensajes: 30
Antigüedad: 11 años, 8 meses
Puntos: 7
Respuesta: Problemas con utilizar input select como array

En el foreach cambia tu codigo a:

Código PHP:
foreach($_POST["select-folder"] as $index => $folder) { 
Con ello obtienes el índice de la variable y sabrás a cual file pertenece. Ejemplo:

Código PHP:
$_POST["select-folder"][0] = 'public';
$_FILES["file"][0]['tmp_name'] = 'something';

$_POST["select-folder"][1] = 'public';
$_FILES["file"][1]['tmp_name'] = 'something'
Es decir, que el $index del foreach que te digo debe ser igual al índice del array que trae los archivos.
  #3 (permalink)  
Antiguo 30/07/2012, 00:36
 
Fecha de Ingreso: agosto-2009
Mensajes: 292
Antigüedad: 14 años, 8 meses
Puntos: 5
Respuesta: Problemas con utilizar input select como array

Cita:
Iniciado por cvelazquez Ver Mensaje
En el foreach cambia tu codigo a:

Código PHP:
foreach($_POST["select-folder"] as $index => $folder) { 
Con ello obtienes el índice de la variable y sabrás a cual file pertenece. Ejemplo:

Código PHP:
$_POST["select-folder"][0] = 'public';
$_FILES["file"][0]['tmp_name'] = 'something';

$_POST["select-folder"][1] = 'public';
$_FILES["file"][1]['tmp_name'] = 'something'
Es decir, que el $index del foreach que te digo debe ser igual al índice del array que trae los archivos.
Hola que tal cvelazquez gracias por responder, lo acabo de probar así como comentas y sigue sucediendo lo mismo.

Saludos!
  #4 (permalink)  
Antiguo 30/07/2012, 17:28
 
Fecha de Ingreso: agosto-2009
Mensajes: 292
Antigüedad: 14 años, 8 meses
Puntos: 5
Respuesta: Problemas con utilizar input select como array

Hola que tal, se me olvido comentar que el código lo tengo de un bucle foreach y esta de la siguiente manera:

Código PHP:
Ver original
  1. <?php
  2.  
  3. foreach($_FILES['file']['name'] as $up => $tmp_name) {
  4.        
  5.     if($_FILES['file']['error'][$up] == 4) {
  6.         continue;
  7.     }
  8.        
  9.     if($_FILES['file']['error'][$up] == 0) {
  10.            
  11.         //...
  12.         //...      
  13.    
  14.     foreach($_POST["select-folder"] as $index_folder => $select_folder) {
  15.         if($select_folder == "private") {
  16.             $query_insert_folder = "INSERT INTO PRIVATE VALUES ('$id')";
  17.             $result_query_insert_folder = mysql_query($query_insert_folder);
  18.         }
  19.     }
  20.    
  21.    
  22.     }
  23. }
  24.    
  25. ?>

y si pongo el código

Código PHP:
Ver original
  1. foreach($_POST["select-folder"] as $index_folder => $select_folder) {
  2.         if($select_folder == "private") {
  3.             $query_insert_folder = "INSERT INTO PRIVATE VALUES ('$id')";
  4.             $result_query_insert_folder = mysql_query($query_insert_folder);
  5.         }
  6.     }

Fuera del foreach y selecciono varias imágenes en privado solamente me guarda una en privado, alguien sabe a que se debe esto?

Saludos y gracias de antemano
  #5 (permalink)  
Antiguo 30/07/2012, 20:47
 
Fecha de Ingreso: julio-2012
Mensajes: 30
Antigüedad: 11 años, 8 meses
Puntos: 7
Respuesta: Problemas con utilizar input select como array

Ok, en el primer foreach esta el error porque si subes multiples archivos el array que se guarda en $_FILES cambia. Mira, el array $_FILES subiendo un sólo archivo se forma así:

Código PHP:
$_FILES['file'] = array(
    
'tmp_name' 'letrasaleatorias',
    
'filename' => 'archivo.jpg',
    
'size' => 99999,
    
'error' => 0
); 
Como verás, es un array sencillo con sólo 4 índices (sino mal recuerdo haha). Pero cuando subes varios archivos el array se torna multidimensional:

Código PHP:
$_FILES['file'] = array(
    
=> array(
        
'tmp_name' 'letrasaleatorias',
        
'filename' => 'archivo.jpg',
        
'size' => 99999,
        
'error' => 0
    
),
    
=> array(
        
'tmp_name' 'letrasaleatorias2',
        
'filename' => 'archivo2.jpg',
        
'size' => 88888,
        
'error' => 0
    
),
); 
Bueno, ahora que ya sabes esto ya puedes realizar el foreach de forma correcta:

Código PHP:
foreach($_FILES['file'] as $indice => $archivo) {
           
        if(
$archivo['error'] == 4) {
            
//No se subio archivo alguno
            
continue;
            
        }elseif(
$archivo['error'] == 0){
            
//Se subio el archivo al servidor
            //El tmp_name esta en $archivo['tmp_name']
            //Ahora sólo resta saber que si es público ó privado
            
if($_POST['select-folder'][$indice] == 'private'){
                
//El archivo lo pones en la carpeta de privada y ejecutas el código que mencionabas
                
$query_insert_folder "INSERT INTO PRIVATE VALUES ('$id')";
                
$result_query_insert_folder mysql_query($query_insert_folder);
                
            }else{
                
//El archivo lo pones en la carpeta pública
            
}
        }
    } 
Salu2
  #6 (permalink)  
Antiguo 30/07/2012, 22:12
 
Fecha de Ingreso: agosto-2009
Mensajes: 292
Antigüedad: 14 años, 8 meses
Puntos: 5
Respuesta: Problemas con utilizar input select como array

Cita:
Iniciado por cvelazquez Ver Mensaje
Ok, en el primer foreach esta el error porque si subes multiples archivos el array que se guarda en $_FILES cambia. Mira, el array $_FILES subiendo un sólo archivo se forma así:

Código PHP:
$_FILES['file'] = array(
    
'tmp_name' 'letrasaleatorias',
    
'filename' => 'archivo.jpg',
    
'size' => 99999,
    
'error' => 0
); 
Como verás, es un array sencillo con sólo 4 índices (sino mal recuerdo haha). Pero cuando subes varios archivos el array se torna multidimensional:

Código PHP:
$_FILES['file'] = array(
    
=> array(
        
'tmp_name' 'letrasaleatorias',
        
'filename' => 'archivo.jpg',
        
'size' => 99999,
        
'error' => 0
    
),
    
=> array(
        
'tmp_name' 'letrasaleatorias2',
        
'filename' => 'archivo2.jpg',
        
'size' => 88888,
        
'error' => 0
    
),
); 
Bueno, ahora que ya sabes esto ya puedes realizar el foreach de forma correcta:

Código PHP:
foreach($_FILES['file'] as $indice => $archivo) {
           
        if(
$archivo['error'] == 4) {
            
//No se subio archivo alguno
            
continue;
            
        }elseif(
$archivo['error'] == 0){
            
//Se subio el archivo al servidor
            //El tmp_name esta en $archivo['tmp_name']
            //Ahora sólo resta saber que si es público ó privado
            
if($_POST['select-folder'][$indice] == 'private'){
                
//El archivo lo pones en la carpeta de privada y ejecutas el código que mencionabas
                
$query_insert_folder "INSERT INTO PRIVATE VALUES ('$id')";
                
$result_query_insert_folder mysql_query($query_insert_folder);
                
            }else{
                
//El archivo lo pones en la carpeta pública
            
}
        }
    } 
Salu2
Muchas gracias cvelazquez, ahora si ya funciona correctamente el script.

Saludos y nuevamente muchas gracias

Etiquetas: input, mysql, select
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 17:34.