Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] PHP no toma valores enviados de form con javascript

Estas en el tema de PHP no toma valores enviados de form con javascript en el foro de PHP en Foros del Web. Buenas, tengo un formulario que se envia por javascript, el formulario recoge datos txt y ademas archivos (file). El caso es raro ya que cuando ...
  #1 (permalink)  
Antiguo 03/05/2013, 07:21
 
Fecha de Ingreso: noviembre-2008
Ubicación: Cochabamba Bolivia
Mensajes: 519
Antigüedad: 16 años
Puntos: 26
PHP no toma valores enviados de form con javascript

Buenas, tengo un formulario que se envia por javascript, el formulario recoge datos txt y ademas archivos (file).

El caso es raro ya que cuando cargo en el form solo 1 archivo funciona todo bien, el problema es que cuando cargo mas de 1 pareciera que no se envian los datos, aunque el archivo cargue primero en el servidor.

Codigo Javacript: (sencillo la primera fila lo unico que hace es mostrar una barra de carga mientras se sube el archivo)
Código Javascript:
Ver original
  1. document.getElementById("ProcessLoad").style.display = "block";
  2.             document.forms[formulario].submit();

Codigo PHP:
Código PHP:
Ver original
  1. if($_POST['subir']){
  2.                         $valido = 9;
  3.                         $ip = $_SERVER[REMOTE_ADDR];
  4.                         $fecha = date("Y-m-d",time());
  5.                         $filepath = getcwd()."/tmp/mp3pending/";
  6.                         $forpath = split("-",$fecha);
  7.                         $pathano = $filepath.$forpath[0]."/";
  8.                         $pathmes = $pathano.$forpath[1]."/";
  9.                         $pathdia = $pathmes.$forpath[2]."/";
  10.                         if(!file_exists($pathano)){ mkdir($pathano,0777); }
  11.                         if(!file_exists($pathmes)){ mkdir($pathmes,0777); }
  12.                         if(!file_exists($pathdia)){ mkdir($pathdia,0777); }
  13.                         $path = $pathdia;
  14.                         chmod($path,0777);
  15.  
  16.                         print_r($_POST[artista]);
  17.                        
  18.                 }else{
  19.                     echo "No se ha enviado nada";
  20.                 }

Como veran en el codigo php le puse un else para ver si recibia los datos enviados, pero como ya dije, cuando se envian mas de 2 archivos desde el form me sale la respuesta del else (No se ha enviado nada), cosa que no pasa solo con un archivo.

El formulario solo tiene un hidden con nombre subir, por lo tanto no hay inputs duplicados mas que el de los files y el de los datos tipo text.

Pareciera que el servidor despues de cargar 2 archivos una vez enviado el form se olvida de los datos que estan en el form, por eso lo toma como que no se ha enviado, cosa que no pasa con 1 solo archivo.

Alguien podria hecharme una mano con esto? ¿que es lo que esta pasando?

Saludos.
  #2 (permalink)  
Antiguo 03/05/2013, 08:12
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: PHP no toma valores enviados de form con javascript

En tu código PHP no se ve que subas el archivo ni mucho menos que lo guardes, lo unico que hace tu código es ver si existen X carpeta, si no existe se crea y cambia permisos, pero nada mas...

PD Por cierto, no se ve como tienes creado el formulario, así que no sabemos que estas enviando ni como lo envias...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #3 (permalink)  
Antiguo 03/05/2013, 08:43
 
Fecha de Ingreso: noviembre-2008
Ubicación: Cochabamba Bolivia
Mensajes: 519
Antigüedad: 16 años
Puntos: 26
Respuesta: PHP no toma valores enviados de form con javascript

Cita:
Iniciado por Nemutagk Ver Mensaje
En tu código PHP no se ve que subas el archivo ni mucho menos que lo guardes, lo unico que hace tu código es ver si existen X carpeta, si no existe se crea y cambia permisos, pero nada mas...

PD Por cierto, no se ve como tienes creado el formulario, así que no sabemos que estas enviando ni como lo envias...

El proceso de guardado del archivo no lo puse, he quitado mucho codigo por que crei que no era necesario, pues los archivos se guardan sin ningun problema, el formulario es de lo mas sencillo, no tiene nada complejo.

De todos modos gracias, es raro esto pero ahora va a la perfeccion, no tengo ni idea que fue lo de hace rato pero paso como casi 2 horas sin que me funcione. ahora va todo bien sin haber hecho ninguna modificacion.

  #4 (permalink)  
