Foros del Web » Programando para Internet » PHP »

Formulario de contacto con validación

Estas en el tema de Formulario de contacto con validación en el foro de PHP en Foros del Web. Hola, tengo un pequeño problema y seguro que es una tontería, tengo un formulario de contacto con validación que funciona perfectamente, pero cuando le añado ...
  #1 (permalink)  
Antiguo 04/09/2013, 17:12
 
Fecha de Ingreso: septiembre-2013
Mensajes: 3
Antigüedad: 10 años, 7 meses
Puntos: 0
Formulario de contacto con validación

Hola, tengo un pequeño problema y seguro que es una tontería, tengo un formulario de contacto con validación que funciona perfectamente, pero cuando le añado el Checkbox tipico de la politica de privacidad.......no me lo valida, no funciona correctamente, ¿me echais una mano?


GRACIAS.

Codigo:
Cita:
<?php
if(isset($_POST['boton'])){

if($_POST['nombre'] == ''){
$errors[1] = '<span class="error">Ingrese su nombre</span>';
}else if($_POST['email'] == '' or !preg_match("/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/",$_POST['email'])){
$errors[2] = '<span class="error">Ingrese un email correcto</span>';
}else if($_POST['asunto'] == ''){
$errors[3] = '<span class="error">Ingrese un asunto</span>';
}else if($_POST['mensaje'] == ''){
$errors[4] = '<span class="error">Ingrese un mensaje</span>';
}else if($_POST['check'] == '0'){
$errors[5] = '<span class="error">Acepte la nota legal y politica de privacidad por favor</span>';
}else{
$dest = "[email protected]"; //Email de destino
$nombre = $_POST['nombre'];
$email = $_POST['email'];
$asunto = $_POST['asunto']; //Asunto
$cuerpo = $_POST['mensaje']; //Cuerpo del mensaje
$check = $_POST['check'];//chequeamos si acepta o no la politica de privacidad y la nota legal
//Cabeceras del correo
$headers = "From: $nombre <$email>\r\n"; //Quien envia?
$headers .= "X-Mailer: PHP5\n";
$headers .= 'MIME-Version: 1.0' . "\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; //

if(mail($dest,$asunto,$cuerpo,$headers)){
$result = '<div class="result_ok">Email enviado correctamente </div>';
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_POST['nombre'] = '';
$_POST['email'] = '';
$_POST['asunto'] = '';
$_POST['mensaje'] = '';
$_POST['check'] = '0';
}else{
$result = '<div class="result_fail">Hubo un error al enviar el mensaje </div>';
}
}
}
?>
<html>
<head>
<title>Contacto</title>
<link rel='stylesheet' href='estilos.css'>
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js'></script>
<script src='funciones.js'></script>

</head>
<body>
<form class='contacto' method='POST' action=''>
<div><label>Tu Nombre:</label><input type='text' class='nombre' name='nombre' value='<?php echo $_POST['nombre']; ?>'><?php echo $errors[1] ?></div>
<div><label>Tu Email:</label><input type='text' class='email' name='email' value='<?php echo $_POST['email']; ?>'><?php echo $errors[2] ?></div>
<div><label>Asunto:</label><input type='text' class='asunto' name='asunto' value='<?php echo $_POST['asunto']; ?>'><?php echo $errors[3] ?></div>
<div><label>Mensaje:</label><textarea rows='6' class='mensaje' name='mensaje'><?php echo $_POST['mensaje']; ?></textarea><?php echo $errors[4] ?></div>
<div><label>He leido y acepto la <a href="#poner_enlace" target="_blank">nota legal</a> y <a href="#poner_enlace" target="_blank">politica de privacidad</a></label><input type="checkbox" class='check' name='check' value='<?php echo $_POST['check']; ?>'><?php echo $errors[5] ?></div>
<div><input type='submit' value='Envia Mensaje' class='boton' name='boton'></div>
<?php echo $result; ?>
</form>
</body>
</html>
  #2 (permalink)  
Antiguo 04/09/2013, 19:32
 
Fecha de Ingreso: julio-2013
Mensajes: 158
Antigüedad: 10 años, 9 meses
Puntos: 6
Respuesta: Formulario de contacto con validación

te comento if($_POST['check'] == '0') cuando se envia el formulario y el checkbox no se marco enviara la variable vacia, no con valor 0 por lo tanto lo correcto seria: if($_POST['check'] == '').
Ademas otra cosa esto no es muy seguro if($_POST['nombre'] == '0') si un usuario pone en un input un espacio pasara la validacion algo mas seguro seria asi if(trim($_POST['nombre']) == '') trim eliminara espacios o saltos de linea al principio y final de una cadena de texto.
  #3 (permalink)  
Antiguo 05/09/2013, 08:54
 
Fecha de Ingreso: septiembre-2013
Mensajes: 3
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Formulario de contacto con validación

Muchisimas gracias cesa_r, no había caido en eso, que lo enviaba vacío. Ya está corregido y funciona perfectamente
  #4 (permalink)  
Antiguo 06/09/2013, 14:00
 
Fecha de Ingreso: septiembre-2013
Mensajes: 3
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Formulario de contacto con validación

Hola de nuevo, pongo otra vez el código un poco modificado en cuanto al formateo del mail, el que envía el CLiente y recibimos nosotros, sale sin formatear y el de autorespuesta que se le envia al usuario de lo típico...... hemos recibido su email......sale bien formateado, que puede ser? le he dado mil vueltas no se como ponerlo bien formateado. En cuanto al formateado me refiero simplemente que salte de línea cada campo y ya está no pido más.

Cita:
<?php
if(isset($_POST['boton'])){
//con el trim borro todos los espacios por si el CLiente mete un espacio para validar
if(trim($_POST['nombre'] == '')){
$errors[1] = '<span class="error">Ingrese su nombre</span>';
}else if(trim($_POST['apellidos'] == '')){
$errors[2] = '<span class="error">Ingrese sus apellidos</span>';
}else if($_POST['email'] == '' or !preg_match("/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/",$_POST['email'])){
$errors[3] = '<span class="error">Ingrese un email correcto</span>';
}else if(trim($_POST['telefono'] == '')){
$errors[4] = '<span class="error">Ingrese un telefono</span>';
}else if(trim($_POST['mensaje'] == '')){
$errors[5] = '<span class="error">Ingrese un mensaje</span>';
}else if($_POST['check'] == ''){
$errors[6] = '<span class="error">Acepte la nota legal y politica de privacidad por favor</span>';
}else{
$dest = "[email protected]"; //esto hay que cambiarlo por el Email de destino
$nombre = $_POST['nombre'];
$apellidos = $_POST['apellidos'];
$email = $_POST['email'];
$telefono = $_POST['telefono'];
//Cuerpo del mensaje
$cuerpo = "Formulario enviado\r\n\n\n";
$cuerpo .= "Nombre: " . $_POST["nombre"];
$cuerpo .= "\r\n\nApellidos: " . $_POST["apellidos"];
$cuerpo .= "\r\n\nEmail: " . $_POST["email"];
$cuerpo .= "\r\n\nTelefono: " . $_POST["telefono"];
$cuerpo .= "\r\n\nMensaje: \r\n";
$cuerpo .= $_POST["mensaje"];
$asunto= "\r\n\n\n\nFormulario recibido"; //Poner el asunto que quieras

$check = $_POST['check'];//chequeamos si acepta o no la politica de privacidad y la nota legal
//Cabeceras del correo
$headers = "From: $nombre <$email>\r\n"; //Quien envia?
$headers .= "X-Mailer: PHP5\n";
$headers .= 'MIME-Version: 1.0' . "\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; //

if(mail($dest,$asunto,$cuerpo,$headers)){
$respuesta ="Recibimos su formulario de contacto correctamente. Tendrá noticias nuestras.\r\n\n\nGracias" ;
mail($email,"Formulario recibido",$respuesta);
$result = '<div class="result_ok">Email enviado correctamente </div>';
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_POST['nombre'] = '';
$_POST['apellidos'] = '';
$_POST['email'] = '';
$_POST['telefono'] = '';
$_POST['mensaje'] = '';
$_POST['check'] = '';
}else{
$result = '<div class="result_fail">Hubo un error al enviar el mensaje </div>';
}
}
}
?>
<html>
<head>
<title>Contacto</title>
<link rel='stylesheet' href='estilos.css'>
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js'></script>
<script src='funciones.js'></script>

</head>
<body>
<form class='contacto' method='POST' action=''>
<div><label>Tu Nombre:</label><input type='text' class='nombre' name='nombre' value='<?php echo $_POST['nombre']; ?>'><?php echo $errors[1] ?></div>
<div><label>Tus Apellidos:</label><input type='text' class='apellidos' name='apellidos' value='<?php echo $_POST['apellidos']; ?>'><?php echo $errors[2] ?></div>
<div><label>Tu Email:</label><input type='text' class='email' name='email' value='<?php echo $_POST['email']; ?>'><?php echo $errors[3] ?></div>
<div><label>Tu Tel&eacute;fono:</label><input type="text" size="9" maxlength="9" class='telefono' name='telefono' value='<?php echo $_POST['telefono']; ?>'><?php echo $errors[4] ?></div>
<div><label>Mensaje:</label><textarea rows='6' class='mensaje' name='mensaje'><?php echo $_POST['mensaje']; ?></textarea><?php echo $errors[5] ?></div>
<div><label>He leido y acepto la <a href="#poner_enlace" target="_blank">nota legal</a> y <a href="#poner_enlace" target="_blank">politica de privacidad</a></label><input type="checkbox" class='check' name='check' value='1'><?php echo $errors[6] ?></div>
<div><input type='submit' value='Envia Mensaje' class='boton' name='boton'></div>
<?php echo $result; ?>
</form>
</body>
</html>

Ya me direis.


Gracias.
  #5 (permalink)  
Antiguo 10/09/2013, 13:19
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Formulario de contacto con validación

Tambien puedes añadir la opcion de required, obligas al usuario a aceptar si o si la politica de privacidad , no en el 100%100 de los casos ya que se puede alterar , por eso despues debes de validarlo tal y como lo hiciste.

Código HTML:
Ver original
  1. <input type="checkbox" class='check' name='check' value='1'  cheked required>

saludos

Última edición por webankenovi; 10/09/2013 a las 13:26
  #6 (permalink)  
Antiguo 10/09/2013, 16:25
 
Fecha de Ingreso: julio-2013
Mensajes: 158
Antigüedad: 10 años, 9 meses
Puntos: 6
Respuesta: Formulario de contacto con validación

Estas mal trim no aplica asi: if(trim($_POST['nombre'] == '')) la forma correcta seria: if(trim($_POST['nombre']) == '')
  #7 (permalink)  
Antiguo 10/09/2013, 16:34
 
Fecha de Ingreso: julio-2013
Mensajes: 158
Antigüedad: 10 años, 9 meses
Puntos: 6
Respuesta: Formulario de contacto con validación

Otra cosa para validar que acepto los terminos y condiciones seria un poco mas seguro asi
if(trim($_POST['check']) != '1') //Si es distinto a 1 ya que el checkbox le detiste un value de 1 {
//marca error
}

Saludos.

Etiquetas: contacto, formulario, html
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 21:54.