Foros del Web » Programando para Internet » PHP »

Problema con multiple upload de archivos

Estas en el tema de Problema con multiple upload de archivos en el foro de PHP en Foros del Web. Hola a todos! Tengo un problema con este código y creo que el tema debe de estar en el javascript, por eso creí conveniente postearlo ...
  #1 (permalink)  
Antiguo 02/07/2008, 09:15
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 22 años, 6 meses
Puntos: 1
Problema con multiple upload de archivos

Hola a todos! Tengo un problema con este código y creo que el tema debe de estar en el javascript, por eso creí conveniente postearlo acá.
Resulta que estoy tratando de realizar múltiples upluads pero solo me sube el primer archivo seleccionado. Todo este código va en la misma página. Les muestro el código:

Este es el formulario: upload.php
Código HTML:
<form action="" method="post" enctype="multipart/form-data">
  <p>Seleccionar archivo:
<input type="file" name="attach" id="attach" onchange="setBlock();" />
<div id="moreUploads"></div>
<div id="moreLink" style="display:none;">
<a href="javascript:addFileInput();">Agregar otro Archivo</a>
</div>
    <input type="submit" name="enviar" value="Upload" />
    <input type="hidden" name="action" value="upload" />
</form> 
Este es el código javascript:
Código:
<script language="javascript">
var upload_number = 2;
function addFileInput() {
 	var d = document.createElement("div");
 	var file = document.createElement("input");
 	file.setAttribute("type", "file");
 	file.setAttribute("name", "attach"+upload_number);
 	d.appendChild(file);
 	document.getElementById("moreUploads").appendChild(d);
 	upload_number++;
}
function setBlock() {
   document.getElementById('moreLink').style.display = 'block';
}
</script>
Y este el código que procesa los datos para subirlos al servidor:
Código PHP:
<?
      $rpta 
"";
      if (
$_POST["action"] == "upload") {
          
$tmpfile $_FILES['attach']['tmp_name'];
          
$tmpname $_FILES['attach']['name'];
          
$ftpuser "xxxxxx";
          
$ftppass "xxxxxx";
          
$ftppath "ftp.miservirod.com/public_html/web/fotos/";
          
$ftpurl "ftp://".$ftpuser.":".$ftppass."@".$ftppath;

          if (
$tmpname != "") {
              
$fp fopen($tmpfile'r');
              
$ch curl_init();
              
curl_setopt($chCURLOPT_URL$ftpurl.$tmpname);
              
curl_setopt($chCURLOPT_UPLOAD1);
              
curl_setopt($chCURLOPT_INFILE$fp);
              
curl_setopt($chCURLOPT_INFILESIZEfilesize($tmpfile));
              
curl_exec($ch);
              
$error curl_errno($ch);
              
curl_close ($ch);
              if (
$error == 0) {
                  
$rpta 'Archivo subido correctamente.';
              } else {
                  
$rpta 'Error al subir el archivo.';
              }
          } else {
              
$rpta 'Seleccionar un archivo.';
          }
      }

?>
Como les decia anteriormente, solo me sube el primer archivo seleccionado. ¿Dónde puede estar el error?
Muchas gracias a todos.
Saludos. Marx.
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #2 (permalink)  
Antiguo 02/07/2008, 09:27
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Respuesta: Problema con multiple upload de archivos

Hola:

Creo que tu problema es php en vez de javascript... por lo que veo no estás considerando los campos file como un array, y en la recepción solo contemplas un archivo...

En php los arrays se reciben como tales, si los nombre de esos campos terminan con un juego de corchetes, y cada nuevo campo que estás creando, tiene un nombre único que no tiene que ver con un array (a todos tus nombres le faltan los corchetes)

