2013-07-24 2 views
0

Я кодирую динамическую форму контакта. Код выглядеть следующим образом:
JQuery:Проверка captcha с помощью 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(); 

Чтобы сделать его видимым!

EDIT: Я понимаю, что вы делаете. Я бы рекомендовал использовать 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

Вам не удалось разобрать JSON в сценарии jQuery, но нормально. – 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

Предложение: установка ошибка с АЯКС .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 с яваскрипта кода, который может быть выполнен при нагрузке:

<?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(); 
    } 
?> 

и при извлечении АЯКСА ошибочного ответа, проверьте, если код ошибки совпадает с вы бросаете (в этом случае 500), а затем устанавливаете непрозрачность.

Смежные вопросы