Antiguo 03/05/2013, 10:23
Avatar de jcxnet  
Fecha de Ingreso: octubre-2005
Ubicación: Perú
Mensajes: 784
Antigüedad: 19 años, 1 mes
Puntos: 56
Respuesta: PHP no toma valores enviados de form con javascript

cuál es el content-type de tu formulario ?
la variable para archivos es $_FILES
__________________
►I'm a devil on the run ♂
Jcxnet.com
*Keep It Simple **
  #5 (permalink)  
Antiguo 08/05/2013, 06:10
 
Fecha de Ingreso: noviembre-2008
Ubicación: Cochabamba Bolivia
Mensajes: 519
Antigüedad: 16 años
Puntos: 26
Respuesta: PHP no toma valores enviados de form con javascript

Dios, el problema ha vuelto, es lo raro, que funciona cuando quiere, otra mañana perdida tratando de encontrar el maldito problema.

SOCORRO!! ya no aguanto mas, no entiendo cual es el problema, he probado en una pagina aparte, el codigo es tan sencillo que tampoco me funciona:

Código PHP:
Ver original
  1. <div id="page">
  2. <?php
  3. if($_POST[enviar]){
  4. print_r($_FILES);
  5. }
  6. ?>
  7.  
  8. <form enctype="multipart/form-data" method="post" name="subidor" id="subidor" action="#">
  9. <input type="file" name="file[]"/>
  10. <input type="file" name="file[]"/>
  11. <input type="file" name="file[]"/>
  12. <input type="submit" name="enviar" value="enviar">
  13. </form>
  14. </div>

El problema es que si selecciono solo 1 archivo, el script va bien, toma los datos y los muestra, pero el problema ya esta cuando selecciono 2 o mas archivos, es como si el servidor no tomase ningun dato del form cuando se sube mas de 1 archivo, aunque este lo muestre en la pagina como que esta subiendo los archivos (me refiero a al tiempo de carga que se toma al subir un archivo desde el form)

Todo esto me lleva a pensar que es un problema del server, alguien podria decirme si es posible esto? ya que no veo otra explicacion, ya que nisiquiera con este codigo tan sencillo no va.

Saludos.
  #6 (permalink)  
Antiguo 08/05/2013, 07:34
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: PHP no toma valores enviados de form con javascript

Sin saber mas ni ver mas código como es que guardas los archivos (DE NUEVO), solo queda pensar que el archivo sobrepasa el tiempo limite de ejecución o sobrepasa el peso limite para subir archivos, no sabemos que tipo de archivos subes (su peso) así que esto es estar adivinando con los pedazos de código que sueltas
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #7 (permalink)  
Antiguo 08/05/2013, 08:14
 
Fecha de Ingreso: noviembre-2008
Ubicación: Cochabamba Bolivia
Mensajes: 519
Antigüedad: 16 años
Puntos: 26
Respuesta: PHP no toma valores enviados de form con javascript

Cita:
Iniciado por Nemutagk Ver Mensaje
Sin saber mas ni ver mas código como es que guardas los archivos (DE NUEVO), solo queda pensar que el archivo sobrepasa el tiempo limite de ejecución o sobrepasa el peso limite para subir archivos, no sabemos que tipo de archivos subes (su peso) así que esto es estar adivinando con los pedazos de código que sueltas
Tienes razon, disculpa que no haya adjuntado todo el codigo, pero es que es un poco largo.

Aqui esta tal cual lo tengo:

Este es el Form:
Código HTML:
Ver original
  1. <form enctype="multipart/form-data" name="uploadform" id="uploadform" action="PageUpload.php?page=mp3&subir=si" method="post">
  2.                 <input type="hidden" name="enviarya" id="enviarya" value="si"/>
  3.                 <div id="BotonExa">
  4.                 </div>
  5.                 <div id="DescriptionUpload">
  6.                 Solo se admiten archivos Mp3, y puedes subir hasta 5 pistas cada vez.
  7.                 </div>
  8.                 <div id="SubmitBoton" onclick="javascript: RevisarSubir('uploadform');">
  9.                     Subir
  10.                 </div>
  11.                 <div id="ProcessLoad" style="float: left; width: 750px; display: none; text-align: center; color: white;">
  12.                     Subiendo...(si estas subiendo varios archivos a la vez, ten paciencia, es normal que tarde un poco.)
  13.                     <br/><img src="http://music-strike.net/images/subiendo.gif" style="width: 750px; height: 5px; margin-bottom: 5px;"/>
  14.                 </div>
  15.                 <h2 style="float: left; padding: 5px; margin-bottom: 0px; background: #151515; width: 760px; border: black 1px solid; border-bottom: 0px; font-size: 1.2em;">Lista de archivos</h2>
  16.                 <script type="text/javascript">
  17.                     upload = new adekMultiUpload('uploadform',5,[".mp3"],'file');
  18.                     upload.init();
  19.                 </script>
  20.             </form>