Busca en las FAQs que yo mismo he puesto un tema sobre adjuntar varios ficheros, y si te parece bien, haznos saber si quieres que movamos el mensaje al foro php (que creo que es donde tienes más problemas(

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 02/07/2008, 09:50
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 22 años, 6 meses
Puntos: 1
Respuesta: Problema con multiple upload de archivos

Hola caricatos! Gracias por tu comentario y sí, te agradecería por favor si puedes mover este hilo a php ya que estoy revisando el código y no logro encontrar el problema.

Muchas gracias nuevamente y saludos. Marx.
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #4 (permalink)  
Antiguo 02/07/2008, 11:35
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 22 años, 6 meses
Puntos: 1
Respuesta: Problema con multiple upload de archivos

Estuve viendo el ejemplo de caricatos y tratando de ver donde está el problema para subir varios archivos y no doy pie con bola. Es el tema de arrays pero con estos scripts no logro encontrarle la vuelta.
¿Alguna sugerencia?
Gracias a todos.
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #5 (permalink)  
Antiguo 04/07/2008, 08:00
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 22 años, 6 meses
Puntos: 1
Respuesta: Problema con multiple upload de archivos

Seguro a muchos les va a servir. Todo va en la misma página.

upload.php
Código:
<script type="text/javascript">
var numero = 0;

// Funciones comunes
c= function (tag) { // Crea un elemento
   return document.createElement(tag);
}
d = function (id) { // Retorna un elemento en base al id
   return document.getElementById(id);
}
e = function (evt) { // Retorna el evento
   return (!evt) ? event : evt;
}
f = function (evt) { // Retorna el objeto que genera el evento
   return evt.srcElement ?  evt.srcElement : evt.target;
}

addField = function () {
   container = d('file');
   
   span = c('SPAN');
   span.className = 'archivo';
   span.id = 'archivo' + (++numero);

   field = c('INPUT');   
   field.name = 'archivo[]';
   field.type = 'file';
   
   a = c('A');
   a.name = span.id;
   a.href = '#';
   a.onclick = removeField;
   a.innerHTML = 'Quitar';

   span.appendChild(field);
   span.appendChild(a);
   container.appendChild(span);
}
removeField = function (evt) {
   lnk = f(e(evt));
   span = d(lnk.name);
   span.parentNode.removeChild(span);
}
</script>
Código HTML:
<form action="" method="post" enctype="multipart/form-data">
	  	<dl>
		<dt><label for="to" ></label></dt>
		<dt><label>Archivos Adjuntos:</label>&nbsp;&nbsp;&nbsp;<a href="#" onclick="addField()" >A&ntilde;adir Archivo</a></dt>
		<dd><div id="file"></div></dd>
		<dd><input type="submit" value="upload" name="action" id="archivo" name="archivo"  /></dd>
        <input type="hidden" name="action" value="upload" />
      </p>
    </form> 
Código PHP:
<?

      
if ($_POST["action"] == "upload") {
          
$tmpfile $_FILES['archivo']['tmp_name'];
          
$tmpname $_FILES['archivo']['name'];
          
$ftpuser "usuario";
          
$ftppass "password";
          
$ftppath "ftp.miweb.com/public_html/fotos/";
          
$ftpurl "ftp://".$ftpuser.":".$ftppass."@".$ftppath;

//places files into same dir as form resides
foreach ($_FILES["archivo"]["error"] as $key => $error) {
   if (
$error == UPLOAD_ERR_OK) {
       echo
"$error_codes[$error]";
       
move_uploaded_file(
         
$_FILES["archivo"]["tmp_name"][$key],
         
$_FILES["archivo"]["name"][$key]) or die("Problems with upload");
   }
}
}
?>
Me lo merezco... definitivamente .

Saludos. Marx.
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #6 (permalink)  
Antiguo 10/07/2008, 06:14
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 22 años, 6 meses
Puntos: 1
Respuesta: Problema con multiple upload de archivos

Hice una modificación ya que los archivos me los subia en la misma carpeta que tenía el upload.php. Para esto, hice 2 páginas:

upload.php
Código PHP:
<script type="text/javascript">
var 
numero 0;

// Funciones comunes
c= function (tag) { // Crea un elemento
   
return document.createElement(tag);
}
= function (id) { // Retorna un elemento en base al id
   
return document.getElementById(id);
}
= function (evt) { // Retorna el evento
   
return (!evt) ? event evt;
}
= function (evt) { // Retorna el objeto que genera el evento
   
return evt.srcElement ?  evt.srcElement evt.target;
}

addField = function () {
   
container d('file');
   
   
span c('SPAN');
   
span.className 'archivo';
   
span.id 'archivo' + (++numero);

   
field c('INPUT');   
   
field.name 'archivo[]';
   
field.type 'file';
   
   
c('A');
   
a.name span.id;
   
a.href '#';
   
a.onclick removeField;
   
a.innerHTML 'Quitar';

   
span.appendChild(field);
   
span.appendChild(a);
   
container.appendChild(span);
}
removeField = function (evt) {
   
lnk f(e(evt));
   
span d(lnk.name);
   
span.parentNode.removeChild(span);
}
</script>

<form action="uploadok.php" method="post" enctype="multipart/form-data">
          <dl>
        <dt><label for="to" ></label></dt>
        <dt><label>Archivos Adjuntos:</label>&nbsp;&nbsp;&nbsp;<a href="#" onclick="addField()" >A&ntilde;adir Archivo</a></dt>
        <dd><div id="file"></div></dd>
        <dd><input type="submit" value="upload" name="action" id="archivo" name="archivo"  /></dd>
        <input type="hidden" name="action" value="upload" />
      </p>
    </form> 
Y lo recibe uploadok.php (uploadok.php debe estar dentro del directorio donde se van a subir las imagenes... en este caso /fotos/)
Código PHP:
        if(isset($_POST['action'])) {
//      if ($_POST["action"] == "upload") {
          
$tmpfile $_FILES['archivo']['tmp_name'];
          
$tmpname $_FILES['archivo']['name'];
          
$ftpuser "usuario";
          
$ftppass "password";
          
$ftppath "ftp.miservidor.com/public_html/fotos/";
          
$ftpurl "ftp://".$ftpuser.":".$ftppass."@".$ftppath;


foreach (
$_FILES["archivo"]["error"] as $key => $error) {
   if (
$error == UPLOAD_ERR_OK) {
       echo
"$error_codes[$error]";
       
move_uploaded_file(
         
$_FILES["archivo"]["tmp_name"][$key],
         
$_FILES["archivo"]["name"][$key]) or die("Problemas con el upload");
   }
}
}
    
header("location: uploadfotos.php"); // ó donde se encuentre uploadfotos.php
    
exit; 
Saludos. Marx.
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 22:37.