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

Como recibo un FILE??

Estas en el tema de Como recibo un FILE?? en el foro de Frameworks JS en Foros del Web. Hola, no sé como recibir un archivo desde AJAX pasado mediante método POST con PHP, acá abajo les escribo ambos archivos, tanto el del formulario, ...
  #1 (permalink)  
Antiguo 17/11/2005, 16:20
 
Fecha de Ingreso: septiembre-2002
Ubicación: México
Mensajes: 356
Antigüedad: 21 años, 7 meses
Puntos: 0
Como recibo un FILE??

Hola, no sé como recibir un archivo desde AJAX pasado mediante método POST con PHP, acá abajo les escribo ambos archivos, tanto el del formulario, como el del que recibe los datos.

avento.php
Código PHP:
function chkDatos()
{
    var 
forma document.evento;
    var 
total forma.elements.length;
    var 
todo,resul;
    var 
msg "Es importante completar los datos del evento";

    for(
i=total-i++)
    {
    if(
forma.elements[i].value == "" || forma.elements[i].value == -99)
        {
            
alert(msg);
            
forma.elements[i].focus();
            return 
false;
        }
    }     

    
resul document.getElementById('revento');
    
todo = new Array(11);
    
todo[0] = document.getElementById('tipo').value;
    
todo[1] = document.getElementById('curso').value;
    
todo[2] = document.getElementById('lugar').value;
    
todo[3] = document.getElementById('inicio').value;
    
todo[4] = document.getElementById('termino').value;
    
todo[5] = document.getElementById('epc').value;
    
todo[6] = document.getElementById('costop').value;
    
todo[7] = document.getElementById('costov').value;
    
todo[8] = document.getElementById('cupon').value;
    
todo[9] = document.getElementById('temario').value;
    
todo[10] = document.getElementById('info').value;
                    
    
ajax=nuevoAjax();
    
ajax.open("POST""../ajax/xevento.php",true);
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
    
ajax.onreadystatechange=function() {
        if (
ajax.readyState==4) {
            
resul.innerHTML ajax.responseText
        
}
    }
    
ajax.send("d1="+todo)

El elemento que representa el $_FILE , es "temario" el cual, debería recibir un archivo con el temario del curso. Como ven, hago un arreglo con todos los elementos y los paso como una única variable al archivo xevento.php

xevento.php
Código PHP:
<?
print_r
($_POST["d1"]);
?>
Pues por el momento solo mando a imprimir el arreglo con los datos recibidos. Pero mi pregunta es. En un programa .php normal, yo recibo los datos de un formulario con el método $_POST, a excepción de los archivos, los cuales recibo mediante $_FILES. Como entonces puedo recibir aquí el archivo??

De antemano gracias por la ayuda...

Saludos!
  #2 (permalink)  
Antiguo 17/11/2005, 17:49
 
Fecha de Ingreso: septiembre-2002
Ubicación: México
Mensajes: 356
Antigüedad: 21 años, 7 meses
Puntos: 0
Por si les sirve

Bueno, pues por si a alguien le sirve, si se vé en una situación similar en algún momento, tomandolo del arreglo si se pudo. Yo lo hice asi.

xevento.php
Código PHP:
<?
$arrUsu 
explode(",",$_POST["d1"]);
$tipo $arrUsu[0];
$cur  trim($arrUsu[1]);
$lug  trim($arrUsu[2]);
$fini trim($arrUsu[3]);
$fter trim($arrUsu[4]);
$hora trim($arrUsu[5]);
$cp   $arrUsu[6];
$cv   $arrUsu[7];
$cup  $arrUsu[8];
$tem  $arrUsu[9];
$info $arrUsu[10];
    
        if(
is_file(stripslashes($tem)))
        {
            
$arr explode("\\",stripslashes($tem));
            
$par count($arr);
        if(
copy(stripslashes($tem),"../admin/temarios/".$arr[$par-1]))
            echo 
'Se copio el archivo';
        else
            echo 
'nanais';
        }

?>
Saludos
  #3 (permalink)  
Antiguo 18/11/2005, 07:25
Avatar de bhonox  
Fecha de Ingreso: julio-2002
Ubicación: Rengo-Viña del Mar-Stgo
Mensajes: 1.213
Antigüedad: 21 años, 9 meses
Puntos: 0
Jelou, me queda una duda, no he probado el codigo pero si lo leo y queria si me puedes aclarar algunas dudillas..

revisando tu codificacion ajax, recuperas todos los datos del formulario y lo pasas a un arreglo, mi pregunta es la siguiente:
cuando haces ajax.send("d1="+todo) el manda todo el arreglo automaticamente??

mi segunda pregunta tiene que ver especificamente con el archivo, ya que hiciste un explode y separaste las variables, posteriormente trabajaste la que correspondia al archivo y te tomo sin hacer un $_FILES['archivo'] ??
tienes configurado tu register_global = on??
ya que cuando estas en on puedes recibir las variables ya sea $variable o $_REQUEST['variable'], pero si esta en off no podrias recibir $variable pero si el $_REQUEST['variable']
__________________
Atte
Real BHONOX

Programador Cervecero! :borracho:
Lenguajes vengan a MI!!
  #4 (permalink)  
Antiguo 18/11/2005, 11:27
 
Fecha de Ingreso: septiembre-2002
Ubicación: México
Mensajes: 356
Antigüedad: 21 años, 7 meses
Puntos: 0
Esa era mi pregunta precisamente...

Hola, pues respondiendo a las dudas sobre mi código...

1. Sobre el AJAX con el arreglo.
Código PHP:
ajax.open("POST""../ajax/xevento.php",true);
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
Algunos de mis formularios los envío mediante "GET", siempre y cuando la info que viaje no sea demasiada (ya saben, por aquello del límite de tamaño de la cadena) aunque normalmente todos debería ser enviados mediante POST.

En esta caso utilizo el POST y es por eso que la llamada al .php no vá acompañada de ?d1="+todo. Y debajo utilizo la cabecera que indica que estaré enviando un formulario.

Código PHP:
 ajax.send("d1="+todo
Como es por método POST en lugar de enviar un "null" envío la variable que contiene el arreglo, y la respuesta es "Si", del otro lado recibo el arreglo con todos mis datos.

2. Sobre el register_globals y la forma de acceder al FILE.

Pues esa fue una gran sorpresa para mí, y de hecho esa era mi pregunta inicial, ¿como es que si yo recibía todos mis datos en un arreglo que venía con un $_POST iba a tratar a mi archivo con un $_FILE porque mi register_globals está en "off" y no se puede acceder a las variables por el simple nombre sino por el método que fueron recibidas.

0k! Si yo mando imprimir mi arreglo con un print_r($_POST["d1¨]; lo que me imprime es una cadena separando con "," cada variable y viene algo asi mas o menos

2,3,2,3,'2005-11-24','2005-11-25',800,400,2,'C:\tico\doctos\prueba.txt','nada'

Eso ya lo había mandado a imprimir antes de hacer la pregunta. Después entonces intenté pasar los datos uno por uno para así tratar a todos en el .php como $_POST a excepción del archivo, al cual intenté acceder mediante el acostumbrado $_FILES, pero no dió resultado. Después decidí preguntar si esa variable era un archivo con un is_file() para lo cual la respuesta fue "true". Así pues seguí avanzando en mi búsqueda y decidí decirle al programa que si la variable era un archivo, entonces me hiciera una copia en determinada carpeta con el comando copy() (aunque quiero hacer mención que normalmente utilizo un move_uploaded_file() pues me parece haber leído alguna vez que esto es una practica mas recomendable). Bien, pues corrí el programa, el sistema me devolvió una cadena diciendo "el evento ha quedado registrado". Con gran sorpresa revisé mi carpeta y efectivamente había un archivo dentro, mismo que al abrirlo contenía los datos que debía contener.

Ahora, la verdad, que alguien me explique como esto es posible porque mi cabeza es muy cerrada aun para comprender como fué posible simplemente pasar el archivo tomandolo como una simple variable

El caso es que me ha funcionado y por ahora eso me ha sido de gran utilidad pues me permite seguir avanzando en mi trabajo. Pero aquí queda como documentación de lo poco que pueda aportar y en espera de que, como siempre, entre todos, vayamos ayudandonos a obtener un poco de conocimiento.

Saludos!
  #5 (permalink)  
Antiguo 18/11/2005, 14:02
Avatar de bhonox  
Fecha de Ingreso: julio-2002
Ubicación: Rengo-Viña del Mar-Stgo
Mensajes: 1.213
Antigüedad: 21 años, 9 meses
Puntos: 0
primero que nada agradezco la respuesta...
y con eso he entendido varias logicas

la respuesta al punto 1 COMPRENDIDA 100%

ahora referente a los otros puntos.
-es mejor utilizar move_uploaded_file que copy pero depende de la version de php.
-entendi el punto de lo que hace el archivo, al igual que gmail lo que almacena es donde esta el archivo a subir y no un temporal ni nada de otras cosas, luego hace referencia al cliente y lo sube al servidor, emulando tu string que tenia la ruta al examinar o el input file,

ahora te doy un tips referente a php, hace un tiempo encontre una genialidad para mostrar resultados ya sea de query, sessiones, arreglos, variables POST etc etc.
es un DUMP al igual que el propio de coldfusion, podrias revisarlo y asi no usar el print_r que lo muestra muy desordenado...

te dejo mi post: http://www.forosdelweb.com/f18/importante-debug-php-leanlo-328465/

amm y gracias nuevamente...
__________________
Atte
Real BHONOX

Programador Cervecero! :borracho:
Lenguajes vengan a MI!!
  #6 (permalink)  
Antiguo 18/11/2005, 17:09
 
Fecha de Ingreso: septiembre-2002
Ubicación: México
Mensajes: 356
Antigüedad: 21 años, 7 meses
Puntos: 0
gracias por el aporte!!

Gracias amigo por el aporte, ya me he dado la vuelta por el sitio y me parece una herramienta útil, no dudaré en ocuparla para facilitar el debbuging de mis scripts!!

  #7 (permalink)  
Antiguo 18/11/2005, 19:30
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 19 años, 10 meses
Puntos: 4
no entiendo esto. como se supone que puedo copiar un archivo que esta en la pc del cliente desde el servidor??? la ruta del archivo tiene q estar en el mismo sistema de archivos del hosting, o yo me equivoco?
__________________
Internet Explorer SuckS
Download FireFox
  #8 (permalink)  
Antiguo 19/11/2005, 19:50
Avatar de bhonox  
Fecha de Ingreso: julio-2002
Ubicación: Rengo-Viña del Mar-Stgo
Mensajes: 1.213
Antigüedad: 21 años, 9 meses
Puntos: 0
lo que quise decir, es que cuando tu creas un formulario con inpu type=file
lo que queda en el value cuando seleccionas un archivo es la ruta del archivo cliente y solo quedara en el servidor cuando traspases el archivo, ya sea en php con un copy o mejor con un move_uploaded_file
__________________
Atte
Real BHONOX

Programador Cervecero! :borracho:
Lenguajes vengan a MI!!
  #9 (permalink)  
Antiguo 20/11/2005, 08:27
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 19 años, 10 meses
Puntos: 4
no entiendo, cuando copio el archivo como se si el archivo esta en la pc del cliente o del servidor?...
__________________
Internet Explorer SuckS
Download FireFox
  #10 (permalink)  
Antiguo 20/11/2005, 11:21
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 3 meses
Puntos: 7
PHP, como sabes, se ejecuta del lado del servidor, por lo tanto no se puede comprobar la existencia de un archivo en el cliente.

Ahora, no creo que funcione lo que menciona nuestro yacatl, porque supongo que está haciendo sus pruebas en la misma PC, cosa que el archivo existe tanto en el "servidor" como en el cliente, digo esto, porque para subir archivos no se usa "application/x-www-form-urlencoded", sino "multipart/form-data". Si me equivoco, que alguien me corrija con un ejemplo

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #11 (permalink)  
Antiguo 20/11/2005, 11:45
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 19 años, 10 meses
Puntos: 4
ya me parecia raro...
la verdad no se me ocurre como enviar un archivo, si yo especifico multipart/form-data en el requestHeader se envia el archivo? lo recibo con $_FILES? no lo veo posible, ademas no tiene mucho sentido, para enviar grandes volumenes de informacion conviene recargar la pagina
__________________
Internet Explorer SuckS
Download FireFox
  #12 (permalink)  
Antiguo 20/11/2005, 13:36
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 3 meses
Puntos: 7
Yo no dije que se pueda enviar el archivo, hasta donde sé, no es posible hacer esto usando el método que mencionan aquí.

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #13 (permalink)  
Antiguo 21/11/2005, 14:11
 
Fecha de Ingreso: septiembre-2002
Ubicación: México
Mensajes: 356
Antigüedad: 21 años, 7 meses
Puntos: 0
Toda la razón

De entre todas las aportaciones que han sido tan amables de hacer, me han quedado muy grabadas 2 de ellas.

  1. Que efectivamente la única razón por la cual me está funcionando el script, es porque no estoy haciendo upload del archivo, sino una simple copia, y la hace puesto que tiene la ruta del archivo y no hace mas que una copia del mismo de manera local. JAJAJA, que risa, ya decía yo que mi cabeza es muy dura como para comprender el porque de las cosas. Gracias por ponermela así de sencilla.
  2. Tambien muy cierto que si estoy enviando todos los datos de mi formulario, en vano termina siendo ocupar el AJAX pues quizá sería una mejor técnica el envío del formulario de manera tradicional.

Aunque asi como esta seguro que me funciona pues el sistema correrá sobre la intranet de la empresa.

Saludos y gracias nuevamente por sus aportaciones. Seguro que tengo aun muchísimo por aprender de todo esto.

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 00:43.