Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Форма обратной связи / 22 сообщений из 22, страница 1 из 1
02.05.2013, 13:51
    #38246586
alexander4321
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма обратной связи
Добрый день! При переносе с локального хоста на удаленный возникла проблема с формой обратной связи. Привожу код
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
<?php
   function ValidateEmail($email)
   {
      $pattern = '/^([0-9a-z]([-.\w]*[0-9a-z])*@(([0-9a-z])+([-\w]*[0-9a-z])*\.)+[a-z]{2,6})$/i';
      return preg_match($pattern, $email);
   }

   if($_SERVER['REQUEST_METHOD'] == 'POST')
   {
      $mailto = '40auto@mail.ru';
      $mailfrom = isset($_POST['email']) ? $_POST['email'] : $mailto;
      $subject = 'Сообщение kaluga-emex.ru';
      $message = 'Сообщение от посетителя kaluga-emex.ru:';
      $success_url = 'success.php';
      $error_url = 'error.php';
      $error = '';
      $eol = "\n";
      $max_filesize = isset($_POST['filesize']) ? $_POST['filesize'] * 1024 : 1024000;
      $boundary = md5(uniqid(time()));

      $header  = 'From: '.$mailfrom.$eol;
      $header .= 'Reply-To: '.$mailfrom.$eol;
      $header .= 'MIME-Version: 1.0'.$eol;
      $header .= 'Content-Type: multipart/mixed; boundary="'.$boundary.'"'.$eol;
      $header .= 'X-Mailer: PHP v'.phpversion().$eol;
      if (!ValidateEmail($mailfrom))
      {
         $error .= "The specified email address is invalid!\n<br>";
      }

      if (!empty($error))
      {
         $errorcode = file_get_contents($error_url);
         $replace = "##error##";
         $errorcode = str_replace($replace, $error, $errorcode);
         echo $errorcode;
         exit;
      }

      $internalfields = array ("submit", "reset", "send", "captcha_code");
      $message .= $eol;
      $message .= "IP адрес : ";
      $message .= $_SERVER['REMOTE_ADDR'];
      $message .= $eol;
      foreach ($_POST as $key => $value)
      {
         if (!in_array(strtolower($key), $internalfields))
         {
            if (!is_array($value))
            {
               $message .= ucwords(str_replace("_", " ", $key)) . " : " . $value . $eol;
            }
            else
            {
               $message .= ucwords(str_replace("_", " ", $key)) . " : " . implode(",", $value) . $eol;
            }
         }
      }

      $body  = 'This is a multi-part message in MIME format.'.$eol.$eol;
      $body .= '--'.$boundary.$eol;
      $body .= 'Content-Type: text/plain; charset=utf-8'.$eol;
      $body .= 'Content-Transfer-Encoding: 8bit'.$eol;
      $body .= $eol.stripslashes($message).$eol;
      if (!empty($_FILES))
      {
          foreach ($_FILES as $key => $value)
          {
             if ($_FILES[$key]['error'] == 0 && $_FILES[$key]['size'] <= $max_filesize)
             {
                $body .= '--'.$boundary.$eol;
                $body .= 'Content-Type: '.$_FILES[$key]['type'].'; name='.$_FILES[$key]['name'].$eol;
                $body .= 'Content-Transfer-Encoding: base64'.$eol;
                $body .= 'Content-Disposition: attachment; filename='.$_FILES[$key]['name'].$eol;
                $body .= $eol.chunk_split(base64_encode(file_get_contents($_FILES[$key]['tmp_name']))).$eol;
             }
         }
      }
      $body .= '--'.$boundary.'--'.$eol;
      mail($mailto, $subject, $body, $header);
      header('Location: '.$success_url);
      exit;
   }
?>


На локальном хосте при отправке сообщения выводится страничка с сообщением об успешной отправке сообщения. Когда выгрузил этот код на удаленный хост, при отправке сообщения выводится сообщение об ошибке, причем само сообщение посетителя приходит на контактный mail.
Привожу скриншот ошибки, также вот ссылка на страницу с обратной связью http://40auto.ru/tes/kaluga-emex/contacts.php
Может отключить сообщения об ошибках? Что еще можно сделать? Спасибо заранее!
...
Рейтинг: 0 / 0
02.05.2013, 17:00
    #38246695
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма обратной связи
Так переносили, значит. Смотрите, что там в первой строке указанного файла - пробел, пустая строка, BOM или еще чего.
...
Рейтинг: 0 / 0
02.05.2013, 17:53
    #38246728
