2013-05-01 2 views
0

Итак, я уже давно работаю над этим кодом. Я начал с предустановленного кода из SecurImages и настраивал его, чтобы попытаться проверить captcha и отправить форму. Улов, наша форма передается стороннему сайту, который его создал, и передает данные в свою собственную базу данных, и у меня нет доступа к их коду. Они используют несколько скрытых полей для получения информации, например, они ссылаются на свой общий веб-сайт, а затем проверяют, что страница была отправлена ​​через форму, а затем проверьте детали представления, чтобы определить, какая форма и где отправить информацию. Моя проблема в том, что я могу либо получить капчу, чтобы подтвердить и не отправить форму, либо я могу отправить форму и не проверить подлинность. Кажется, я не могу обойти оба. В настоящий момент я могу правильно проверить капчу, но форма не отправляется правильно.На той же странице Captcha validation using AJAX

 function processForm() 
    { 
     new Ajax.Request('<?php echo $_SERVER['PHP_SELF'] ?>', { 
      method: 'post', 
      parameters: $('zoho1').serialize(), 
      onSuccess: function(transport) { 
       try { 
        var r = transport.responseText.evalJSON(); 


        if (r.error == 0) { 
        alert ("You are the man!"); 


        } else { 
         alert("There was an error with your submission.\n\n" + r.message); 


        } 
       } catch(ex) { 
        alert("There was an error parsing the json"); 


       } 
      }, 
      onFailure: function(err) { 
       alert("Ajax request failed"); 
      } 
     }); 
     return false; 
    } 

Когда пользователь нажимает кнопку отправки, он запускает этот запрос AJAX.

function process_si_zoho1() 
{ 
if ($_SERVER['REQUEST_METHOD'] == 'POST' && @$_POST['do'] == 'contact') { 
    // if the form has been submitted 

    foreach($_POST as $key => $value) { 
     if (!is_array($key)) { 
      // sanitize the input data 
      if ($key != 'LEADCF3') $value = strip_tags($value); 
      $_POST[$key] = htmlspecialchars(stripslashes(trim($value))); 
     } 
    } 
    /* 
    $name = @$_POST['First Name'] . @$_POST['Last Name']; // name from the form 
    $email = @$_POST['Email']; // email from the form 
    $mainphone  = @$_POST['Phone'];  // url from the form 
    $mobile = @$_POST['Mobile']; // the message from the form 
    $state = @$_POST['State']; // the state from the form 
    $type = @$_POST['LEADCF4']; // Type of student from form 
    $enrollment = @$_POST['LEADCF2']; //Expected enrollment 
    $time = @$_POST['LEADCF5']; //Intended enrollment status 
    $degree = @$_POST['LEADCF6']; //Intended degree 
    $message = @$_POST['LEADCF3']; //How did you hear about TTU? 
    $comments = @$_POST['Description']; //Comments*/ 
    $captcha = $_POST['captcha_code']; // the user's entry for the captcha code 
    //$name = substr($name, 0, 64); // limit name to 64 characters 

    $errors = array(); // initialize empty error array 

    if (isset($GLOBALS['DEBUG_MODE']) && $GLOBALS['DEBUG_MODE'] == false) { 
     // only check for errors if the form is not in debug mode 




     if (strlen($email) == 0) { 
      // no email address given 
      $errors['email_error'] = 'Email address is required'; 
     } else if (!preg_match('/^(?:[\w\d]+\.?)[email protected](?:(?:[\w\d]\-?)+\.)+\w{2,4}$/i', $email)) { 
      // invalid email format 
      $errors['email_error'] = 'Email address entered is invalid'; 
     } 

     if (strlen($message) < 10) { 
      // message length too short 
      $errors['message_error'] = 'Please enter a message'; 
     } 
    } 

    // Only try to validate the captcha if the form has no errors 
    // This is especially important for ajax calls 
    if (sizeof($errors) == 0) { 
     require_once dirname(__FILE__) . '/securimage.php'; 
     $securimage = new Securimage(); 

     if ($securimage->check($captcha) == false) { 
      $errors['captcha_error'] = 'Incorrect security code entered'; 
     } 
    } 

    if (sizeof($errors) == 0) { 
     // no errors, send the form 
     // header('http://crm.zoho.com/crm/WebToLeadForm'); 

     /*if (isset($GLOBALS['DEBUG_MODE']) && $GLOBALS['DEBUG_MODE'] == false) { 
      //send the message with mail() 
      header('location:http://www.tntemple.edu/request-information-online-learning-thank-you'); 
     }*/ 

     $return = array('error' => 0, 'message' => 'OK'); 
     die(json_encode($return)); 
    } else { 
     $errmsg = $captcha_error; 
     foreach($errors as $key => $error) { 
      // set up error messages to display with each field 
      $errmsg .= " - {$error}\n"; 
     } 

     $return = array('error' => 1, 'message' => $errmsg); 
     die(json_encode($return)); 
    } 


} // POST 
} // function process_si_zoho1() 

Эта функция запускается сразу же после загрузки страницы и проверяет, была ли страница отправлена. Записанные переменные изначально были частью кода, но я решил, что они нам не нужны, поэтому я прокомментировал их. Первоначальный код предназначался для отправки результатов формы получателю, но нам нужно, чтобы он возвращал true, чтобы отправить форму.

<form action="https://crm.zoho.com/crm/WebToLeadForm" id="zoho1" method="POST" name="leadForm" onsubmit="return processForm()"> 

Это форма с действием и onSubmit. Надеюсь, я был достаточно ясен. Спасибо за помощь. Я довольно новичок в программировании за пределами HTML, но я очень быстро набираю его.

также, в идеале, мы будем перенаправлять на другой URL-адрес при успешном представлении формы.

+0

Вы не можете отправить форму с помощью функции 'header()', которая будет перенаправлять браузер. Если вы хотите, чтобы они заполнили форму на вашем сайте, которая отправляется на другой сайт, вам нужно будет использовать cURL или что-то подобное, чтобы сделать запрос HTTP от их имени. Если вы не хотите этого делать, форма должна будет публиковаться непосредственно поставщику без капчей, так как вы не можете действительно сделать свой браузер двумя формами с 1 представлением. – drew010

+0

есть ли способ получить значение функции processForm() для возврата true, если captcha проверяет? это, по-видимому, главная проблема. Я отказался от функции header(), просто забыл отредактировать ее из кода, но он закомментирован. – Menelmor

+0

@ drew010 есть ли способ получить значение функции processForm() для возврата true, если captcha проверяет? – Menelmor

ответ

0

В основном, для того, чтобы вернуть действие формы, я просто добавил

if (r.error == 0) { 
reloadCaptcha() 
document.forms['formname'].submit() 

Он возвращается в поле действия, как если кнопка представить прессовали без аргумента, «вернуться ложным»

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