Foros del Web » Programando para Internet » PHP »

$_FILES no contiene todos los archivos que envio

Estas en el tema de $_FILES no contiene todos los archivos que envio en el foro de PHP en Foros del Web. Pequeño resumen: Lo que estoy intentando hacer es introducir datos a "producto". Esos datos son, principalmente, "fotos" y "referencias" . El producto puede tener varias ...
  #1 (permalink)  
Antiguo 11/01/2006, 13:01
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 12 años, 7 meses
Puntos: 2
$_FILES no contiene todos los archivos que envio

Pequeño resumen:

Lo que estoy intentando hacer es introducir datos a "producto". Esos datos son, principalmente, "fotos" y "referencias". El producto puede tener varias fotos y varias referencias.

Las referencias a su vez tambien puede contener varias fotos.

Una vez elegidas todas las fotos de producto y de las referencias (con campos type='file'), cuando intento acceder al contenido del vector $_FILES, que se supone que debe contener todos los archivos que se han subido, descubro que el array no contiene todos los archivos que he elegido, si no solo los ultimos.

Esto es lo que he comprobado que pasa:
- Si he puesto fotos, referencias y fotos a esas referencias, solo coge las fotos de la ultima referencia

Código HTML:
<html>
<head>
<script language="javascript">
	
	var picnum = 0;
	var picnum_ref=new Array();
	var refnum = 0;

	function nuevafoto() {
		// Añade un campo de fichero al DIV fotos
		var td = document.getElementById("nuevasfotos");
		picnum++;
		td.innerHTML += "<div id='nuevafoto_"+picnum+"'>";
		var d = document.getElementById("nuevafoto_"+picnum);
		d.innerHTML += "<input type='file' id='file_"+picnum+"' name='file_"+picnum+"' class='area' size='48'>";
		d.innerHTML += "&nbsp;&nbsp;&nbsp;&nbsp;<a href='javascript:quitafoto("+picnum+")'>Eliminar Foto</a>";
		d.innerHTML += "<br /><br />";
	}
	
	function quitafoto(num) {
		var d = document.getElementById("nuevafoto_"+num);
		d.innerHTML = "";
	}

	function nuevafoto_referencia(num) {
		// Añade un campo de fichero al DIV fotos
		var td = document.getElementById("referencia_nuevasfotos_"+num);
		if(isNaN(picnum_ref[num])){
			picnum_ref[num]=0;
		}
		picnum_ref[num]++;
		td.innerHTML += "<div id='referencia_nuevafoto_"+num+"_"+picnum_ref[num]+"'>";
		var d = document.getElementById("referencia_nuevafoto_"+num+"_"+picnum_ref[num]);
		d.innerHTML += "<input type='file' id='file_"+picnum_ref[num]+"' name='file_"+picnum_ref[num]+"' class='area' size='48'>";
		d.innerHTML += "&nbsp;&nbsp;&nbsp;&nbsp;<a href='javascript:quitafoto_referencia("+num+","+picnum_ref[num]+")'>Eliminar Foto</a>";
		d.innerHTML += "<br /><br />";
	}
	
	function quitafoto_referencia(num,num2) {
		var d = document.getElementById("referencia_nuevafoto_"+num+"_"+num2);
		d.innerHTML = "";
	}

	function nuevareferencia() {
		// Añade un campo de fichero al DIV fotos
		var td = document.getElementById("nuevasreferencias");
		refnum++;
		td.innerHTML += "<div id='nuevareferencia_"+refnum+"'>";
		var d = document.getElementById("nuevareferencia_"+refnum);
		
		var t="<table style='border: 1px solid'><tr><td>";
		t+="Referencia "+refnum;
		t+="</td></tr><tr><td colspan=2>";
		
		t+="<span class=label>Fotos:</span>";
		t+="<br>";
		t+="<table width='400' cellspacing='0' cellpadding='0' border='0'>";
		t+="<tr valign='top'><td align='left' colspan='2' id='referencia_nuevasfotos_"+refnum+"'>";
		t+="</td></tr>";
		t+="<tr valign='top><td align='left' colspan='2'>";
		t+="<center><a href='javascript:nuevafoto_referencia("+refnum+")'>A&ntilde;adir una foto</a></center>";
		t+="</td></tr>";
		t+="</table>";


		t+="</td></tr><tr><td>";
		
		t+= "&nbsp;&nbsp;&nbsp;&nbsp;<a href='javascript:quitareferencia("+refnum+")'>Eliminar Referencia</a>";
		t+= "<br /><br />";
		t+="</td></tr></table>";
		d.innerHTML+=t;
	}
	
	function quitareferencia(num) {
		var d = document.getElementById("nuevareferencia_"+num);
		d.innerHTML = "";
	}

