2013-11-15 3 views
0

Я использую форму Контракта из Руководства по форме контракта HTML на своем веб-сайте. При тестировании я запускаю свой сайт с моего компьютера с помощью apache и PHP v5.5. Кажется, что все работает на моем сервере тестирования, и я могу заполнить форму, нажать «Отправить» и приземлиться на странице «Успех». Когда я загружаю свой сайт в свою службу хостинга и пытаюсь использовать форму контакта, captcha не принимает мой ввод и возвращает сообщение «не удалось проверить антиспам». Мой хостинг работает под управлением PHP v5.3. Я не уверен, что меняется, и почему моя форма больше не работает, когда я ее загружаю. О, я также изучаю PHP на лету, поэтому я не могу полностью понять, что меня спрашивают, поэтому мне может потребоваться немного больше времени, чтобы дать точный ответ.Форма контакта с PHP с Captcha: «не удалось проверить антиспам»

* Этот вопрос был решен. Я в конечном итоге связался с fatcow, который является моей хостинговой компанией. Это их ответ «Я установил session.save_path в вашем« PHP Scripting », и я увеличил лимит памяти с 32 МБ до 128 МБ для ваших PHP-скриптов». Я предполагаю, что это проблема на стороне сервера. Наверное, я сузил его, и когда я столкнулся с подобной проблемой, я также могу предположить, что это проблема на стороне сервера. Надеюсь, что кто-нибудь с подобной проблемой сможет использовать этот пост и решить, что делать соответственно.

Я провел var_dump() по $_SESSION['FGCF_Captcha_Answer'] и $user_answer и оба значения были равны. Это то, что я получил:

строка 'c85757e710d687d24c0b044812d5ee05' (длина = 32)

строка 'c85757e710d687d24c0b044812d5ee05' (длина = 32)

Я также хостинг с сервера FatCow и связался с ними, чтобы увидеть если они знают что-нибудь об этой проблеме с reCAPTCHA на своем сервере. Просто жду ответа. Возможно ли, что сервер, на котором я работаю, может испытать эти вещи, может быть, не вопрос программирования, но, как я уже говорил выше, на моем собственном компьютере, работающем с apache, форма отлично работает, и единственная проблема, с которой я сталкиваюсь в fatcow, - это не вся форма, просто рекапчи

Вот капчи, если что-нибудь еще нужно, пожалуйста, дайте мне знать:

<?PHP 
    class FGSimpleCaptcha extends FG_CaptchaHandler 
    { 
var $error_str; 
var $captcha_varname; 
var $uniquekey; 

function FGSimpleCaptcha($captcha_var_name) 
{ 
    $this->captcha_varname=$captcha_var_name; 
    $this->uniquekey='KHJhsjsy65HGbsmnd'; 
} 

/*Add more simple questions here.*/ 
function GetSimpleCaptcha() 
{ 
    $arrQuestions = array(
    "What color is the sky? "=>"blue", 
    "What is 1+1=" => "2", 
    "What is the color of grass?"=>"green", 
    "Are you a robot? "=>"no", 
    "Are you human?"=>"yes"); 

    $question = array_rand($arrQuestions); 
    $answer = $arrQuestions[$question]; 

    $_SESSION['FGCF_Captcha_Answer'] = $this->Md5CaptchaAnswer($answer); 

    return $question; 
} 

function SetFormKey($key) 
{ 
    $this->uniquekey = $key; 
} 
function GetKey() 
{ 
    return $this->uniquekey; 
} 
function Validate() 
{ 
    $ret=false; 
    if(empty($_POST[$this->captcha_varname])) 
    { 
     $this->error_str = "Please answer the anti-spam question"; 
     $ret = false; 
    } 
    else 
    { 

     $scaptcha = trim($_POST[$this->captcha_varname]); 

     $scaptcha = strtolower($scaptcha); 

     $user_answer = $this->Md5CaptchaAnswer($scaptcha); 

     if($user_answer != $_SESSION['FGCF_Captcha_Answer']) 
     { 
      $this->error_str = "Failed the anti-spam check!"; 
      $ret = false; 
     } 
     else 
     { 
      $ret = true; 
     } 
    }//else 
    return $ret; 
} 
function Md5CaptchaAnswer($answer) 
{ 
    return md5($this->GetKey().$answer); 
} 
function GetError() 
{ 
    return $this->error_str; 
} 
} 
?> 

Вот частичный код вида:

