Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Envío formulario a email jQuery, JavaScript

9 de enero de 2014

Hola, tengo un problemilla a la hora de que me llegue el correo. Al final me he animado y he usado algo de jQuery, pero en el envío de los resultados al correo me he trabado.

Este es el HTML por así decirlo. El apartado codi me llega correctamente pero el apartado selreunions no me llega, y después de probar mil y una ocurrencias, me doy por vencido.. Sólo es cambiar algo en el PHP, pero no me salgo con la mía. (más explicaciones abajo)

<form action="sr.php" method="post"
      onsubmit="return validant()" id="valcheck" name="valcheck">
 
  <span style="border-collapse: collapse;
              -webkit-border-horizontal-spacing: 2px;
              -webkit-border-vertical-spacing: 2px;"></span>  
 
<div class="side-by-side clearfix">
  <div>
    <select id="selreunions" name="selreunions" data-placeholder="message1" 
            style="width: 200%; text-align: center;" class="chosen-select" 
            multiple="" tabindex="6">
 
      <option value=""></option>
 
      <optgroup label="MESSAGE2">
        <option value="ANT_1">Message3</option>
        <option value="ANT_2">message4</option>
        <option value="ANT_3">message5</option>
      </optgroup>
 
      <optgroup label="MESSAGE6">
        <option value="ANT_13">message7</option>
        <option value="ANT_14">message8</option>
      </optgroup>
 
    </select>
  </div>
</div>
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js" type="text/javascript"></script>
<script src="chosen.jquery.js" type="text/javascript"></script>
<script src="docsupport/prism.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
var config = {
  '.chosen-select'           : {},
  '.chosen-select-deselect'  : {allow_single_deselect:true},
  '.chosen-select-no-single' : {disable_search_threshold:10},
  '.chosen-select-no-results': {no_results_text:'message8!'},
      '.chosen-select-width' : { width:"95%" }
};
 
for (var selector in config) {
  $(selector).chosen(config[selector]);
}
</script>
 
<label for="codi">
  <input type="text" size="12" style="margin-right: auto; margin-left: auto;" 
         name="codi" id="codi" onchange="javascript:this.value=this.value.toLowerCase();">
</label>
 
<br>
 
<input name="Submit" type="submit" value="message12"
       class="art-button" style="zoom: 1; ">
 
</form>

Y este es el PHP para que me llegue el correo con la información:

<?php
 
$mail  = 'email1';
$email = 'email2';
 
$S1 = $_POST['selreunions'];
$S2 = $_POST['codi'];
 
$thank = "/3/3/index.html";
 
$message = "
 
MESSAGE1: ".$S1."
 
message2: ".$S2."";
 
 
if (mail($mail, "message3", $message, "FROM: ".$email)) {
  Header ("Location: $thank" );
}

Bien, hasta aquí me llega el email, pero solo contiene los datos de message2 y los de MESSAGE1 no. Se que solo es cambiar alguna chorrada en el PHP pero no me salgo con la mía, ¿me echaríais un cable por favor?

Muchísimas gracias anticipadas.


Respuestas

#1

Para asegurarte de que al enviar el formulario se está enviando bien el valor seleccionado en la <select>, te recomiendo que hagas una prueba rápida.

Cambia tu etiqueta <form> actual:

<form action="sr.php" method="post"
      onsubmit="return validant()" id="valcheck" name="valcheck">

Por la siguiente etiqueta, que debe mostrar por pantalla el valor seleccionado en la <select> cuando se envía el formulario:

<form action="sr.php" method="post" id="valcheck" name="valcheck"
      onsubmit="lista = document.getElementById('selreunions'); alert(lista.options[lista.selectedIndex].text); return validant()" >

Mira a ver si sale el valor correcto o si se produce algún error y dínoslo para que sigamos buscando la causa del error.

@javiereguiluz

11 enero 2014, 22:59
#2

Antes de nada Muchas gracias por la respuesta, en ambos me sale lo mismo. Lo primero disculpas porque si que me salía el resultado, pero no el deseado, es decir selreunions es una lista de selección múltiple;

Yo selecciono mas de una opción y solo se me envía al correo el valor de la última opción que he seleccionado.

Ejemplo: yo en la web selecciono Message3,Message5 y Message4 introduzco el campo codi y le doy a enviar.

En el email recibo el valor del campo codi y sólo el valor de Message4 que ha sido el último que he seleccionado en la lista de selección múltiple. Los valores de Message3 y Message5 que también han sido seleccionados, no me llegan.

He probado de poner lo que me has dicho ( onsubmit="lista = document.getElementById('selreunions'); alert(lista.options[lista.selectedIndex].text); return validant()" ) en el HTML y me llega lo mismo pero, con la única diferencia de que al pulsar enviar, me aparece una alerta que muestra en pantalla la última opción que he seleccionado, en el caso del ejemplo seria el nombre de Message4

@Fruithg

11 enero 2014, 23:33
#3

Hola, ¡son de esos errores que no se ven! Ahora con tu segunda explicación te entendí mejor. Tu problema es que al name del <select> no le has dicho que va a ser un array y lo trata como uno solo, para ello pon:

<select name="selreunions[]" ... > ... </select>

Un saludo

@AlbertoVioque

12 enero 2014, 20:32
#4

Hola, gracias por la ayuda. Ahora se ve que hay mas de un fallo que no se ve jeje He puesto lo que me has dicho y ahora en el email (haya seleccionado lo que haya seleccionado) me llega la palabra Array en el campo correspondiente a la lista de selección múltiple.

¿Quizá haya que formular de diferente manera el PHP?

@Fruithg

12 enero 2014, 22:09
#5

En efecto el problema es que PHP no puede convertir un array en una cadena de texto automáticamente. Para hacerlo, tienes que utilizar la función implode(). Ejemplo:

// tu código original
$S1 = $_POST['selreunions'];
$S2 = $_POST['codi'];
 
// lo que tienes que utilizar
$S1 = implode(", ", $_POST['selreunions']);
$S2 = $_POST['codi'];

El primer argumento de la función implode() es el texto que se va a utilizar para unir las partes del array (en este caso se utiliza una coma y un espacio en blanco, pero puedes utilizar cualquier cosa). El segundo parámetro de la función es directamente el array que quieres convertir en una cadena de texto.

@javiereguiluz

12 enero 2014, 22:22
#6

Ese era todo el problema jaja

Ya está todo funcionando a la perfección con el añadido del name="selreunions[]" y del implode()

¡Muchísimas gracias a ambos por la ayuda!

@Fruithg

12 enero 2014, 22:47