Foros del Web » Programando para Internet » PHP »

Adaptar formulario web con checkbox aceptacion de privacidad

Estas en el tema de Adaptar formulario web con checkbox aceptacion de privacidad en el foro de PHP en Foros del Web. Hola a todos, con la entrada de la nueva normativa GDPR estoy buscando la manera de adaptar nuestro formulario web con un checkbox donde se ...
  #1 (permalink)  
Antiguo 27/05/2018, 00:25
Avatar de manticore2  
Fecha de Ingreso: junio-2012
Mensajes: 8
Antigüedad: 6 años
Puntos: 0
Pregunta Adaptar formulario web con checkbox aceptacion de privacidad

Hola a todos, con la entrada de la nueva normativa GDPR estoy buscando la manera de adaptar nuestro formulario web con un checkbox donde se acepten la condiciones de uso y privacidad antes de enviar el correo.

Este es mi codigo actual:

Código HTML:
<form id="contact">
        	<br style="clear:both">
    				<div class="form-group">
						<input type="text" class="form-control" id="name" name="name" placeholder="Nombre *"/>
                    <div class="help-block with-errors"></div>
					</div>
					<div class="form-group">
						<input type="email" class="form-control" id="email" name="email" placeholder="Email *"/>
                    <div class="help-block with-errors"></div>
					</div>
					<div class="form-group">
						<input type="text" class="form-control" id="phone" name="phone" placeholder="Teléfono *"/>
                    <div class="help-block with-errors"></div>
					</div>
					<div class="form-group">
						<input type="text" class="form-control" id="asunto" name="subject" placeholder="Asunto"/>
					</div>
                    <div class="form-group">
                    	<textarea class="form-control" type="textarea" id="message"  name="message" placeholder="Mensaje" rows="7"></textarea>            
                    </div>
                    <div class="form-group">
                    	<div id="msg"></div>
                    </div>
                    <div class="pull-left">* Estos campos son obligatorios.</div>
        				<button id="submit-btn" class="btn btn-primary pull-right">Enviar Formulario</button>
        	</form> 
Código:
/* global $ */
    $(document).ready(function(){
      $('#submit-btn').click(function(event){
        event.preventDefault();
         $.ajax({
            dataType: 'JSON',
            url: 'sendmail.php',
            type: 'POST',
            data: $('#contact').serialize(),
            beforeSend: function(xhr){
              $('#submit-btn').html('ENVIANDO...');
            },
            success: function(response){
              if(response){
                console.log(response);
                if(response['signal'] == 'ok'){
                 $('#msg').html('<div class="alert alert-success">'+ response['msg']  +'</div>');
                  $('input, textarea').val(function() {
                     return this.defaultValue;
                  });
                }
                else{
                  $('#msg').html('<div class="alert alert-danger">'+ response['msg'] +'</div>');
                }
              }
            },
            error: function(){
              $('#msg').html('<div class="alert alert-danger">Ha ocurrido un error. Inténtelo más tarde.</div>');
            },
            complete: function(){
              $('#submit-btn').html('Enviar Formulario');
            }
          });
      });
    });// JavaScript Document
Código PHP:

<?php 
    
require('phpmailer/PHPMailerAutoload.php');
    
$name trim($_POST['name']);
    
$email trim($_POST['email']);
    
$phone trim($_POST['phone']);
    
$subject trim($_POST['subject']);
    
$message trim($_POST['message']);
    if(
$name != null && $email != null && $phone != null && $message != null){
        if(!
filter_var($emailFILTER_VALIDATE_EMAIL)) 
        {
            
$signal 'bad';
            
$msg 'Error. E-mail inválido, por favor compruébelo.';
        }
        else{
            
$mail = new PHPMailer;
            
            
$mail->CharSet 'UTF-8';
                        
            
$mail->From $email;
            
$mail->FromName $name;
            
            
$mail->addAddress('[email protected]');     // Add a recipient
            
$mail->addReplyTo($email$name);
  
            
$mail->isHTML(true);                                  // Set email format to HTML
            
            
$mail->Subject 'Solicitud de información - Nautica Marbella (ES)';
            
$mail->Body    'Nombre: '.$name.' <br />Teléfono: '.$phone.' <br />Asunto: '.$subject.' <br /><br />Mensaje: '.$message;
            
            if(!
$mail->send()) {
                echo 
'Error. El mensaje no pudo ser enviado.';
                echo 
'Mailer Error: ' $mail->ErrorInfo;
            } else {
                
$signal 'ok';
                
$msg '¡Mensaje enviado! Pronto nos pondremos en contacto con usted.';
            }
        }
    }
    else{
        
$signal 'bad';
        
$msg 'Error. Por favor rellene todos los campos.';
    }
    
$data = array(
        
'signal' => $signal,
        
'msg' => $msg
    
);
    echo 
json_encode($data);
?>
Mi idea es poner donde dice *Estos campos son obligatorios el checkbox con un "He leído y acepto la política de privacidad."

Decir que este codigo lo encontre en Internet y lo hice funcionar con dificultad, mi conocimiento en la materia es bastante limitado :) pero funcionamente perfectamente.

¿Alguien sería tan amable de indicarme que codigo introducir para hacer una comprobacion antes de enviar el correo de que la casilla esté marcada? Podria ser por ejemplo despues del if donde comprueba el email.

Gracias!

Última edición por manticore2; 27/05/2018 a las 00:37 Razón: error en PHP
  #2 (permalink)  
Antiguo 27/05/2018, 11:48
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.021
Antigüedad: 10 años, 3 meses
Puntos: 976
Respuesta: Adaptar formulario web con checkbox aceptacion de privacidad

en tu formulario no veo el checkbox para términos y condiciones, pero es bastante sencillo

en el formulario agrega
Código HTML:
Ver original
  1. <input type="checkbox" name="terms" required />
Con eso ya harás que el formulario no se envié si no se aceptan los términos y condiciones activando el checkbox, el label puedes poner el que quieres igual que cualquier otro input

Del lado del servidor basta con un if antes de tu código que procesa el formulario
Código PHP:
Ver original
  1. <?php
  2. if(!isset($_POST['terms'])){
  3. return false; // return false para detener la ejecución del resto de instrucciones, puedes igual hacer una redireccion o envió de errores en caso de ajax.
  4. }
__________________
Toda ayuda se proporciona exclusivamente en el foro, no skype, no mensajes privados u otro medio....
  #3 (permalink)  
Antiguo 28/05/2018, 00:54
Avatar de manticore2  
Fecha de Ingreso: junio-2012
Mensajes: 8
Antigüedad: 6 años
Puntos: 0
De acuerdo Respuesta: Adaptar formulario web con checkbox aceptacion de privacidad

Cita:
Iniciado por ArturoGallegos Ver Mensaje
en tu formulario no veo el checkbox para términos y condiciones, pero es bastante sencillo

en el formulario agrega
Código HTML:
Ver original
  1. <input type="checkbox" name="terms" required />
Con eso ya harás que el formulario no se envié si no se aceptan los términos y condiciones activando el checkbox, el label puedes poner el que quieres igual que cualquier otro input

Del lado del servidor basta con un if antes de tu código que procesa el formulario
Código PHP:
Ver original
  1. <?php
  2. if(!isset($_POST['terms'])){
  3. return false; // return false para detener la ejecución del resto de instrucciones, puedes igual hacer una redireccion o envió de errores en caso de ajax.
  4. }
Hola, gracias por responder :)

Lo he solucionado de la siguiente manera, a ver si ves algo que se pueda mejorar:

Código HTML:
<div class="form-group pull-left"><input type="checkbox" id="terms" name="terms"/> He leído y acepto las condiciones de privacidad.</div>
<button id="submit-btn" class="btn btn-primary pull-right">Enviar Formulario</button> 
Código PHP:
<?php 
    
require('phpmailer/PHPMailerAutoload.php');
    
$name trim($_POST['name']);
    
$email trim($_POST['email']);
    
$phone trim($_POST['phone']);
    
$subject trim($_POST['subject']);
    
$message trim($_POST['message']);
    if(!isset(
$_POST['terms'])){
            
$signal 'bad';
            
$msg 'Acepte nuestra política de privacidad.';
    }
    else if(
$name != null && $email != null && $phone != null && $message != null){
        if(!
filter_var($emailFILTER_VALIDATE_EMAIL)) 
        {
            
$signal 'bad';
            
$msg 'Error. E-mail inválido, por favor compruébelo.';
        }
        else{

....
Lo cierto es que funciona tal como está, pero no sé si hay algo raro que debiera cambiar.

NOTA: Sí que he visto algo que igual no tiene importancia, pero si marcas el checkbox y refrescas la pantalla por ejemplo con F5 se queda marcada por defecto, ¿hay algún modo de refrescar el valor de la casilla marcada aunque refresques pantalla? al igual que el resto de campos se vacian quiero decir.

Saludos!

EDITO: También he solucionado lo del checkbox, si añades un atributo en la pestaña del input autocomplete="off" al refrescar no se queda marcada por defecto.

Última edición por manticore2; 28/05/2018 a las 01:35 Razón: solucion



La zona horaria es GMT -6. Ahora son las 01:56.