【问题标题】:Checking captcha with jQuery and PHP使用 jQuery 和 PHP 检查验证码
【发布时间】:2013-07-25 06:10:41
【问题描述】:

我正在编写动态联系表单。代码如下所示:
jQuery:

$.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('mymail@gmail.com', 'Subject', $message, 'From:' . email);
        echo "Message successfully sent.";
    }
    else
    {
        // change opacity of #error div
    }
?>

问题是如果输入了错误的验证码,如何改变隐藏div的不透明度? 在这种情况下,我需要将此代码插入 PHP 脚本或其他地方:

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

请记住,我不能使用 echo 注入代码,因为我使用 alert 来获取从 PHP 脚本返回的信息。

【问题讨论】:

    标签: php jquery email captcha


    【解决方案1】:

    我通常使用这样的 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('mymail@gmail.com', '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'}); 
        }
    })
    

    【讨论】:

    • 我知道如何让它可见,但我想知道如何在 PHP 脚本中使用它而不需要回显。
    • 现在正是我所需要的。
    • 你错过了在 jQuery 脚本中解析 JSON,但是没关系。
    • 我很确定 $.ajaxdataType: "json" 会将 json 转换为 javascript 对象本身。
    【解决方案2】:

    在你的 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('mymail@gmail.com', 'Subject', $message, 'From:' . email);
        echo "Message successfully sent.";
    }
    else
    {
        echo "error";
    }
    

    【讨论】:

    • 当然。没问题,但看看上面柯克巴克斯的回答。这可能是处理这个问题的更好方法。
    【解决方案3】:

    建议:使用 ajax .fail() 设置错误

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

    【讨论】:

      【解决方案4】:

      有几种方法可以做到这一点。一种方法是使用可以在加载时执行的 javascript 代码从 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('mymail@gmail.com', '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>";
          }
      ?>
      

      在这种情况下,您的响应是当您打算更改错误 div 的不透明度时要执行的一些 javascript 代码。但是,如果您警告 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('mymail@gmail.com', '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),然后在此处设置不透明度。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多