alexander4321
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма обратной связи
Спасибо! Помогло.
Причем по старому опыту помнил, что нужно было сохранять в кодировке utf-8 без ВОМ. Сегодня днем сохранил в такой кодировке и закачал на хост. Русский текст между тегами title был в виде краказябр. Пересохранил в кодировке просто utf-8, краказябры пропали. После этого попробовал работоспособность, появилась вышеприведенная ошибка. Сейчас плюнул на краказябры, подумал пусть уж лучше на одной странице будут краказябры, но она работать будет. Пересохранил в utf-8 без ВОМ - теперь и ошибку не выдает, и текст русский в заголовке страницы нормально отображается.
Еще раз спасибо!
...
Рейтинг: 0 / 0
02.05.2013, 17:57
    #38246730
alexander4321
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма обратной связи
Хотя не совсем все хорошо: краказябры опять появились, но майл отправляется нормально.
...
Рейтинг: 0 / 0
02.05.2013, 21:49
    #38246830
alexander4321
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма обратной связи
Поисправлял некоторую информацию на сайте. На всякий случай прикрепляю код, который есть сейчас, но, по моему, там ничего не изменилось. Вот код PHP-скрипта.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
<?php
   function ValidateEmail($email)
   {
      $pattern = '/^([0-9a-z]([-.\w]*[0-9a-z])*@(([0-9a-z])+([-\w]*[0-9a-z])*\.)+[a-z]{2,6})$/i';
      return preg_match($pattern, $email);
   }

   if($_SERVER['REQUEST_METHOD'] == 'POST')
   {
      $mailto = '40auto@mail.ru';
      $mailfrom = isset($_POST['email']) ? $_POST['email'] : $mailto;
      $subject = 'Сообщение с сайта kaluga-emex.ru';
      $message = 'Данные, переданные через форму обратной связи:';
      $success_url = './success.php';
      $error_url = './error.php';
      $error = '';
      $eol = "\n";
      $max_filesize = isset($_POST['filesize']) ? $_POST['filesize'] * 1024 : 1024000;
      $boundary = md5(uniqid(time()));

      $header  = 'From: '.$mailfrom.$eol;
      $header .= 'Reply-To: '.$mailfrom.$eol;
      $header .= 'MIME-Version: 1.0'.$eol;
      $header .= 'Content-Type: multipart/mixed; boundary="'.$boundary.'"'.$eol;
      $header .= 'X-Mailer: PHP v'.phpversion().$eol;
      if (!ValidateEmail($mailfrom))
      {
         $error .= "The specified email address is invalid!\n<br>";
      }

      if (!empty($error))
      {
         $errorcode = file_get_contents($error_url);
         $replace = "##error##";
         $errorcode = str_replace($replace, $error, $errorcode);
         echo $errorcode;
         exit;
      }

      $internalfields = array ("submit", "reset", "send", "captcha_code");
      $message .= $eol;
      $message .= "IP Address : ";
      $message .= $_SERVER['REMOTE_ADDR'];
      $message .= $eol;
      foreach ($_POST as $key => $value)
      {
         if (!in_array(strtolower($key), $internalfields))
         {
            if (!is_array($value))
            {
               $message .= ucwords(str_replace("_", " ", $key)) . " : " . $value . $eol;
            }
            else
            {
               $message .= ucwords(str_replace("_", " ", $key)) . " : " . implode(",", $value) . $eol;
            }
         }
      }

      $body  = 'This is a multi-part message in MIME format.'.$eol.$eol;
      $body .= '--'.$boundary.$eol;
      $body .= 'Content-Type: text/plain; charset=utf-8'.$eol;
      $body .= 'Content-Transfer-Encoding: 8bit'.$eol;
      $body .= $eol.stripslashes($message).$eol;
      if (!empty($_FILES))
      {
          foreach ($_FILES as $key => $value)
          {
             if ($_FILES[$key]['error'] == 0 && $_FILES[$key]['size'] <= $max_filesize)
             {
                $body .= '--'.$boundary.$eol;
                $body .= 'Content-Type: '.$_FILES[$key]['type'].'; name='.$_FILES[$key]['name'].$eol;
                $body .= 'Content-Transfer-Encoding: base64'.$eol;
                $body .= 'Content-Disposition: attachment; filename='.$_FILES[$key]['name'].$eol;
                $body .= $eol.chunk_split(base64_encode(file_get_contents($_FILES[$key]['tmp_name']))).$eol;
             }
         }
      }
      $body .= '--'.$boundary.'--'.$eol;
      mail($mailto, $subject, $body, $header);
      header('Location: '.$success_url);
      exit;
   }
?>



На всякий случай прикрепляю код формы
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<form name="contact" method="post" action="<?php echo basename(__FILE__); ?>" enctype="multipart/form-data" id="Form1">
<div id="wb_Text4" style="margin:0;padding:0;position:absolute;left:10px;top:15px;width:48px;height:20px;text-align:left;z-index:0;border:0px #C0C0C0 solid;overflow-y:hidden;background-color:transparent;">
<div style="font-family:Arial;font-size:13px;color:#000000;">
<div style="text-align:left">Имя:</div>
</div>
</div>
<input type="text" id="Editbox1" style="position:absolute;left:63px;top:17px;width:389px;height:21px;line-height:21px;z-index:1;" name="name" value="">
<div id="wb_Text5" style="margin:0;padding:0;position:absolute;left:10px;top:45px;width:48px;height:20px;text-align:left;z-index:2;border:0px #C0C0C0 solid;overflow-y:hidden;background-color:transparent;">
<div style="font-family:Arial;font-size:13px;color:#000000;">
<div style="text-align:left">Email:</div>
</div>
</div>
<input type="text" id="Editbox2" style="position:absolute;left:63px;top:44px;width:389px;height:24px;line-height:24px;z-index:3;" name="email" value="">
<div id="wb_Text6" style="margin:0;padding:0;position:absolute;left:10px;top:75px;width:48px;height:20px;text-align:left;z-index:4;border:0px #C0C0C0 solid;overflow-y:hidden;background-color:transparent;">
<div style="font-family:Arial;font-size:13px;color:#000000;">
<div style="text-align:left">Текст</div>
</div>
</div>
<textarea name="TextArea1" id="TextArea1" style="position:absolute;left:63px;top:75px;width:390px;height:141px;z-index:5;" rows="1" cols="1"></textarea>
<input type="submit" id="Button1" name="" value="Отправить" style="position:absolute;left:66px;top:226px;width:96px;height:25px;z-index:6;">
</form>


Происходит следующая ситуация:
-на локальном сервере все нормально работает. Если закачиваю на хост просто в кодировке utf-8, то русские буквы на кнопках формы отображаются нормально, но при нажатии на кнопку Отправить выводится сообщение об ошибке (или просто предупреждение), фото которого прикреплял в первом посте. При этом письмо на ящик приходит, текст сообщения нормальный.
-пересохраняю страницу в кодировке utf-8 без BOM. После закачки на сервер русский текст на кнопках отображается нормально.
После нажатия на кнопку Отправить как и положено происходит переход на страницу с информацией об успешной отправке сообщения. Но при этом русский текст сообщения на мейл приходит в виде такой кодировки

Код: sql
1.
&#1072;&#1074;&#1087;&#1082;&#1103;&#1077;&#1090;&#1086;&#1072;&#1082;&#1088;&#1090;&#1072;



Не подскажете, что здесь можно сделать? Может в кодировке utf-8 просто отключить сообщение об ошибках? Или еще есть какой-нибудь выход из положения? Спасибо!
...
Рейтинг: 0 / 0
02.05.2013, 22:06
    #38246834
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма обратной связи
авторМожет в кодировке utf-8 просто отключить сообщение об ошибках?Это все равно что спрятать от родителей дневник с двойкой.
...
Рейтинг: 0 / 0
02.05.2013, 22:06
    #38246835
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма обратной связи
alexander4321,

в виде &последовательностей приходит только набранный в форме русский текст, или любой?
...
Рейтинг: 0 / 0
02.05.2013, 22:10
    #38246837
