Ir al contenido


Foto

jquery php array

array jquery php

  • Por favor identifícate para responder
4 respuestas en este tema

#1 algunmae

algunmae

    Member

  • Miembros
  • PipPip
  • 31 mensajes

Escrito 10 noviembre 2015 - 12:47

Buenas. Ocupo que me ayuden con algo que no tengo mucha idea de como. No se usa BD. Debo hacer un form que tenga 3 camposy que se le pueden agregar mas luego enviar todo a un correo. Aca esta la parte del form de los campos
 


php
  1. <form action="mensajero.php" method="post" name="email_form" id="email_form">
  2. <label for="">Nombre:</label>
  3. <input type="text" name="nombre" value=""/>
  4.  
  5. <label for="">email:</label>
  6. <input type="text" name="email" value=""/>
  7. <label for="">Cantidad:</label>
  8. <input type="text" name="cantidad" value=""/>
  9.  
  10. <input type="button" id="boton" value="append() añadir contenido nuevo">
  11. <input type="submit" value="Enviar mensaje"/>
  12. </form>

este form debe ser capaz de agregar mas campos es decir utilizando prepend puedo agregar un campo más. Aca está el jquery

 


php
  1. <script type="text/javascript">
  2. $(document).ready(function() {
  3. $(":button#boton").click(function(){
  4. $("#email_form").prepend("Nombre <input type='text' name='nombre2' value=''/> <input type='text' name='email2' value=''/> <input type='text' name='cantidad2' value=''/><br>");
  5. })
  6. });
  7. </script>

dice nombre2,email2,cantidad2, por una prueba. La idea es que donde dice 2 sea como un array y aca es lo que no tengo mucha idea. AL tener la fila 1 es nombre1,email1,cantidad1. cuando le doy agregar otra fila deberia salir nombre2,email2,cantidad2, cuando le doy deberia salir 3... y asi en adelante.Esto debe ir a una clase llamada mensajero.php que es donde envia un correo con esos datos. pero igual debe tomar el nombre1 luego el 2 y etc. Acá les dejo el mensajero.php


php
  1. <?php
  2.  
  3.  
  4. if(isset($_POST['nombre'])&&($_POST['email']!='')){
  5. $nombre = $_POST['nombre'];
  6. $email= $_POST['email'];
  7. $cantidad=$_POST['cantidad'];
  8.  
  9. $nombre2 = $_POST['nombre2'];
  10. $email2= $_POST['email2'];
  11. $cantidad2=$_POST['cantidad2'];
  12. //contenido del mensajeS
  13. $titulo= "CRPlants";
  14. $contenido='
  15.  
  16. Has recibido un mensaje de la web
  17.  
  18.  
  19. El cliente '.$nombre.' con el email '.$email.' quiere'.$cantidad.'aaaaa
  20.  
  21. El cliente '.$nombre2.' con el email '.$email2.' quiere'.$cantidad2.'aaaaa
  22.  
  23.  
  24. ';//fin del contenedor
  25.  
  26. ?><hr><?php
  27. $encabezado='MINE-Version: 1.0\r\n';
  28. $encabezado.= "content-type: text/html; charset=utf-8 \r\n";
  29. $encabezado.= "From: Prueba.com <no-reply@correo.la>\r\n";
  30. $encabezado.="Reply-To: no-reply@correo.la\r\n";
  31.  
  32. $envio = mail($email,$titulo,$contenido,$encabezado);
  33.  
  34. if($envio==true){
  35. echo "El mensaje se ha enviado correctamente";
  36. }else{
  37. echo "error de envio";}
  38.  
  39. }else{
  40. echo "se ha presentado un error. verifique que todo se llene";
  41.  
  42. }
  43.  
  44.  
  45. ?>

Se que hay que hacer un for pero la vdd no tengo mucha idea como. Cualquier ayuda serviría demasiado. Muchas gracias


  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 10 noviembre 2015 - 02:40

Lo que debes hacer es agregar en algun lado un input escondido con el valor incremental, vamos a llamarlo con el id "autoincremento que es donde vamos a obtener el valor siguiente:
 

