2013-07-24 92 views
0

我正在编写动态联系表单。代码如下所示:
的jQuery:使用jQuery和PHP检查验证码

$.ajax({ 
    type: "POST", 
    url: "sendmail.php", 
    data: {email: email, message: message, captcha: captcha} 
}) 
.done(function(result) { 
    alert(result); 
}) 

PHP:

<?php 
    session_start(); 
    $email = $_POST['email']; 
    $message = $_POST['message']; 
    $captcha = $_POST['captcha']; 

    if(isset($_POST["captcha"])&&$_POST["captcha"]!=""&&strtoupper($_SESSION["captcha_code"])==strtoupper($_POST["captcha"])) 
    { 
     @mail('[email protected]', 'Subject', $message, 'From:' . email); 
     echo "Message successfully sent."; 
    } 
    else 
    { 
     // change opacity of #error div 
    } 
?> 

的问题是,如果错了图形验证码已被输入如何改变隐藏DIV的透明度? 在这种情况下,我需要插入这个代码insid PHP脚本或其他地方:

$('#error').css({opacity:'1'}); 

请记住,我不能回声注入代码,因为我用从PHP脚本回来的信息警报。

回答

0

一般我用一个div像这样:

<div id="error" style="display: none;">ERROR PUT HERE</div> 

而且与jQuery你可以打电话......

$('#error').show(); 

以使其可见!

编辑:我明白你在做什么。我会建议你使用JSON作为你的数据类型。

请尝试以下

PHP

<?php 
session_start(); 
$email = $_POST['email']; 
$message = $_POST['message']; 
$captcha = $_POST['captcha']; 

if(isset($_POST["captcha"])&&$_POST["captcha"]!=""&&strtoupper($_SESSION["captcha_code"])==strtoupper($_POST["captcha"])) 
{ 
    @mail('[email protected]', 'Subject', $message, 'From:' . email); 
    echo json_encode(array('success' => true, 'message' => "Message successfully Sent")); 
} 
else 
{ 
    echo json_encode(array('success' => false, 'message' => "(PUT YOUR MESSAGE HERE!)")); 
} 
?> 

jQuery的

$.ajax({ 
    type: "POST", 
    url: "sendmail.php", 
    dataType: "json" 
    data: {email: email, message: message, captcha: captcha} 
}) 
.done(function(result) { 
    if(result.success) { 
     alert(result.message); 
    } else { 
     $("#error").text(result.message); 
     $('#error').css({opacity:'1'}); 
    } 
}) 
+0

我知道如何使它可见,但我想知道如何在没有回声的PHP脚本中使用它。 – pavlucco

+0

现在,这是我需要的。 – pavlucco

+0

您错过了在jQuery脚本中解析JSON,但是没问题。 – pavlucco

0

成功的部分添加到您的jQuery:

success: function(data) { 
    if(data == 'error'){ 
     $('#error').css({opacity:'1'}); 
    } 
} 

而在你的PHP:

if(isset($_POST["captcha"])&&$_POST["captcha"]!=""&&strtoupper($_SESSION["captcha_code"])==strtoupper($_POST["captcha"])) 
{ 
    @mail('[email protected]', 'Subject', $message, 'From:' . email); 
    echo "Message successfully sent."; 
} 
else 
{ 
    echo "error"; 
} 
+0

有趣的概念,它的作品。 – pavlucco

+0

当然。没问题,但看看柯克巴克斯的答案上面。这可能是解决这个问题的更好方法。 – Maximus2012

0

建议:使用Ajax .fail()

$.ajax({ 
     type: "POST", 
     url: "sendmail.php", 
     data: {email: email, message: message, captcha: captcha} 
    }) 
    .done(function(result) { alert(result); }) 
    .fail(function() { alert("error");}); 
0

有几种方法可以做到这一点设置错误。一种方法是从PHP与可根据负载来执行JavaScript代码的回应:

<?php 
    session_start(); 
    $email = $_POST['email']; 
    $message = $_POST['message']; 
    $captcha = $_POST['captcha']; 

    if(isset($_POST["captcha"])&&$_POST["captcha"]!=""&&strtoupper($_SESSION["captcha_code"])==strtoupper($_POST["captcha"])) 
    { 
     @mail('[email protected]', 'Subject', $message, 'From:' . email); 
     echo "Message successfully sent."; 
    } 
    else 
    { 
     // change opacity of #error div 
     echo "<script type='text/javascript'>"; 
     echo " $('#error').css({opacity:'1'});"; 
     echo "</script>"; 
    } 
?> 

在这种情况下,你的反应是要执行一些JavaScript代码,当你打算更改错误div的不透明度。但是,如果您提醒ajax的结果,它将在警报消息中输入整个javascript代码。

另一种方式是实际返回其他错误代码不是200(成功),并检查该特定情况下:

<?php 
    session_start(); 
    $email = $_POST['email']; 
    $message = $_POST['message']; 
    $captcha = $_POST['captcha']; 

    if(isset($_POST["captcha"])&&$_POST["captcha"]!=""&&strtoupper($_SESSION["captcha_code"])==strtoupper($_POST["captcha"])) 
    { 
     @mail('[email protected]', 'Subject', $message, 'From:' . email); 
     echo "Message successfully sent."; 
    } 
    else 
    { 
     // change opacity of #error div 
     header('HTTP/1.1 500 Captcha not entered correctly'); 
     exit(); 
    } 
?> 

,当你检索AJAX错误响应,检查错误代码相匹配的抛出一个(在这种情况下为500),然后在那里设置不透明度。