Y este es el codigo javascript que hace el multiupload (adekMultiUpload()):
Código Javascript:
Ver original
  1. function adekMultiUpload(uploadform,max_rows,ext_array,input_prefix) {
  2.  
  3.     this.max_rows = max_rows;
  4.     this.ext_array = ext_array;
  5.     this.count = 0;
  6.     this.j = 0;
  7.    
  8.     this.CheckInputExt = function(id) {
  9.    
  10.         allow = false;
  11.         var file = document.getElementById(input_prefix+'_'+id).value;
  12.         var dot = file.lastIndexOf('.');
  13.    
  14.         if (dot != -1) {
  15.             var extension = file.substr(dot,file.length);
  16.                 for (var i = 0; i < ext_array.length; i++) {
  17.                 if (ext_array[i] == extension) { allow = true; break; }
  18.                 }
  19.                         }              
  20.         if (allow) { return true; }
  21.         else {
  22.         this.remove_div(input_prefix+'_'+id);
  23.         this.add_new_row();
  24.         alert("Alert! Bad file format.\nAccepted extensions are: "
  25.         + (ext_array.join("  ")) + "\n");
  26.         return false;
  27.             }
  28.         };
  29.    
  30.     this.init = function() {
  31.     var div_inputs = document.createElement( 'div' );
  32.         div_inputs.id = input_prefix+'_inputs';
  33.     var div_uploadlist = document.createElement( 'div' );
  34.         div_uploadlist.id = input_prefix+'_uploadlist';
  35.         document.getElementById('uploadform').appendChild(div_inputs);
  36.         document.getElementById('uploadform').appendChild(div_uploadlist);
  37.     this.add_new_row();
  38.     }
  39.    
  40.     this.remove_div = function(id) {
  41.             el = document.getElementById(id)
  42.             el.parentNode.removeChild(el);
  43.         };
  44.    
  45.    
  46.     this.add_new_row = function()
  47.     {
  48.       if(this.count >= this.max_rows)
  49.         return false;
  50.        
  51.         var i = document.getElementById(input_prefix+'_inputs');
  52.         //Create new input button
  53.         var dividjs = 'file_' + (this.j+1);
  54.         var refjs = 'javascript: CargarExaminar("'+dividjs+'")';
  55.         var new_input = document.createElement( 'input' );
  56.         new_input.type = 'file';
  57.         new_input.name =input_prefix+'[]';
  58.         new_input.id = input_prefix+'_' + (this.j+1);
  59.         new_input.selector = this;
  60.         new_input.style.display= 'none';
  61.         new_input.onchange = function(){
  62.         this.selector.update_input(this.selector.j+1);
  63.         };
  64.         // Add new element
  65.         i.appendChild(new_input);
  66.         document.getElementById('BotonExa').innerHTML = "<div id='boton' onclick='"+refjs+"'>Examinar</div>";
  67.     };
  68.    
  69.    
  70.     this.delete_row = function(id)
  71.     {
  72.       if(this.count == 1){return false};
  73.       var upload_files = document.getElementById(input_prefix+'_uploadlist');
  74.       this.remove_div(input_prefix+'_'+id);
  75.       this.remove_div(input_prefix+'_del'+id);
  76.       this.count--;
  77.       if(this.count+1 == this.max_rows){this.add_new_row();};
  78.     };
  79.    
  80.     this.update_input = function(id) {
  81.       if( (this.count >= this.max_rows) || (this.CheckInputExt(id)==false) )
  82.         return false;
  83.         var ObjectName = this;
  84.         var upload_files = document.getElementById(input_prefix+'_uploadlist');
  85.         //Files list: Filename
  86.         var new_delete = document.createElement( 'div' );
  87.         new_delete.id = input_prefix+'_del' + id;
  88.         new_delete.className = 'Subidos';
  89.         new_delete.innerHTML = "&raquo; "+document.getElementById(input_prefix+'_'+id).value;
  90.         //Files list: Delete button
  91.         var del_button = document.createElement( 'div' );
  92.         del_button.className = 'DeleteSubido';
  93.         del_button.selector = this;
  94.         del_button.onclick = function(){
  95.         this.selector.delete_row(id);
  96.         };
  97.         //Creamos form para datos
  98.         var DateMp3 = document.createElement('div');
  99.         DateMp3.className = "DatosMp3";
  100.         var Caja1 = document.createElement('div');
  101.         Caja1.className = "CajaDateMp3";
  102.         Caja1.innerHTML = " Artista/Grupo<br/><input type='text' name='artista[]' id='artista_"+id+"'/>";
  103.         var Caja2 = document.createElement('div');
  104.         Caja2.className = "CajaDateMp3";
  105.         Caja2.innerHTML = " Titulo<br/><input type='text' name='titulo[]' id='titulo_"+id+"'/>";
  106.         var Caja3 = document.createElement('div');
  107.         Caja3.className = "CajaDateMp3";
  108.         Caja3.innerHTML = " Genero musical<br/><input type='text' name='genero[]' id='genero_"+id+"'/>";
  109.         DateMp3.appendChild(Caja1);
  110.         DateMp3.appendChild(Caja2);
  111.         DateMp3.appendChild(Caja3);
  112.        
  113.         //Create list row
  114.         upload_files.appendChild(new_delete);
  115.         new_delete.appendChild(del_button);
  116.         new_delete.appendChild(DateMp3);
  117.         //Counters ++
  118.         this.count++;
  119.         this.j++;
  120.         //Hide input and add another
  121.         var o = document.getElementById(input_prefix+'_'+id);
  122.         o.style.position = 'absolute';
  123.         o.style.left = '-1920px';
  124.         this.add_new_row();
  125.     };
  126.  
  127. };

Y este es el PHP que procesa lo enviado:
Código PHP:
Ver original
  1. if(is_array($_POST['artista'])){
  2.                         $valido = 9;
  3.                         $subidos = 0;
  4.                         $ip = $_SERVER[REMOTE_ADDR];
  5.                         $fecha = date("Y-m-d",time());
  6.                         $filepath = getcwd()."/tmp/mp3pending/";
  7.                         $forpath = split("-",$fecha);
  8.                         $pathano = $filepath.$forpath[0]."/";
  9.                         $pathmes = $pathano.$forpath[1]."/";
  10.                         $pathdia = $pathmes.$forpath[2]."/";
  11.                         if(!file_exists($pathano)){ mkdir($pathano,0777); }
  12.                         if(!file_exists($pathmes)){ mkdir($pathmes,0777); }
  13.                         if(!file_exists($pathdia)){ mkdir($pathdia,0777); }
  14.                         $path = $pathdia;
  15.                         chmod($path,0777);
  16.  
  17.                         for($i=0;$i<=count($_POST['artista'])-1;$i++){
  18.                            
  19.                             $artista = htmlspecialchars(limp($_POST['artista'][$i]));
  20.                             $titulo = htmlspecialchars(limp($_POST['titulo'][$i]));
  21.                             $genero = htmlspecialchars(limp($_POST['genero'][$i]));            
  22.                             $name = substr(md5(uniqid(rand())),0,10).".mp3";
  23.                             $name_ori = $_FILES['file']['name'][$i];
  24.                             $name_input = "C:\fakepath\".$name_ori;
  25.                             $size = $_FILES['file']['size'][$i];
  26.                             $url = "http://music-strike.net/".str_replace('/home/music/public_html/','',$path.$name);
  27.                            
  28.                             if(move_uploaded_file($_FILES['file']['tmp_name'][$i], $path.$name)){
  29.                                 $subidos++;
  30.                                 chmod($path.$name, 0777);
  31.                                 $sql = "INSERT INTO music_pend (genero,artista,titulo,name_actu,name_ori,size,url,user_id,fecha,ip,valido) VALUES ('$genero','$artista','$titulo','$name','$name_ori','$size','$url','$user_id','$fecha','$ip','$valido')";
  32.                                 $consulta = mysql_query($sql);
  33.                             }
  34.                         }
  35.                         if($subidos==1){
  36.                             echo "<center><img src='http://music-strike.net/images/icons/bien.png'/><br/> <span style='color: green; font-size: 1.3em;'>Archivo subido exitosamente!</span></center>";
  37.                         }else{
  38.                             echo "<center><img src='http://music-strike.net/images/icons/bien.png'/><br/>  <span style='color: green; font-size: 1.3em;'>Archivos subidos exitosamente!</span></center>";
  39.                         }
  40.                 }else{
  41.                     echo "vuelve a mostrar como que no se ha enviado";
  42.                 }

Como veras, en ningún lado no defino ningún tipo de capacidad, por lo cual imagino que no deberia a haber problemas, pero...

