Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] PHP OO Enviar un formulario segun datos completados

Estas en el tema de Enviar un formulario segun datos completados en el foro de PHP en Foros del Web. Hola a todos, Tengo un formulario en html5 + jquery con sus validaciones que funciona perfectamente. Las variables son recopiladas y enviadas mediante php. Mi ...
  #1 (permalink)  
Antiguo 09/02/2015, 15:45
 
Fecha de Ingreso: junio-2008
Mensajes: 21
Antigüedad: 15 años, 10 meses
Puntos: 0
De acuerdo Enviar un formulario segun datos completados

Hola a todos,

Tengo un formulario en html5 + jquery con sus validaciones que funciona perfectamente. Las variables son recopiladas y enviadas mediante php.

Mi consulta es como podría enviar por mail solo los datos que fueron completados, es decir armar dinámicamente un mail de envío según los campos completados. Es necesario hacer esto ya que el formulario es muy largo, contiene muchas variables, pero no se completan todos los datos.

Ejemplo:
En el formulario hay para completar nombre, apellido, dirección y teléfono. Son de campo obligatorio solo el nombre y el apellido, el cual lo valido correctamente, pero al ser enviado, llega de este modo:

Nombre: Luis
Apellido: Perez
Dirección:
Teléfono: 12345678

y yo necesito que llegue de esta forma:
Nombre: Luis
Apellido: Perez
Teléfono: 12345678

Es decir, que si no completo el campo dirección, directamente no arme el mail con ese campo.

Son mas de 300 campos, por eso la necesidad de hacer esto.

Hay alguna forma de hacerlo? como se llama esta técnica, así investigo un poco.

Muchas gracias de antemano a todos.

Saludos.

Última edición por elmati26; 09/02/2015 a las 16:07
  #2 (permalink)  
Antiguo 09/02/2015, 16:12
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Enviar un formulario segun datos completados

Si tuvieras agrupados todos los datos en un array en común sería fácil:
Código PHP:
Ver original
  1. $mensaje = '';
  2.  
  3. foreach ($datos as $clave => $valor) {
  4.   if (!empty($valor)) {
  5.     // OK
  6.    $mensaje .= "$clave = $valor <br>";
  7.   }
  8. }

¿Se entiende la idea?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 09/02/2015, 19:04
 
Fecha de Ingreso: junio-2008
Mensajes: 21
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Enviar un formulario segun datos completados

mmm no soy muy bueno que digamos.

Las variable las importo de la siguiente forma:

Código PHP:
@$nombre_contacto addslashes($_POST['nombre_contacto']);
@
$apellido_contacto addslashes($_POST['apellido_contacto']);
@
$email_contacto addslashes($_POST['email_contacto']);
@
$telefono_contacto addslashes($_POST['telefono_contacto']); 
Luego armo el envío del mail con las cabeceras, asunto, mail y contenido, donde el contenido lo tengo armado en HTML para poder usar css, creo que con eso me estoy haciendo lio.
Algo así es el contenido, aunque algo mas extenso:

Código PHP:
$contenido ="<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
<html>
<head> 
Sigo probando...

Muchas gracias por responder.
  #4 (permalink)  
Antiguo 09/02/2015, 19:08
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Enviar un formulario segun datos completados

Si tienes todos los datos por separado debes manejar la lógica paso a paso:

Código PHP:
Ver original
  1. $mensaje = '';
  2.  
  3. if (!empty($x)) {
  4.   $mensaje .= "Valor de x: $x<br>";
  5. }
  6.  
  7. if (!empty($y)) {
  8.   $mensaje .= "Valor de y: $y<br>";
  9. }
  10.  
  11. // etc.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 09/02/2015, 19:11
 
Fecha de Ingreso: junio-2008
Mensajes: 21
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Enviar un formulario segun datos completados

algo así estaba intentando:

