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
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
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
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
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
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
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