Solo se admiten archivos MP3, temas que van entre 1 y 5 minutos o mas, lo que son estandar, una media de 6MB por archivo y hasta un maximo de 5 archivos. Pero ya te digo el codigo en principio parece que esta todo bien, por eso es que no veia la necesidad de publicarlo, lo mas probable segun parece es que el problema trate de eso que mencionas, tiempo de ejecucion o el limite de archivos a subir
  #8 (permalink)  
Antiguo 08/05/2013, 08:23
Avatar de bulter  
Fecha de Ingreso: enero-2008
Mensajes: 137
Antigüedad: 16 años, 10 meses
Puntos: 20
Respuesta: PHP no toma valores enviados de form con javascript

El tamaño maximo del archivo no lo defines en el archivo PHP lo defines en el INI
Si no me equivoco ( en ese PC no tengo el PHP asi que no lo puedo mirar ) el tamaño maximo eran 2MB. Abre te el archivo php.ini y busca la linea que dice "upload_max_filesize =" y mira a cuanto lo tienes
  #9 (permalink)  
Antiguo 08/05/2013, 08:23
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: PHP no toma valores enviados de form con javascript

Código PHP:
Ver original
  1. $name_input = "C:\fakepath\".$name_ori;

En esta linea de código esta mal, el \ esta escapando las comillas dobles al final del string, eso te debería causar un error

Cita:
Como veras, en ningún lado no defino ningún tipo de capacidad, por lo cual imagino que no deberia a haber problemas, pero...
PHP por defecto pone un limite en MB definido en el php.ini, no se cuantos archivos al final intentas subir, pero bueno, tu código es bastante complicado (especialmente el javascript), te recomiendo que primero tengas un formulario basico y un archivo PHP basico para guardar los archivos, cuando te funcione vas agregando poco a poco lo que ya tienes ahora ya que es bastante complicado lo que tienes ahorita, la otra es depurar tu código y trazar y ver donde esta el error o problema
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #10 (permalink)  
Antiguo 08/05/2013, 08:38
 
Fecha de Ingreso: noviembre-2008
Ubicación: Cochabamba Bolivia
Mensajes: 519
Antigüedad: 16 años
Puntos: 26
Respuesta: PHP no toma valores enviados de form con javascript

Cita:
Iniciado por Nemutagk Ver Mensaje
Código PHP:
Ver original
  1. $name_input = "C:\fakepath\".$name_ori;

En esta linea de código esta mal, el \ esta escapando las comillas dobles al final del string, eso te debería causar un error



PHP por defecto pone un limite en MB definido en el php.ini, no se cuantos archivos al final intentas subir, pero bueno, tu código es bastante complicado (especialmente el javascript), te recomiendo que primero tengas un formulario basico y un archivo PHP basico para guardar los archivos, cuando te funcione vas agregando poco a poco lo que ya tienes ahora ya que es bastante complicado lo que tienes ahorita, la otra es depurar tu código y trazar y ver donde esta el error o problema
Repito, con el anterior codigo tan sencillo he hecho la prueba, y el problema tambien se presenta, entonces ya he hecho lo que dices de empezar desde un codigo mas simple. los problemas con el codigo lo descarto, vieras que he probado con todo, lo de la barra invertida lo tengo en codigo binario, pero aqui sale asi, por lo cual no me da problemas.

Por eso digo que el codigo es largo, que es lo que lo hace ver complicado, pero ya he hecho la prueba sin javascript y un form tan sencillo como el codigo anterior y el problema persiste.

Creo que es mas probable que el problema venga con lo del PHP.ini. Voy a cambiar eso y ya les cuento el resultado.

Gracias por su ayuda a todos.
  #11 (permalink)  
Antiguo 10/05/2013, 02:20
 
Fecha de Ingreso: noviembre-2008
Ubicación: Cochabamba Bolivia
Mensajes: 519
Antigüedad: 16 años
Puntos: 26
Respuesta: PHP no toma valores enviados de form con javascript

Bueno, tenian razon, el problema esta en el php.ini, para que a alguien le sirva, es mejor hacerlo por el WHM:

Inicio »Service Configuration »PHP Configuration Editor

Ahi esta la opcion de upload_max_filesize que tiene que estar con la cantidad de MB que quieres que se suba.

Ademas de eso tambien hay que modificar la cantidad de MB que quieres que se procese envios POST con php:

upload_max_filesize =
post_max_size =


Gracias a todos.

Etiquetas: enviados, form, formulario, javascript, toma
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 10:40.