Código PHP:
if (!empty($_POST['telefono_contacto']) ){ echo = '<li><a class='#'><b>Teléfono:</b> $telefono_contacto</a></li>'} 
pero al estar dentro del contenido de mail en HTML me estoy mareando, jeje.

El asunto es además poder darle estilo con css.

Sigo probando...

Muchas gracias por responder.
  #6 (permalink)  
Antiguo 09/02/2015, 19:13
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Enviar un formulario segun datos completados

Cita:
pero al estar dentro del contenido de mail en HTML me estoy mareando, jeje.
Yo pienso que ahí es donde estás haciendo mal las cosas, no puedes meter lógica dentro de cadenas de texto.

Sería bueno que muestres lo que llevas hecho para ver que haces exactamente.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 09/02/2015, 19:29
 
Fecha de Ingreso: junio-2008
Mensajes: 21
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Enviar un formulario segun datos completados

Seguro el tema viene por el HTML. Actualmente esta funcionando bien, y llega con estilo css, salvo que llegan varios campos vacíos. Y en el otro formulario de mas de 300 variables es un problema.
A continuación te muestro el código completo.
Muchas gracias nuevamente por todo.

Código PHP:
<?php
session_start
();  
$verifica $_SESSION["verifica"];  

//Importamos las variables del formulario de contacto
@$nombre_contacto addslashes($_POST['nombre_contacto']);
@
$apellido_contacto addslashes($_POST['apellido_contacto']);
@
$email_contacto addslashes($_POST['email_contacto']);
@
$telefono_contacto addslashes($_POST['telefono_contacto']);
@
$status5 addslashes($_POST['status5']);
@
$dia_fecha_de_pago addslashes($_POST['dia_fecha_de_pago']);
@
$mes_fecha_de_pago addslashes($_POST['mes_fecha_de_pago']);
@
$ano_fecha_de_pago addslashes($_POST['ano_fecha_de_pago']);
@
$cobro_tarjeta addslashes($_POST['cobro_tarjeta']);
@
$cobro_pagofacil addslashes($_POST['cobro_pagofacil']);
@
$cobro_rapipago addslashes($_POST['cobro_rapipago']);
@
$cobro_bapro addslashes($_POST['cobro_bapro']);
@
$ndeterminal addslashes($_POST['ndeterminal']);
@
$ndesucursal addslashes($_POST['ndesucursal']);
@
$ndesobre addslashes($_POST['ndesobre']);
@
$ndeoper addslashes($_POST['ndeoper']);
@
$ndeoperacion addslashes($_POST['ndeoperacion']);
@
$tipocuenta addslashes($_POST['tipocuenta']);
@
$cuentaorigen addslashes($_POST['cuentaorigen']);

//Preparamos el mensaje de contacto
$cabeceras "From: $email_contacto\n" //La persona que envia el correo
 
"MIME-Version: 1.0\n"
 
"Reply-To: $email_contacto\n"
 
"Content-type: text/html; charset=UTF-8\n";
$asunto "Asunto del email"//asunto aparecera en la bandeja del servidor de correo
$email_to "[email protected]"//cambiar por tu email
$contenido ="<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
<html>
<head>
<meta name='viewport' content='width=device-width' />
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />
<title>Información de Pago</title>

</head>
<body bgcolor='#FFFFFF' topmargin='0' leftmargin='0' marginheight='0' marginwidth='0'>
<!-- HEADER -->
<table class='head-wrap' bgcolor='#999999'>
    <tr>
        <td></td>
        <td class='header container' >
                <div class='content'>
                <table bgcolor='#999999'>
                    <tr>
                        <td><a href='http://www.web.com' id='logo'><img src='http://web.com/images/logo.png' alt='Estudio Online - ITI Urgente'></a></td>
                        <td align='right'><h6 class='collapse'>Tel.: (011) 3221-4964 </h6></td>
                    </tr>
                </table>
                </div>
      </td>
        <td></td>
    </tr>
</table><!-- /HEADER -->
<!-- BODY -->
<table class='body-wrap'>
    <tr>
        <td></td>
        <td class='container' bgcolor='#FFFFFF'>
            <div class='column-wrap'>
<div class='column'>
                <table>
                <tr>
                    <td>                
                        <ul class='sidebar'>
                            <li>
                                <a>
                                    <h5>Datos de Contacto</h5>
                                </a>
                            </li>
                            <li><a class='#'><b>Nombre:</b> $nombre_contacto</a></li>
                            <li><a class='#'><b>Apellido:</b> $apellido_contacto</a></li>
                            <li><a class='#'><b>Email:</b> $email_contacto</a></li>
                            <li><a class='#'><b>Teléfono:</b> $telefono_contacto</a></li>
                            <li>
                                <a>
                                    <h5>Datos del Pago</h5>
                                </a>
                            </li>
                            <li><a class='#'><b>Método de Pago:</b> $status5</a></li>
                            <li><a class='last'><b>Fecha de Pago:</b> $dia_fecha_de_pago de $mes_fecha_de_pago del $ano_fecha_de_pago</a></li>
                        </ul>
                    </td>
                </tr>
            </table>                
            </div>            
                <div class='column'>
                <table>
                <tr>
                    <td>                
                        <ul class='sidebar'>
                            <li>
                                <a>
                                    <h5>Información Adicional</h5>
                                </a>
                            </li>
                            <li><a class='#'><b>N° de Comprobante:</b> $cobro_bapro $cobro_rapipago $cobro_pagofacil $cobro_tarjeta</a></li>
                            <li><a class='#'><b>N° de Terminal:</b> $ndeterminal</a></li>
                            <li><a class='#'><b>N° de Sucursal:</b> $ndesucursal</a></li>
                            <li><a class='#'><b>N° de Sobre:</b> $ndesobre</a></li>
                            <li><a class='#'><b>N° de Operación:</b> $ndeoperacion $ndeoper</a></li>
                            <li><a class='#'><b>Tipo de Cuenta:</b> $tipocuenta</a></li>
                            <li><a class='last'><b>N° Cuenta de Origen:</b> $cuentaorigen</a></li>
                        </ul>
                        <!-- social & contact --><!-- /social & contact -->
                    </td>
                </tr>
            </table>                
            </div>
                <div class='clear'></div>            
            </div>
        </td>
        <td></td>
    </tr>
</table><!-- /BODY -->
<!-- FOOTER -->
<table class='footer-wrap' bgcolor='#2b2b2b'>
    <tr>
        <td></td>
        <td class='container'>
            
                <!-- content -->
                <div class='content'>
                <table>
                <tr>
                    <td align='center'>
                        <p style='color: #666'>Copyright © 2014 Estudio Online. Todos los derechos reservados.</p>
                    </td>
                </tr>
            </table>
                </div><!-- /content -->
        </td>
        <td></td>
    </tr>
</table><!-- /FOOTER -->
</body>
</html>"
;
if (
$verifica == 94182)   
{   
unset(
$_SESSION['verifica']);   

// Aqui colocamos el codigo que queremos que se ejecute  
//Enviamos el mensaje y comprobamos el resultado
if (@mail($email_to$asunto ,$contenido ,$cabeceras )) {
//Si el mensaje se envía muestra una confirmación
echo("correcto");
}else{
//Si el mensaje no se envía muestra el mensaje de error
echo("incorrecto");
}
}   
else   
{   
// Si no viene del formulario o trata de recargar pagina los enviamos al formulario  
echo "<META HTTP-EQUIV='Refresh' CONTENT='0; url=pagina.php'>";  
}   
?>

Última edición por webosiris; 10/02/2015 a las 11:03
  #8 (permalink)  
Antiguo 09/02/2015, 19:31
 
Fecha de Ingreso: junio-2008
Mensajes: 21
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Enviar un formulario segun datos completados

quería reemplazar la línea por ejemplo del teléfono:
Código PHP:
<li><class='#'><b>Teléfono:</b$telefono_contacto</a></li
por algo asi:

Código PHP:
if (!empty($_POST['telefono_contacto']) ){ contenido .= "<li><a class='#'><b>Teléfono:</b> $telefono_contacto</a></li>"

Última edición por elmati26; 09/02/2015 a las 19:46
  #9 (permalink)  
Antiguo 09/02/2015, 19:49
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Enviar un formulario segun datos completados

Entiendo, el tema es que no puedes hacerlo así sólo porque sí.

Cuando trabajas con cadenas de texto no puedes meter nada de loǵica estructural dentro.

Lo correcto es separar toda esta información en trozos más pequeños, y con lógica ir ensambando todo.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 10/02/2015, 14:42
 
Fecha de Ingreso: junio-2008
Mensajes: 21
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Enviar un formulario segun datos completados

Ya pude solucionaro como me aconsejastes, coloque todo el código HTML dentro del $contenido, lo fui separando por partes hasta llegar a las variables donde coloque un if
Código PHP:
if (!empty($nombre_variable)) {$contenido .= "<li><a class='#'><b>Etiqueta:</b>$nombre_variable</a></li>";} 
Una parte del código como quedo:

Código PHP:
$contenido ="";
$contenido .="<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>";
$contenido .="<html>";
$contenido .="<head>";
$contenido .="<meta name='viewport' content='width=device-width' />";
$contenido .="<meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />";
if (!empty(
$nombre_variable)) {$contenido .= "<li><a class='#'><b>Etiqueta:</b>$nombre_variable</a></li>";} 
Muchas gracias por tu ayuda, gracias a eso pude solucionarlo!

Etiquetas: formulario-php, formulariocontacto, formulariosenphp
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:11.