elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  [Pregunta]: FormData(); javascript => PHP
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Pregunta]: FormData(); javascript => PHP  (Leído 3,072 veces)
Leguim


Desconectado Desconectado

Mensajes: 719



Ver Perfil
[Pregunta]: FormData(); javascript => PHP
« en: 23 Mayo 2020, 23:47 pm »

Buenas tardes,

Soy muy principiante en el tema y no conozco en profundidad lo que es formdata, lo que pude investigar o entender es que se trataría de un objeto vamos a ponerle que es una "cajita" donde se le puede ir agregando datos/valores de un formulario con append y quitarlos después...

El uso que le estoy dando son miniaturas, es decir cuando el usuario selecciona imágenes se van a mostrar sus pre-visualizaciones, cuando elimina una de estas imágenes se borra dicho dato de la "cajita" que les dije antes... Igual ya deben conocer esto, solamente quería aclarar que uso le estaba dando.

Hasta ahí el sistema funciona de 10, pero no entiendo como puedo pasar esa variable formdata a PHP, digamos que tengo un formulario y después detecto cuando se envíe un determinado formulario. Es decir, lo que se me complica son las validaciones del lado del servidor.

Código
  1. if(isset($_POST['submit_form'])) // al enviar un formulario
  2. {
  3.      $formdata = // ¿Como puedo darle el valor del objeto formdata? Comprendo que la única manera de pasar una variable JS a PHP es por medio de AJAX, aunque no se si desconozco otro método.
  4.      // La idea no es hacerlo con AJAX, sino a secas como si fuera cualquier formulario tradicional.
  5. }
  6.  

Gracias.


« Última modificación: 23 Mayo 2020, 23:49 pm por MiguelCanellas » En línea

Leguim


Desconectado Desconectado

Mensajes: 719



Ver Perfil
Re: [Pregunta]: FormData(); javascript => PHP
« Respuesta #1 en: 30 Mayo 2020, 02:46 am »

Parece que no queda de otra,

siendo que se haga con ajax tenía pensado que al momento de enviar dicho formulario se llame a un función (JS) que realizará la petición ajax.
Después de esto estaría pasando los datos del formdata a código PHP, y en ese código PHP crear x cantidad de $_SESSION (dependiendo la cantidad de datos) y luego usarlas en el código tradicional de PHP.

Es decir,

Código
  1. [On Submit]
  2.      Get_FormData();
  3.  

Código
  1. function Get_FormData()
  2. {
  3.       $.ajax({
  4.           // [...]
  5.       })
  6. }
  7.  

Código
  1. // en el archivo del código php que se llamo con ajax
  2. $_SESSION['dato_x'] = $_POST['dato_x'];
  3.  

