Hola!

Registrándote como bakuno podrás publicar, compartir y comunicarte en privado con otros bakuos :D

Regístrame ya!

me ayudais a pulir este formulario de contacto en php?

justfond

Becerro
Desde
9 Feb 2012
Mensajes
15
hola,

pues bien, tengo un formulario de contacto en php con la libreria de phpmailer.

el 50% ya lo tengo solucionado, enviar y recibir los mails los recibo y los envia perfectamente.

el problema esta en que al darle a enviar sin ningun dato puesto, envia lo envia en blanco.

y cuando falta un campo, no me dice los errores que deberia escribir. dice: "error inesperado" y arriba sale " mensaje enviado".

Las dos cosas a la vez!!!! esta descordinasimo


function valida_email($email) {
$re= '#^[a-z0-9.!\#$%&\'*+-/=?^_`{|}~]+@([0-9.]+|([^\s]+\.+[a-z]{2,6}))$#si';
return preg_match($re, $email);
}

function validarTelefono($phone)
{
$reg = "#^\(?\d{3}\)?[\s\.-]?\d{3}[\s\.-]?\d{4}$#";
return preg_match($reg, $phone);
}

$submit=$_POST['Submit'];
if($submit == Submit)
{
$status = "OK";
$email=$_POST['email'];
$message=$_POST['message'];
$subject=$_POST['subject'];
$name=$_POST['name'];
$phone=$_POST['phone'];
$title=$_POST['title'];
$otros2=$_POST['otros2'];

$msg="";
$msgerror="";
//error_reporting(E_ERROR | E_PARSE | E_CORE_ERROR);



if ( strlen($name) < 1 )
{
$msgerror .="* Nombre valido.<BR />";
$status= "NOTOK";
}


//if (!stristr($email,"@") OR !stristr($email,"."))
if(!valida_email($email))
{
$msgerror .="* Mail incorrecto.<BR />";
$status= "NOTOK";
}

//if ( strlen($phone) < 9 )
if(validarTelefono($phone))
{
$msgerror .="*Telefono compuesto por 9cifras.<BR />";
$status= "NOTOK";
}


if($title=="Opcion2")
{
$headers4="opcion1@dominio.com";
}else if($title=="Opcion1"){
$headers4="opcion2@dominio.com";
}else if($title=="error"){
$status="NOTOK";
$msgerror .="* Seleccione un titulo.<BR />";
}


if ( strlen($message) < 10 )
{
$msgerror .="* Mensaje minimo 10 caracteres.<BR/>";
$status= "NOTOK";
}


$body1="<html>
<head>
<p><font face=Tahoma, Helvetica, sans-serif size=2 color=#333333>
<strong>Formulari de Contacte Web:</strong></font><br>
<br><hr width=450px align=left><br>
<font face=Tahoma, Helvetica, sans-serif size=2>

<title>Formulario de Contacto Web</title>
</head>
<body>
<strong>Nombre:</strong> $name.<br>
<strong>Tel&eacute;fono:</strong> $phone.<br>
<strong>T&iacute;tulo:</strong> $title: $otros2.<br>
<strong>Email:</strong> $email.<br>
<strong>Mensaje:</strong> $message.</font></p>
</body>
</html> ";

require_once 'phpmailer/class.phpmailer.php';

$mail = new PHPMailer ();
$mail -> SetFrom ("contacto@dominio.com","contacto@dominio.com");
$mail -> AddAddress ("$email","$name");
$mail -> Subject = "$title: $otros2";
$mail -> IsHTML (true);
$mail -> IsSMTP();
$mail -> Host = 'mail.dominio.com';
$mail -> Port = 2626;
$mail -> SMTPDebug = 2;
$mail -> SMTPAuth = true;
$mail -> Username = 'contacto@dominio.com';
$mail -> Password = 'password';
$mail -> MsgHTML(file_get_contents('www.dominio.com/archivos/recibido.html'));
if ($mail -> Send())
{
$msg=" Missatge enviat. Gràcies.";
}else{
$msgerror=" Error inesperado.";
}

$mail = new PHPMailer ();
$mail -> SetFrom ("correo@dominio.com","correo@dominio.com");
$mail -> AddAddress("$headers4");
$mail -> Subject = "$title: $otros2";
$mail -> IsHTML (true); // pones (true) en caso de usar formato HTML
$mail -> IsSMTP();
$mail -> Host = 'mail.dominio.com';
$mail -> Port = 2626;
$mail -> SMTPAuth = true;
$mail -> Username = 'correo@dominio.com';
$mail -> Password = 'password';
$mail -> MsgHTML($body1);
$mail -> Send();
}

cualquier dato sera bien recibido!!!

gracias, saludos!
 
yo te recomendaria que valides antes que envies a travez de jvalidate de jquery s facil.
 
Como te comentan @Y3K y @JIRAMY necesitas tener validación, veo que haces cierta "validación" y hasta pones la variable $status como "notok", pero después llegas a
.
.
.
if ($mail -> Send())
{
$msg=" Missatge enviat. Gràcies.";
}else{
$msgerror=" Error inesperado.";
}
.
.
.
pero nunca verificas esa variable, que supongo es la que te indica si se puede o no enviar el correo.

Sugiero, primero q nada para validaciones es mucho mejor el uso de boleanos o algo similar en lugar de cadenas de texto, te sera mas fácil utilizar un 0 para indicar q no hay problemas y un 1 para indicar q alguna validación no es correcta de manera que:

if($status==0)
{
if ($mail -> Send())
{
$msg=" Missatge enviat. Gràcies.";
}else{
$msgerror=" Error inesperado.";
}
}else
{
echo "Existen valores inválidos para el envío del correo";
}

Espero haberte ayudado.

Saludos.
 
ok, lo he editado como me has dicho...

Esta vez no envia por enviar aunque estten todos los campos rellenados, peroo lo que me ocurre es lo siguiente:

Pues cuando estan todos los datos rellenados, le doy a enviar y no hace nada... carga la pagina de nuevo y no envia ni recibe ni da ningun mensaje de recibido....

Algo estoy haciendo mal???

Muchas gracias!
 
Checa tu variable de control $status, lo mas seguro es q en algun momento la estes poniendo en 1 aunque no falte informacion, te sugiero debuguees el codigo poniendo un echo $status; antes del if que valida dicha variable.

echo $status; //Aqui podras ver el valor de $status antes del if y ver si esta teniendo el valor deseado.
if($status==0)
{
if ($mail -> Send())
{
$msg=" Missatge enviat. Gràcies.";
}else{
$msgerror=" Error inesperado.";
}
}else
{
echo "Existen valores inválidos para el envío del correo";
}
 
hola, ya lo hice, puse el echo... pero aun asi no sigue de ahi, vuelve a hacer lo mismo que antes! carga la pagina y no dice nada mas!

lo tengo asi:

require_once 'phpmailer/class.phpmailer.php';

$mail = new PHPMailer ();
$mail -> SetFrom ("contacto@dominio.com","contacto@dominio.com");
$mail -> AddAddress ("$email","$name");
$mail -> Subject = "$title: $otros2";
$mail -> IsHTML (true);
$mail -> IsSMTP();
$mail -> Host = 'mail.dominio.com';
$mail -> Port = 2626;
$mail -> SMTPDebug = 2;
$mail -> SMTPAuth = true;
$mail -> Username = 'contacto@dominio.com';
$mail -> Password = 'password';
$mail -> MsgHTML(file_get_contents('www.dominio.com/archivos/recibido.html'));
if ($mail -> Send())
echo $status;
if ($status == "0"){
if ($mail -> Send())
{
$msg=" Mensaje enviado.";
}else{
$msgerror=" Error inesperado.";
}

$mail = new PHPMailer ();
$mail -> SetFrom ("correo@dominio.com","correo@dominio.com");
$mail -> AddAddress("$headers4");
$mail -> Subject = "$title: $otros2";
$mail -> IsHTML (true); // pones (true) en caso de usar formato HTML
$mail -> IsSMTP();
$mail -> Host = 'mail.dominio.com';
$mail -> Port = 2626;
$mail -> SMTPAuth = true;
$mail -> Username = 'correo@dominio.com';
$mail -> Password = 'password';
$mail -> MsgHTML($body1);
$mail -> Send();
}
}

Muchisimas gracias!
 
yo dejaria el formulario que tienes y buscaria otro mas adaptado para lo que buscas.
 
No necesitas complicarte tanto.

.
.
.
TUS VALIDACIONES

if($status==0)
{
MANDAR EL CORREO
}
else
{

}
.
.
.
Tienes mal el chequeo del status:

if ($mail -> Send()) AQUI ESTAS ENVIANDO UN CORREO ANTES DEL CHEQUEO DE LA VARIABLE
echo $status; ES POSIBLE QUE NO VEAS ESTE echo POR QUE EL CORREO EN EL IF NO ESTA SALIENDO, ES DECIR ES UN FALSE
if ($status == "0") AQUI ESTAS CHECANDO LA VARIABLE EN 0, LO MAS PROBABLE ES QUE NO VENGA EN 0 POR ENDE NO ENTRARA Y NO ESCRIBIRA NADA
{
if ($mail -> Send())
{
$msg=" Mensaje enviado.";
}
else
{
$msgerror=" Error inesperado.";
}
$mail = new PHPMailer ();
$mail -> SetFrom ("correo@dominio.com","correo@dominio.com");
$mail -> AddAddress("$headers4");
$mail -> Subject = "$title: $otros2";
$mail -> IsHTML (true); // pones (true) en caso de usar formato HTML
$mail -> IsSMTP();
$mail -> Host = 'mail.dominio.com';
$mail -> Port = 2626;
$mail -> SMTPAuth = true;
$mail -> Username = 'correo@dominio.com';
$mail -> Password = 'password';
$mail -> MsgHTML($body1);
$mail -> Send();
}

Intenta poner el if del status antes de cualquier envio de mail. y checa lo que te comento arriba.

Saludos.
 
Volver
Arriba