| Была прикручена ckaptcha (Круглов С.) к сайту на локальном хосте (linux apache) в форме обратной связи. Всё работало, письма с локального хоста отправлялись. При размещении сайта на хостинге возникла проблема: письма не отправляются по причине того, что постоянно "неправильно введён код". При этом код отображается, обновляется, но при его введении (в форме) и попытке отправить письмо пишет "неправильный код". В чём может быть проблема? Ведь если на локальном сервере всё работает, значит, программа правильная! Хостер говорит, что все логи нормальные, настройки позволяют работать с формами обратной связи и с каптчами. Получается, что session неправильно работает? Пути вроде бы правильные.
Здесь привожу участки кода:
- файл шаблона страницы:
............................
<div id="a-c-t-form">
<?php include(GSTHEMESPATH.$TEMPLATE.'/mail/index.php'); ?>
<div class="form-text">
<p id="emailSuccess"><strong style="color: green;"><?php echo "$statusSuccess" ?></strong></p>
<p id="emailError"><strong style="color: red;"><?php echo "$statusError" ?></strong></p>
</div>
<form action="./" method="post">
<p><input type="hidden" name="act" value="act"></p>
<p><input class="text" type="text" value="Ваше имя" name="posName" id="posName"></p>
<p><input class="text" type="text" value="Ваш E-mail" name="posEmail" id="posEmail"></p>
<p><input class="text" type="text" value="Ваша тема" name="posRegard" id="posRegard"></p>
<p><textarea value="Ваш вопрос" name="posText" id="posText">Ваш вопрос</textarea></p>
<p><img class="imgcod" src="<?php get_theme_url(); ?>/mail/kcaptcha?<?php echo session_name() ?> = <?php echo session_id() ?>"></p>
<p><input class="cod" type="text" value="Код на картинке" name="keystring" id="keystring"></p>
<p><input class="submit" type="submit" name="selfCC" id="selfCC" value="Отправить"></submit></p>
</form>
..........................
- файл контактной формы (лежит в папке mail)
<?php
include('kcaptcha/kcaptcha.php');
session_start();
$mailto = "pochta@domen.ru";
$subject = $_POST['posRegard'];
$message = $_POST['posText'];
$statusError = "";
$statusSuccess = "";
$errors_name = 'Введите Ваше имя!';
$errors_mailfrom = 'Введите Ваш E-mail!';
$errors_incorrect = 'Неверный E-mail!';
$errors_message = 'Пустое сообщение!';
$errors_subject = 'Пустая тема письма!';
$captcha_error = 'Неверный код!';
$send = 'Сообщение отправлено!';
if($_POST['act']== "act")
{ if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring'])
{ if(isset($_POST['posName']) && $_POST['posName'] == "") {$statusError = "$errors_name";}
elseif(isset($_POST['posEmail']) && $_POST['posEmail'] == "") {$statusError = "$errors_mailfrom";}
elseif(isset($_POST['posEmail']) && !preg_match("/^[a-z0-9_\.\-]+@([a-z0-9\-]+\.)+[a-z]{2,6}$/i", $_POST['posEmail'])) {$statusError = "$errors_incorrect"; unset($_POST['posEmail']);}
elseif(isset($_POST['posRegard']) && $_POST['posRegard'] == "") {$statusError = "$errors_subject";}
elseif(isset($_POST['posText']) && $_POST['posText'] == "") {$statusError = "$errors_message";}
elseif(!empty($_POST))
{ $headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/plain; charset=utf-8\r\n";
$headers .= "Date: ".date("Y-m-d (H:i:s)",time())."\r\n";
$headers .= "From: \"".$_POST['posName']."\" <".$_POST['posEmail'].">\r\n";
$headers .= "X-Mailer: My Send E-mail\r\n";
$body = iconv("koi8-r", "koi8-r", $message);
mail("$mailto","$subject","$body","$headers");
unset($name, $posText, $mailto, $subject, $posRegard, $message);
$statusSuccess = "$send";
}
}
else {$statusError = "$captcha_error"; unset($_SESSION['captcha_keystring']);}
}
?>
- главный файл капчи (лежит в папке mail/kcaptcha)
<?php
error_reporting (E_ALL);
/* Using (как бы оригинал...):
<?php session_start(); ?>
<form action="./" method="post">
<p>Enter text shown below:</p>
<p><img src="PATH-TO-THIS-SCRIPT?<?php echo session_name()?>=<?php echo session_id()?>"></p>
<p><input type="text" name="keystring"></p>
<p><input type="submit" value="Check"></p>
</form>
<?php
if(count($_POST)>0)
{ if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring'])
{echo "Correct";}
else {echo "Wrong";}
}
unset($_SESSION['captcha_keystring']);
?>
*/
include('kcaptcha.php');
if(isset($_REQUEST[session_name()])){session_start();}
$captcha = new KCAPTCHA();
if($_REQUEST[session_name()]){$_SESSION['captcha_keystring'] = $captcha->getKeyString();}
?> | |