Foros del Web » Programando para Internet » Javascript » Frameworks JS »

mover archivo

Estas en el tema de mover archivo en el foro de Frameworks JS en Foros del Web. Hola a todos. Estoy teniendo un problema para mover una imagen a una carpeta: Codigo Html: Código HTML: <form name= "form_productos" enctype= "multipart/form-data" > <label> ...
  #1 (permalink)  
Antiguo 12/05/2009, 10:51
 
Fecha de Ingreso: agosto-2007
Ubicación: guadalajara
Mensajes: 32
Antigüedad: 16 años, 8 meses
Puntos: 0
Exclamación mover archivo

Hola a todos. Estoy teniendo un problema para mover una imagen a una carpeta:

Codigo Html:

Código HTML:
<form name="form_productos" enctype="multipart/form-data">
 
 <label>Marca: </label>
 <input type="text" id="marca" name="marca" value="" /><br />
 
 <label>Modelo: </label>
 <input type="text" name="modelo" value="" /><br />
 
 <label>Precio: </label>
 <input type="text" name="precio" value="" /><br />
 
 <label>Cantidad: </label>
 <input type="text" name="cantidad" value="" /><br />
 
 <label>Imagen: </label>
 <input type="file" id="imagen" name="imagen" /><br />
 
 <label>Categoria: </label>
 <select name="categoria">
  <option value="elegir">Elegir...</option>
  <option value="opc1">opcion 1</option>
  <option value="opc2">opcion 2</option>
  <option value="opc3">opcion 3</option> 
 </select><br />
 
 <label>Detalle: </label><br />
 <textarea name="detalle" cols="40" rows="5" value=""></textarea><br />


 <input type="button" value="Enviar" onclick="proceso(this.form);" />
 <input type="reset" value="clear" />
 
</form> 


Codigo JavaScript:

Código:
 function getXMLHTTPREQUEST()
{
	var req;
	try{
		req=new XMLHttpRequest;
		}catch(err1){
			try{
				req=new ActiveXObject("Msxml2.XMLHTTP");
				}catch(err2){
					try{
						req=new ActiveXObject("Microsoft.XMLHTTP");
						}catch (err3){
							req=false;
							}//try 3					
					}//try 2			
			}//try 1
			
	return req;
}



function proceso(form_productos)
{
  //instancio objeto xhr	
  ajax=getXMLHTTPREQUEST();	
	

 //obtengo los campos del formulario.-
 
 var vmarca = document.form_productos.marca.value; 
 var vmodelo = document.form_productos.modelo.value; 
 var vprecio = document.form_productos.precio.value; 
 var vcantidad = document.form_productos.cantidad.value; 
 var vimg = document.form_productos.imagen.value; 
 var vcategoria = document.form_productos.categoria.value; 
 var vdetalle = document.form_productos.detalle.value;
 
 
 

 //soluciona el problema de cache.-
 var ran = parseInt(Math.random() * 99999999); 
 
 
 ajax.open("GET","proceso_adm_productos.php?marca="+vmarca+"&modelo="+vmodelo+"&precio="+vprecio+"&cantidad="+vcantidad+"&imagen="+vimg+"&categoria="+vcategoria+"&detalle="+vdetalle+"&boton=insertar&rand="+ran,true);
 
 ajax.onreadystatechange=function(){
	 
	  if(ajax.readyState == 4)
	  {
		  if(ajax.status == 200)
		  {
		    var mensaje = ajax.responseText;
		
  		    if(mensaje != "ok")
			{
			 alert(mensaje);	
		    }
		  
		  }//cierra if status.-
		
	  }//cierra if readyState.-
	 
	 };//cierra funcion interna.-
 
 ajax.send(null);
 
 
}//cierra funcion proceso().-


Codigo PHP:

Código PHP:

/*
.
.
    //codigo de validacion de datos.........
.
.
.
.
*/


 //---------- insertar en la db ----------
 
if($_GET['boton'] == "insertar")
 {
 
  
//operamos con la IMG.
  
$direccion="fotos/";
  
  
$archivosubido=$direccion.$_FILES[$_POST['imagen']]['name'];
  
  if(
strlen($archivosubido)==6)  
  {
   
$archivosubido="fotos/ind.gif;
  }
  
  
  move_uploaded_file($_FILES['imagen']['tmp_name'],$archivosubido);
  




  mysql_query("
insert into productos(id_categoria,marca,modelo,precio,cantidad,imagen,detallevalues (".$_GET['categoria'].",'".$_GET['marca']."','".$_GET['modelo']."',".$_GET['precio'].",".$_GET['cantidad'].",'".$archivosubido."','".$_GET['detalle']."')") 
  or die("
error al insertar in proceso_adm_productos".mysql_error()); 


Aclaro: He realizado varias aplicaciones como esta (mover img a carpetas) pero nunca he utilizado ajax como en esta aplicacion, y ahora estoy atacado.



El problema:
No me esta moviendo la imagen a la carpeta fotos/.
La imagen ind.gif es una imagen que ya se encuentra en la carpeta de fotos/ ; esta sirve para aquellos registros que se cargan sin fotografias, entonces es como una foto por defecto que dice "imagen no disponible, disculpe las molestias".
  #2 (permalink)  
Antiguo 12/05/2009, 14:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: mover archivo

Bueno en primera si ves las FAQs no es posible enviar archivos por AJAX. Por lo que tu codigo no va a funcionar ya que la variable $_FILES nunca va a tener contenido.

En segunda en tu request AJAX usas GET, cuando en tu PHP rescatas por $_POST, eso es un error, o usas $_GET o $_POST para leer los valores en el servidor.

Saludos.
  #3 (permalink)  
Antiguo 12/05/2009, 16:46
 
Fecha de Ingreso: agosto-2007
Ubicación: guadalajara
Mensajes: 32
Antigüedad: 16 años, 8 meses
Puntos: 0
Respuesta: mover archivo

Cita:
En segunda en tu request AJAX usas GET, cuando en tu PHP rescatas por $_POST, eso es un error, o usas $_GET o $_POST para leer los valores en el servidor.
Si tenés razon ,yo en mi codigo php lo tengo con $_GET[], luego probando modifique a $_POST[] y se me olvidó cambiarlo a $_GET[] nuevamente.



Cita:
Bueno en primera si ves las FAQs no es posible enviar archivos por AJAX. Por lo que tu codigo no va a funcionar ya que la variable $_FILES nunca va a tener contenido.
Entonces tendré que trabajar sin Ajax ????
  #4 (permalink)  
Antiguo 12/05/2009, 18:40
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: mover archivo

Con Ajax no podrás enviar el archivo.

Lo máximo que puedes hacer para que no se recargue la página completa es usar un iframe oculto y a partir de ahí enviar el formulario.

Saludos.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 12/05/2009, 18:46
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: mover archivo

En efecto si quieres tener el mismo efecto de "asincrono" usa un iframe oculto en Google hay muchos ejemplos de como hacerlo.

Saludos.
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 22:23.