class FGContactForm 
{ 
var $receipients; 
var $errors; 
var $error_message; 
var $name; 
var $email; 
var $message; 
var $from_address; 
var $form_random_key; 
var $conditional_field; 
var $arr_conditional_receipients; 
var $fileupload_fields; 
var $captcha_handler; 

var $mailer; 

function FGContactForm() 
{ 
    $this->receipients = array(); 
    $this->errors = array(); 
    $this->form_random_key = 'HTgsjhartag'; 
    $this->conditional_field=''; 
    $this->arr_conditional_receipients=array(); 
    $this->fileupload_fields=array(); 

    $this->mailer = new PHPMailer(); 
    $this->mailer->CharSet = 'utf-8'; 
} 

function EnableCaptcha($captcha_handler) 
{ 
    $this->captcha_handler = $captcha_handler; 
    session_start(); 
} 

function AddRecipient($email,$name="") 
{ 
    $this->mailer->AddAddress($email,$name); 
} 

function SetFromAddress($from) 
{ 
    $this->from_address = $from; 
} 
function SetFormRandomKey($key) 
{ 
    $this->form_random_key = $key; 
} 
function GetSpamTrapInputName() 
{ 
    return 'sp'.md5('KHGdnbvsgst'.$this->GetKey()); 
} 
function SafeDisplay($value_name) 
{ 
    if(empty($_POST[$value_name])) 
    { 
     return''; 
    } 
    return htmlentities($_POST[$value_name]); 
} 
function GetFormIDInputName() 
{ 
    $rand = md5('TygshRt'.$this->GetKey()); 

    $rand = substr($rand,0,20); 
    return 'id'.$rand; 
} 


function GetFormIDInputValue() 
{ 
    return md5('jhgahTsajhg'.$this->GetKey()); 
} 

function SetConditionalField($field) 
{ 
    $this->conditional_field = $field; 
} 
function AddConditionalReceipent($value,$email) 
{ 
    $this->arr_conditional_receipients[$value] = $email; 
} 

function AddFileUploadField($file_field_name,$accepted_types,$max_size) 
{ 

    $this->fileupload_fields[] = 
     array("name"=>$file_field_name, 
     "file_types"=>$accepted_types, 
     "maxsize"=>$max_size); 
} 

function ProcessForm() 
{ 
    if(!isset($_POST['submitted'])) 
    { 
     return false; 
    } 
    if(!$this->Validate()) 
    { 
     $this->error_message = implode('<br/>',$this->errors); 
     return false; 
    } 
    $this->CollectData(); 

    $ret = $this->SendFormSubmission(); 

    return $ret; 
} 

function RedirectToURL($url) 
{ 
    header("Location: $url");/* Redirect browser */ 

    /* Make sure that code below does not get executed when we redirect. */ 
    exit; 
} 

function GetErrorMessage() 
{ 
    return $this->error_message; 
} 
function GetSelfScript() 
{ 
    return htmlentities($_SERVER['PHP_SELF']); 
} 

function GetName() 
{ 
    return $this->name; 
} 
function GetEmail() 
{ 
    return $this->email; 
} 
function GetMessage() 
{ 
    return htmlentities($this->message,ENT_QUOTES,"UTF-8"); 
} 
+0

У вас есть 'session_start()' в вашем коде? Вам это нужно, если вы собираетесь использовать $ _SESSION. – andrewsi

+0

@andrewsi да я. Я попытаюсь ввести часть кода из формы, чтобы вы могли видеть, с чем я работаю. Я стараюсь не наводнять вас кодом, поэтому я беру его фрагмент. – user2984514

+0

Вы будете удивлены тому, как часто люди это забывают. В этом случае сообщение, которое вы получаете, похоже, возникает из-за сбоя этой проверки: 'if ($ user_answer! = $ _SESSION ['FGCF_Captcha_Answer']). Не могли бы вы попытаться использовать 'var_dump' для обеих этих переменных, чтобы вы могли видеть, какие значения фактически существуют? – andrewsi

ответ

0

Этот вопрос была решена. Я в конечном итоге связался с fatcow, который является моей хостинговой компанией. Это их ответ «Я установил session.save_path в вашем« PHP Scripting », и я увеличил лимит памяти с 32 МБ до 128 МБ для ваших PHP-скриптов». Я предполагаю, что это проблема на стороне сервера. С некоторой помощью я смог сузить его, и когда я столкнулся с подобной проблемой, я также могу предположить, что это проблема на стороне сервера. Надеюсь, что кто-нибудь с подобной проблемой сможет использовать этот пост и решить, что делать соответственно.

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