</script>
</head>
<body>
<form name="form" action="run.php" method="post" enctype="multipart/form-data">
P R O D U C T O S<br><br><br>
<div id="div_fotos" style='background-color:#FFFFCC'>
	FOTOGRAFIAS<br>
	<div class="formulario">
		<table width="400" cellspacing="0" cellpadding="0" border="0">
			<tr valign="top">
				<td align="left" colspan="2" id="nuevasfotos">
				</td>
			</tr>
			<tr valign="top">
				<td align="left" colspan="2">
					<center><a href="javascript:nuevafoto()">A&ntilde;adir una foto</a></center>
				</td>
			</tr>
		</table>
	</div>
</div>
<br><br>
<div id="div_referencias" style='background-color:#FFCC99'>
	REFERENCIAS<br>
	<div class="formulario">
		<table width="400" cellspacing="0" cellpadding="0" border="0">
			<tr valign="top">
				<td align="left" colspan="2" id="nuevasreferencias">
				</td>
			</tr>
			<tr valign="top">
				<td align="left" colspan="2">
					<center><a href="javascript:nuevareferencia()">A&ntilde;adir una referencia</a></center>
				</td>
			</tr>
		</table>
	</div>
</div>



<br /><br /><br />
<center>
	<input type="submit" name="submit" value="Aceptar" class="area">
</center>
</form>

</body>
</html> 
Ayudadme porfavor, no se lo que le puede pasar

Gracias
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
  #2 (permalink)  
Antiguo 11/01/2006, 13:45
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Podrías generar tus "input" de tipo "file" de forma dinámica como lo haces con Javascript .. pero que el nombre sea tipo "nombre[]" lo cual para PHP se convertirá en un array cuando lo reciba.

Código PHP:
d.innerHTML += "<input type='file' id='file_"+picnum+"' name='file[]' class='area' size='48'>"
No sé como este cambio intervendrá en el resto de rutinas javascript que usas (parece que gestionas el tema por "id" .. así que eso sigue igual con tu file_n° que le das de nombre dinámico).

Cuando hagas el cambio .. observa que llegó a PHP usando:
Código PHP:
echo "<pre>";
print_r($_FILES);
echo 
"</pre>"
Y la forma correcta para acceder a dicho vector (array) multidimensional sería:

http://www.php.net/manual/en/feature...d.multiple.php

Un saludo,
  #3 (permalink)  
Antiguo 11/01/2006, 13:50
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Por cierto .. hace poco me topé con este interesante sistema para subir vários archivos simultáneamente. Usa técnicas de "Ajax", revisalo también:

http://the-stickman.com/web-developm...-file-element/

Un saludo,
  #4 (permalink)  
Antiguo 13/01/2006, 02:15
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 12 años, 7 meses
Puntos: 2
Muchas gracias, la primera solucion es la que he utilizado, ahora solo queda identificar donde va cada foto, jsjs, pero eso es ya otra historia.

Lo de subir archivos con AJAX me ha parecido muy interesante, tambien lo voy a probar.

Gracias de nuevo!
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
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 14:21.