luego en el envío del formulario...
Código
  1. if(isset($_POST['submit_form'))
  2. {
  3.      echo 'El valor obtenido del form data es '.($_SESSION['dato_x']);
  4.      // se destruye dicha session ya que no se usará más...
  5. }
  6.  

Para esto voy a necesitar usar promesas para que hasta que no se complete la petición ajax no siga ejecutando próximas instrucciones...

De igual forma, esto es una vista simple de lo que tengo pensado... Todavía no tengo muy en claro como voy a hacerlo pero quería leer sus opiniones.


En línea

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.042



Ver Perfil
Re: [Pregunta]: FormData(); javascript => PHP
« Respuesta #2 en: 30 Mayo 2020, 05:42 am »

- Puedes trabajar directamente con el formulario, aunque esto dependerá de como utilices los elementos de dicho formulario, no sé como estás implementando tus miniaturas, me imagino que estas utilizando uno o varios <input type="file">.

- Siempre puedes depurar tu PHP ya sea con tu IDE y/o utilizando las funciones print_r o var_dump(), en mi ejemplo voy a poner un <input type="file"> multiselector que envíe al php el array de los archivos elegidos y este resultado lo formateo para verlo con más claridad:

Código
  1. <?php
  2.  if ($_POST) {
  3.    echo '<pre>';
  4.    echo htmlspecialchars( print_r($_POST, true) );
  5.    echo '</pre>';
  6.  }
  7. ?>
  8.  
  9. <form method="post" action="" id="frm">
  10.  <input type="file" name="img[]" multiple onchange="loadFile()">
  11.  <input type="submit" name="Enviar">
  12. </form>
  13.  
  14. <div id="miniaturas"></div>
  15.  
  16. <script>
  17.  function loadFile() {
  18.    var miniaturas = document.getElementById('miniaturas')
  19.    var imgs = event.target.files
  20.    miniaturas.innerHTML = ""
  21.    for (var i = 0; i < imgs.length; i++) {
  22.      miniaturas.innerHTML += '<img src="' + URL.createObjectURL(imgs[i]) + '">'
  23.    }
  24.  }
  25. </script>

-- En mi caso muestra:

Código
  1. Array
  2. (
  3.    [img] => Array
  4.        (
  5.            [0] => AdobeUpd.png
  6.            [1] => command.gif
  7.            [2] => rar_sfx.gif
  8.            [3] => scr.png
  9.            [4] => win2000_ie6_google.png
  10.        )
  11.  
  12.    [Enviar] => Enviar
  13. )

-- Entonces $_POST['img'] tiene el Array de mis imágenes


- Algo similar si creas tu propio FormData(), en ese caso se puede enviar por medio de Ajax:

ajax.php
Código
  1. <script>
  2.  var formdata = new FormData()
  3.  formdata.append('imagen_1', 'galaxia.jpg')
  4.  formdata.append('imagen_2', 'perrito.jpg')
  5.  
  6.  var ajax = new XMLHttpRequest()
  7.  ajax.open('POST', 'index.php')
  8.  ajax.onreadystatechange = function(){
  9.    if (ajax.readyState === 4) {
  10.      document.write(ajax.response)
  11.    }
  12.  }
  13.  ajax.send(formdata)
  14. </script>

index.php
Código
  1. <?php
  2.  if ($_POST) {
  3.    echo '<pre>';
  4.    echo htmlspecialchars( print_r($_POST, true) );
  5.    echo '</pre>';
  6.  }
  7. ?>

-- Resultando:
Código
  1. Array
  2. (
  3.    [imagen_1] => galaxia.jpg
  4.    [imagen_2] => perrito.jpg
  5. )

-- Lo que significa que tengo $_POST['imagen_1'] y $_POST['imagen_2'] con los valores que necesito
En línea

Leguim


Desconectado Desconectado

Mensajes: 719



Ver Perfil
Re: [Pregunta]: FormData(); javascript => PHP
« Respuesta #3 en: 30 Mayo 2020, 10:27 am »

Te agradezco,

estoy teniendo unos problemas con el código (que no es igual al que me diste). Estoy intentando hacerlo de la siguiente manera:

Código
  1. function MyFunction()
  2. {
  3.     var string = 'Esto es mensaje de prueba.';
  4.  
  5.     $.ajax({
  6. url: (ROOT_URL)+'/ajax/x.php',
  7. type: 'POST',
  8. dataType: 'html',
  9. data: {formdata, string},
  10. contentType: false,
  11.     processData: false,
  12.  
  13. success: function()
  14. {
  15.     // [...]      
  16. }
  17.     })
  18.  
  19.     .done(function(results)
  20.     {
  21. $('body').append(results);
  22.     })
  23. }
  24.  

Después de renegar un buen rato a esto llegué, el problema es que tengo dos datos que quiero enviar que son el formdata y una cadena.

Si yo envío solamente el formdata lo tengo que hacer sin las "{" "}" es decir que quede...
Código
  1. data: formdata,
  2.  

y no
Código
  1. data: {formdata},
  2.  

Si lo hago de la segunda manera no me envía nada así que tengo que hacerlo sin las llaves pero si ya tengo más datos como una cadena en este caso, entonces no se como hacerlo. Porque si uso las llaves como ya dije no envía nada.
« Última modificación: 30 Mayo 2020, 10:29 am por MiguelCanellas » En línea

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.042



Ver Perfil
Re: [Pregunta]: FormData(); javascript => PHP
« Respuesta #4 en: 30 Mayo 2020, 16:20 pm »

- Estás mezclando los tipos de datos a enviar, Ajax requiere un solo Objeto, ¿Porqué no haces un append de tu String dentro del FormData para que se envíe todo en una?
En línea

Leguim


Desconectado Desconectado

Mensajes: 719



Ver Perfil
Re: [Pregunta]: FormData(); javascript => PHP
« Respuesta #5 en: 30 Mayo 2020, 23:37 pm »

Gracias!
Ya todo está funcionando.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Pregunta en javascript « 1 2 »
Desarrollo Web
emma93 10 4,761 Último mensaje 2 Octubre 2010, 03:38 am
por Dznp
Pregunta javascript
Desarrollo Web
Riki_89D 4 3,108 Último mensaje 1 Diciembre 2010, 21:57 pm
por Riki_89D
[Pregunta]: El cursor se modifica con javascript de una forma horrible.
Desarrollo Web
Leguim 4 2,976 Último mensaje 7 Octubre 2020, 19:14 pm
por Leguim
[Pregunta]: Tengo problemas para vaciar un formdata porque solamente se elimina el primer dato.
Desarrollo Web
Leguim 2 2,991 Último mensaje 28 Octubre 2020, 08:07 am
por Leguim
[Pregunta]: Definir un arreglo vacío (javascript).
Desarrollo Web
Leguim 3 3,423 Último mensaje 4 Enero 2021, 14:38 pm
por MinusFour
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines