Я использую форму Контракта из Руководства по форме контракта 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");
}
У вас есть 'session_start()' в вашем коде? Вам это нужно, если вы собираетесь использовать $ _SESSION. – andrewsi
@andrewsi да я. Я попытаюсь ввести часть кода из формы, чтобы вы могли видеть, с чем я работаю. Я стараюсь не наводнять вас кодом, поэтому я беру его фрагмент. – user2984514
Вы будете удивлены тому, как часто люди это забывают. В этом случае сообщение, которое вы получаете, похоже, возникает из-за сбоя этой проверки: 'if ($ user_answer! = $ _SESSION ['FGCF_Captcha_Answer']). Не могли бы вы попытаться использовать 'var_dump' для обеих этих переменных, чтобы вы могли видеть, какие значения фактически существуют? – andrewsi