Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > ошибка в дате при отправки из формы


Автор: kminas 2.9.2009, 15:01
В php не рублю. Но спамеры достают. Установил на сайте форму с проверкой с помощью captcha. Настроил скрипт, но письма с сайта приходят датированные 1.01.1980 4.00 или 3.59. Помогите разобраться в скрипте и найти ошибку, либо подскажите, где прочитать как пишется скрипт с датой.  Единственно что я понял, что заголовок с датой присутствует только после оператора "elseif" 
Код

elseif (!empty($_POST)) 
$headers .= "Date: ".date("Y-m-d (H:i:s)",time())."\r\n";

Но почему то его нет после оператора "if"? 

Автор: NewDima 2.9.2009, 15:05
Цитата(kminas @ 2.9.2009,  22:01)
Помогите разобраться в скрипте и найти ошибку, либо подскажите, где прочитать как пишется скрипт с датой.

1. По двум строчкам плохо понятно, что происходит в коде вообще
2. Что значит. "как пишется скрипт с датой"?

Автор: kminas 2.9.2009, 15:21
Код

<?
include('kcaptcha/kcaptcha.php');
session_start();
require_once("config.php");

if ($_POST['act']== "y")
{
    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-z,._,0-9])+@([a-z,._,0-9])+(.([a-z])+)+$/", $_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: $content  charset=$charset\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";

 mail("$mailto","$subject","$message","$headers");

 unset($name, $posText, $mailto, $subject, $posRegard, $message);

 $statusSuccess = "$send";
}

       }else{
             $statusError = "$captcha_error";
             unset($_SESSION['captcha_keystring']);
        }
}


?>


Вот весь код.
Как сделать, чтобы отправленное письмо датировалось текущей датой и временем. Просто я хотел сам напрячь голову, но видно не получится.

Автор: Ипатьев 2.9.2009, 15:28
я думаю, надо убрать из кода ту самую строчку

Добавлено через 1 минуту и 32 секунды
а вообще кривой, конечно, код в целом.
лучше поискать другой какой-нибудь.

Автор: icewind 2.9.2009, 15:37
Дата должна быть в формате RFC 2822

Попробуй
Код

$headers .= "Date: ".date("Y-m-d (H:i:s)",time())."\r\n";

заменить на
Код

$headers .= "Date: ".date(DATE_RFC822, time())."\r\n";

или
Код

$headers .= "Date: ".date('r', time())."\r\n";

Автор: kminas 2.9.2009, 15:41
Ипатьев, спасибо. Я, в общем тоже подумал, что по умолчанию должна вроде сама дата ставиться. Получилось, спасибо. Пока поставлю, а со временем, может сам разберусь.

Добавлено через 6 минут и 53 секунды
icewind, спасибо, попробую, сейчас домой надо бежать.

Автор: kminas 2.9.2009, 15:58
icewind, Ваш вариант тоже сработал. Так все-таки как лучше оставить так или удалить и пусть сама ставится?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)