html5
  1. <form action="mensajero.php" method="post" name="email_form" id="email_form">
  2. <input type="hidden" id="autoincremento" value="1" /> <!-- este es el input nuevo -->
  3.  
  4. <label for="">Nombre:</label>
  5. <input type="text" name="nombre" value=""/>
  6.  
  7. <label for="">email:</label>
  8. <input type="text" name="email" value=""/>
  9. <label for="">Cantidad:</label>
  10. <input type="text" name="cantidad" value=""/>
  11.  
  12. <input type="button" id="boton" value="append() añadir contenido nuevo">
  13. <input type="submit" value="Enviar mensaje"/>
  14. </form>

aqui el jquery:


javascript
  1. <script type="text/javascript">
  2. $(document).ready(function() {
  3. $(":button#boton").click(function(){
  4.  
  5. var siguiente = +$('input#autoincremento').val() + 1;
  6.  
  7. $("#email_form").prepend('Nombre <input type="text" name="nombre'+siguiente+'" value=""/> <input type="text" name="email'+siguiente+'" value=""/> <input type="text" name="cantidad'+ siguiente+'" value=""/><br>');
  8.  
  9. $(':input#autoincremento').val(siguiente);
  10. })
  11. });
  12. </script>

LO puedes ver en funcionamiento en el siguiente enlace:

https://jsfiddle.net/ca0ggr41/

Nota: con prepend los nuevos campos se colocan de primero, si quieres que sean después utiliza append.

Saludos
  • 1

#3 algunmae

algunmae

    Member

  • Miembros
  • PipPip
  • 31 mensajes

Escrito 10 noviembre 2015 - 03:53

Saludos.Eso esta genial muchas gracias. Lo unico es como quedaría la clase de mensajero, tendría que ir con un for o como sería?. muchas gracias
  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 12 noviembre 2015 - 11:00

Aquí habría que hacer un pequeño cambio cada input hay que cambiarle el name por un array, así:
 
 

html5
  1. <form action="mensajero.php" method="post" name="email_form" id="email_form">
  2. <input type="hidden" id="autoincremento" value="1" /> <!-- este es el input nuevo -->
  3.  
  4. <label for="">Nombre:</label>
  5. <input type="text" name="datos[nombre1]" value=""/>
  6.  
  7. <label for="">email:</label>
  8. <input type="text" name="datos[email1]" value=""/>
  9. <label for="">Cantidad:</label>
  10. <input type="text" name="datos[cantidad1]" value=""/>
  11.  
  12. <input type="button" id="boton" value="append() añadir contenido nuevo">
  13. <input type="submit" value="Enviar mensaje"/>
  14. </form>

El Jquery quedaría así:
 
 

javascript
  1. <script type="text/javascript">
  2. $(document).ready(function() {
  3. $(":button#boton").click(function(){
  4.  
  5. var siguiente = +$('input#autoincremento').val() + 1;
  6.  
  7. $("#email_form").prepend('Nombre <input type="text" name="datos[nombre'+siguiente+']" value=""/> <input type="text" name="datos[email'+siguiente+']" value=""/> <input type="text" name="datos[cantidad'+ siguiente+']" value=""/><br>');
  8.  
  9. $(':input#autoincremento').val(siguiente);
  10. })
  11. });
  12. </script>

 
Y en el mensajero obtienes los campos recorriendo el $_POST:
 
 

php
  1. $datos = $_POST['datos'];
  2. for ($i=0; $i< count($datos); $i++){
  3.     echo $datos[$i]."<br />";
  4. }
  5. ?>

Ojo, lo hice al vuelo, puede que falle en algún, pero te dará una pista por donde ir ;)

Saludos.
  • 1

#5 algunmae

algunmae

    Member

  • Miembros
  • PipPip
  • 31 mensajes

Escrito 16 noviembre 2015 - 11:48

genial muchisisismas voy a probar y todo. gracias
  • 0





Etiquetado también con una o más de estas palabras: array, jquery, php