alexander4321
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма обратной связи
Програмёр, только русский текст.
...
Рейтинг: 0 / 0
02.05.2013, 22:12
    #38246839
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма обратной связи
alexander4321Програмёр, только русский текст.

Извиняюсь. неверно вопрос задал...
В виде последовательностей приходит любой русский текст(даже статически вбитый в скрипте), или только тот, который был введён через форму обратной связи?
...
Рейтинг: 0 / 0
02.05.2013, 22:25
    #38246843
alexander4321
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма обратной связи
Даже статический текст. Сейчас на хосте файл с кодировкой utf-8 без BOM. Там на кнопках русский текст отображается в виде краказябр. Вот скрин сообщения со страницы с такой кодировкой. Причем после отправки такого сообщения на сайте не выдает никаких ошибок: открывается страница с сообщением об успешной отправке. Сейчас изменю кодировку и новым постом скину другой скрин с тем, что будет при кодировке просто utf-8.
...
Рейтинг: 0 / 0
02.05.2013, 22:30
    #38246845
alexander4321
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма обратной связи
Сменил кодировку на просто utf-8. Кнопки с русским текстом отображаются нормально. Сообщение и с русским, и с английским текстом приходит нормально (прилагаю скриншот). Но пользователю выводится сообщение об ошибке.
...
Рейтинг: 0 / 0
02.05.2013, 22:34
    #38246847
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма обратной связи
alexander4321,

Проблему понял. Попробуй adddefaultcharset в htaccess. Не помню как точно пишется. Гугл рулит )
...
Рейтинг: 0 / 0
02.05.2013, 22:36
    #38246851
alexander4321
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма обратной связи
Програмёр,

в htaccess на удаленном хостинге?
...
Рейтинг: 0 / 0
02.05.2013, 22:44
    #38246852
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма обратной связи
alexander4321Програмёр,

в htaccess на удаленном хостинге?
Да
...
Рейтинг: 0 / 0
02.05.2013, 22:58
    #38246857
alexander4321
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма обратной связи
Что-то не могу найти, где этот файл там находится. На хостинге есть папка www, в которой сайт лежит, и папка cgi (пустая). Конечно, можно в техподдержку обратиться. А где там вообще этот файл искать? Как я понимаю, он на web сервере лежит. Думаю, меня к нему не пустят.
...
Рейтинг: 0 / 0
02.05.2013, 23:01
    #38246859
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма обратной связи
alexander4321,

Его там возможно и нет. Тогда надо создать в папке www файл .htaccess
...
Рейтинг: 0 / 0
02.05.2013, 23:14
    #38246866
alexander4321
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма обратной связи
Как я понимаю, файл .htaccess нужно расположить в папке www. Обязательно в этом файле все прописывать или достаточно упомянуть AddDefaultCharset utf-8 ??? В таком случае все остальные данные будут браться из файла .htaccess, который лежит на самом сервере? Правильно я все понял?
Спасибо!
...
Рейтинг: 0 / 0
02.05.2013, 23:18
    #38246870
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма обратной связи
alexander4321,

Да. Именно так. Только напиши, помогло ли )
...
Рейтинг: 0 / 0
02.05.2013, 23:36
    #38246876
alexander4321
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма обратной связи
Програмёр Только напиши, помогло ли )

Все работает. Спасибо большое!
...
Рейтинг: 0 / 0
02.05.2013, 23:59
    #38246886
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма обратной связи
alexander4321,

работает? ура... Был рад помочь
...
Рейтинг: 0 / 0
03.05.2013, 08:20
    #38246982
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма обратной связи
А что было-то, кто объяснит?
...
Рейтинг: 0 / 0
03.05.2013, 09:26
    #38247004
st_st
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма обратной связи
skyANAА что было-то, кто объяснит?

Если по последнему вопросу, то как обычно - кодировка (кодировка в бд, кодировка самих файлов и content-type выдаваемый сервером + meta charset должны соответствовать друг другу), а если по первому, то в php буферизация отключена по дефолту (в отличие от .net), то есть первыми идут заголовки, далее содержимое (стандарт http), а тут сначала контент пихается в виде BOM, а затем заголовок редиректа header(), что и вызывает ошибку, как-то так.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Форма обратной связи / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]