Formulario, problema con envío de checkbox por mail

Relacionada a mi problema para recibir por mail lo que se tildaba en el check box. El único problema que se me esta presentando ahora es que al recibir el mail el <"br"> me figura como parte del texo y no como la función de salto de linea, ¿a qué puede deberse?. Te vuelvo a adjuntar la solución a mi problema para que se entienda un poco mejor.

Los check box son los siguientes
<form action="cont.php" method="post">
<div align="center">
<input type="checkbox" name="numero[]" value="chocolate"/>
<input type="checkbox" name="numero[]" value="vainilla"/>
<input id="submit" type="submit" name="submit" value="Enviar" />
</form>

y en php para que me mande el mail lo puse de la siguiente manera

<?php

foreach($_POST['numero'] as $sabor){
echo $sabor."<br>";}
$a_quien="[email protected]";
$asunto="Asunto del Mail";
$mensaje="le gusta ".$sabor;
mail ( $a_quien , $asunto , $mensaje);
¿?>

El problema es que si en el check box tildo chocolate y vainilla, solo me envía este ultimo y no ambos.

Tu respuesta (la cual funciono a la perfección):
El problema es con la forma en la cual recoges los valores. Si te das cuenta, cada vez que haces el foreach solo haces un echo d la variable $sabor, lo cual no ayuda en nada para saber que sabores se han seleccionado (mostrará los dos valores pero cuando deseas enviarlos por correo solo tendrás el último valor rescatado en el bucle.
Para que puedas trabajar correctamente he creado una variable adicional llamada sabores, la cual guardará todos los sabores seleccionados
$sabores = "";
foreach($_POST['numero'] as $sabor){
$sabores .= $sabor."<br>";
}
Ya solo queda utilizar esta nueva variable para enviarla en el correo.
$mensaje="le gusta ".$sabores;
Lo que dejaría el script de esta forma
<?php
$sabores = "";
foreach($_POST['numero'] as $sabor){
$sabores .= $sabor."<br>";
}
$a_quien="[email protected]";
$asunto="Asunto del Mail";
$mensaje="le gusta ".$sabores;
echo $mensaje;
mail ( $a_quien , $asunto , $mensaje);
¿?>

El problema que se me presenta es que el mail me llega de la siguiente manera:

Le gusta chocolate<br>vainilla<br>

1 Respuesta

Respuesta
1

Tienes que extender la función mail de php agregando cabeceras para que envíe el contenido de tu correo en formato html.

En la documentación oficial de php se detalla este ejemplo

¿
<?php
// Varios destinatarios
$para = '[email protected]' . ', '; // atención a la coma
$para .= '[email protected]';
// título
$título = 'Recordatorio de cumpleaños para Agosto';
// mensaje
$mensaje = '
<html>
<head>
 <title>Recordatorio de cumpleaños para Agosto</title>
</head>
<body>
 <p>¡Estos son los cumpleaños para Agosto!</p>
 <table>
 <tr>
 <th>Quien</th><th>Día</th><th>Mes</th><th>Año</th>
 </tr>
 <tr>
 <td>Joe</td><td>3</td><td>Agosto</td><td>1970</td>
 </tr>
 <tr>
 <td>Sally</td><td>17</td><td>Agosto</td><td>1973</td>
 </tr>
 </table>
</body>
</html>
';
// Para enviar un correo HTML, debe establecerse la cabecera Content-type
$cabeceras = 'MIME-Version: 1.0' . "\r\n";
$cabeceras .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
// Cabeceras adicionales
$cabeceras .= 'To: Mary <[email protected]>, Kelly <[email protected]>' . "\r\n";
$cabeceras .= 'From: Recordatorio <[email protected]>' . "\r\n";
$cabeceras .= 'Cc: [email protected]' . "\r\n";
$cabeceras .= 'Bcc: [email protected]' . "\r\n";
// Enviarlo
mail($para, $título, $mensaje, $cabeceras);
?>

Como ves, la variable cabeceras, concatena una cadena de texto que lleva información relacionada con los destinatarios y remitentes y además de que tipo de contenido enviará. Al generar la cabecera content-type, deja de enviarse texto plano y se envía html.

(Recuerda agregar esa variable como último parámetro de la función mail)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas