我一直试图用PHP设置一个简单的联系表单,但它不起作用,我使用了本教程,第一次尝试时它起了作用,但当我尝试自定义它并添加一些字段时,它失败了。当我发送数据时,我认为这介于Ajax和PHP之间,但我真的不知道。
这是我正在使用的代码:
HTML
<form id="formulariocontacto">
<fieldset>
<input type="text" id="name" name="name" class="input-block-level" placeholder="Name">
<input type="text" id="telefono" name="telefono" class="input-block-level" placeholder="Phone">
<input type="text" id="email" name="email" class="input-block-level" placeholder="Email">
<input type="text" id="direccion" name="direccion" class="input-block-level" placeholder="Adress">
<textarea rows="14" id="comentario" name="comentario" class="input-block-level" placeholder="Comments"></textarea>
<button type="submit" class="botonform" class="btn btn-warning pull-right">SEND</button>
</fieldset>
</form>
jQuery
$("#formulariocontacto").submit(function(e){
e.preventDefault();
var nombre = $("#name").val();
var telefono = $("#telefono").val();
var email = $("#email").val();
var direccion = $("#direccion").val();
var comentario = $("#comentario").val();
var dataString = 'nombre=' + nombre + '&email=' + email + '&comentario=' + comentario + '&telefono' + telefono + '&direccion' + direccion;
function isValidEmail(emailAddress) {
var pattern = new RegExp(/^((([a-z]|'d|[!#'$%&''*'+'-'/='?'^_`{'|}~]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])+('.([a-z]|'d|[!#'$%&''*'+'-'/='?'^_`{'|}~]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])+)*)|(('x22)(((('x20|'x09)*('x0d'x0a))?('x20|'x09)+)?((['x01-'x08'x0b'x0c'x0e-'x1f'x7f]|'x21|['x23-'x5b]|['x5d-'x7e]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])|(''(['x01-'x09'x0b'x0c'x0d-'x7f]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF]))))*((('x20|'x09)*('x0d'x0a))?('x20|'x09)+)?('x22)))@((([a-z]|'d|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])|(([a-z]|'d|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])([a-z]|'d|-|'.|_|~|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])*([a-z]|'d|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])))'.)+(([a-z]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])|(([a-z]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])([a-z]|'d|-|'.|_|~|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])*([a-z]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])))'.?$/i);
return pattern.test(emailAddress);
};
if (isValidEmail(email) && (comentario.length > 100) && (nombre.length > 1)){
$.ajax({
type: "POST",
url: "procesar.php",
data: dataString,
success: function(){
$('.exito').fadeIn(1000);
}
});
} else{
$('.error').fadeIn(1000);
}
return false;
});
PHP
<?php
// Email Submit
// Note: filter_var() requires PHP >= 5.2.0
if ( isset($_POST['email']) && isset($_POST['nombre']) && isset($_POST['comentario']) ) {
$name_field=$_POST['nombre'];
$email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
$telefono_field=$_POST['telefono'];
$direccion_field=$_POST['direccion'];
$mensaje_field=$_POST['comentario'];
$subject=.$_POST['nombre']" Vía mysite.com";
$mensaje="Nombre: $name_field'n Email: $email_field'n Teléfono: $telefono_field'n Dirección: $direccion_field'n Mensaje:'n $mensaje_field";
// detect & prevent header injections
$test = "/(content-type|bcc:|cc:|to:)/i";
foreach ( $_POST as $key => $val ) {
if ( preg_match( $test, $val ) ) {
exit;
}
}
//send email
mail( "mymail@mysite.com", $subject, $mensaje, "From: " . $email );
}
?>
我试图通过添加一些额外的字段来制作一个更完整的消息,你可以在PHP 中看到var"$mensaje"
在不知道您收到了什么错误或什么不起作用的情况下,我只能假设您没有收到所有提交的数据?
如果是这样,那是因为您没有在dataString中传递它。
var nombre = $("#name").val();
var telefono = $("#telefono").val();
var email = $("#email").val();
var direccion = $("#direccion").val();
var comentario = $("#comentario").val();
var dataString = 'nombre=' + nombre + '&email=' + email + '&comentario=' + comentario + '&telefono=' + telefono + '&direccion=' + direccion;
清除电子邮件输入:
$email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
那么你的邮件功能可以是:
mail("mymail@mail.com",$subject,$mensaje,"From:" . $email);
更新
您的ajax调用应该是:
if (isValidEmail(email) && (comentario.length > 100) && (nombre.length > 1)){
e.preventDefault();
$.ajax({
type: "POST",
url: "procesar.php",
data: dataString,
success: function(){
$('.exito').fadeIn(1000);
},
error: function(){
$('.error').fadeIn(1000);
}
});
}
更新2
$subject=.$_POST['nombre']" Vía mysite.com";
应该是
$subject=$_POST['nombre']." Vía mysite.com";
这就是产生500内部服务器错误的原因
您忘记了相等。
更改此
var dataString = 'nombre=' + nombre + '&email=' + email + '&comentario=' + comentario + '&telefono' + telefono + '&direccion' + direccion;
TO
var dataString = 'nombre=' + nombre + '&email=' + email + '&comentario=' + comentario + '&telefono=' + telefono + '&direccion=' + direccion;