Foros del Web » Programando para Internet » PHP »

Problema con formulario

Estas en el tema de Problema con formulario en el foro de PHP en Foros del Web. Hola gente Necesito modificar unos datos en la BBDD, pero tengo un problema con el formulario que cumple esa función. La cuestión es que cuando ...
  #1 (permalink)  
Antiguo 13/09/2015, 17:27
Avatar de NueveReinas  
Fecha de Ingreso: septiembre-2013
Ubicación: No tan Buenos Aires
Mensajes: 1.101
Antigüedad: 10 años, 7 meses
Puntos: 145
Exclamación Problema con formulario

Hola gente

Necesito modificar unos datos en la BBDD, pero tengo un problema con el formulario que cumple esa función.

La cuestión es que cuando envío los datos por AJAX (jQuery), cuando uno de los campos está vacío, al hacer click en el botón de "submit" simplemente no hace nada. Pero si envío ese mismo formulario con el "action" vacío (para que actúe sobre la misma página) y le pongo el mismo código PHP, sí lo envía, y me muestra el campo correspondiente como vacío.

Ejemplo con código:

index.php

Código PHP:
Ver original
  1. <!doctype html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Prueba form</title>
  6. <script src="jquery-2.1.1.min.js"></script>
  7. </head>
  8.  
  9. <body>
  10.  
  11. <form method="POST" id="form-mod" accept-charset="utf-8" enctype="multipart/form-data">
  12.     <div class="etiqueta-panel">Nuevo código</div>
  13.     <input type="text" name="nuevo_codigo" class="in-panel" id="nuevo_codigo" maxlength="9" autocomplete="off" />
  14.  
  15.     <div class="etiqueta-panel">Nueva descripción</div>
  16.     <input type="text" name="nueva_descripcion" class="in-panel" id="nueva_descripcion" maxlength="50" autocomplete="off" />
  17.  
  18.     <input type="submit" name="submit" class="boton-principal" value="Modificar" />
  19. </form>
  20.  
  21. <hr>
  22.  
  23. <div id="mensaje-mod"></div>
  24.  
  25.  
  26. <script>
  27. $(document).ready(function(){
  28. $("#mensaje-mod").hide();
  29.  
  30. $("#form-mod").on("submit", function(e){
  31.     e.preventDefault();
  32.     var formData = new FormData(document.getElementById("form-mod"));
  33.  
  34.     $.ajax({
  35.         url: "mod.php",
  36.         type: "POST",
  37.         dataType: "HTML",
  38.         data: formData,
  39.         cache: false,
  40.         contentType: false,
  41.         processData: false
  42.     }).done(function(echo){
  43.         if ($("#form-mod input,textarea").val() != "") {
  44.         $("#mensaje-mod").html(echo);
  45.         $("#mensaje-mod").slideDown(500);
  46.         };
  47.     });
  48. });
  49.  
  50. });
  51. </script>
  52.  
  53. </body>
  54. </html>

mod.php

Código PHP:
Ver original
  1. <?php
  2. $codigoNuevo = $_POST['nuevo_codigo'];
  3. $descripcionNueva = $_POST['nueva_descripcion'];
  4. print_r($_POST);
  5. ?>

Entonces, si escribo en el primer campo (nuevo_codigo) A y en segundo (nueva_descripcion) B, recibo esto:



Pero si no escribo nada en primer campo y algo en el segundo, simplemente no devuelve nada:

(nótese el botón siendo apretado)



O sea, no cambia nada. Sin embargo, si veo las peticiones al servidor, sí que envía los datos.



PERO si hago lo siguiente, sí que me muestra los datos vacíos...

Código PHP:
Ver original
  1. <!doctype html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Prueba form</title>
  6. <script src="jquery-2.1.1.min.js"></script>
  7. </head>
  8.  
  9. <body>
  10.  
  11. <form method="POST" action="" id="form-mod" accept-charset="utf-8" enctype="multipart/form-data">
  12.     <div class="etiqueta-panel">Nuevo código</div>
  13.     <input type="text" name="nuevo_codigo" class="in-panel" id="nuevo_codigo" maxlength="9" autocomplete="off" />
  14.  
  15.     <div class="etiqueta-panel">Nueva descripción</div>
  16.     <input type="text" name="nueva_descripcion" class="in-panel" id="nueva_descripcion" maxlength="50" autocomplete="off" />
  17.  
  18.     <input type="submit" name="submit" class="boton-principal" value="Modificar" />
  19. </form>
  20.  
  21. <hr>
  22.  
  23. <?php
  24. if(isset($_POST['submit'])) {
  25. $codigoNuevo = $_POST['nuevo_codigo'];
  26. $descripcionNueva = $_POST['nueva_descripcion'];
  27. print_r($_POST);
  28. };
  29. ?>
  30.  
  31. <div id="mensaje-mod"></div>
  32.  
  33. </body>
  34. </html>



¿Cómo se puede solucionar esto? No se qué problema puede haber, y necesito enviar los datos por AJAX sí o sí...

jrasias d ante braso
__________________
¿Te sirvió la respuesta? Deja un +1
  #2 (permalink)  
Antiguo 13/09/2015, 19:14
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema con formulario

Pues no veo "el error" que mencionas, es decir, el código php funciona porque los print_r() te muestran datos en ambos casos que expones.

Además dices que las peticiones sí se hacen a través de Ajax según las imágenes que muestras.

¿Cual era el problema entonces?

Volviendo a esto que dices:
Cita:
La cuestión es que cuando envío los datos por AJAX (jQuery), cuando uno de los campos está vacío, al hacer click en el botón de "submit" simplemente no hace nada.
¿Entonces tienes problemas con tu código PHP o no lo sabes?

Porque me da la impresión de que tu problema es otro, tal vez Javascript, no lo sé.

Inclusive me sorprende que no hagas un console.log(echo) al recibir los datos en tu función de jQuery.

¿Notaste que tu comparación "hace algo" sólo si un campo no está vacío?

Creo que tu problema está ahí, revisa bien lo que haces.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Etiquetas: formulario, html
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 09:47.