Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.04.2016, 11:58
Аватар для Spirit_on
Аспирант
Отправить личное сообщение для Spirit_on Посмотреть профиль Найти все сообщения от Spirit_on
 
Регистрация: 27.04.2014
Сообщений: 41

Сломалась форма
Сломалась форма обратной связи.



Если не заполнять поле с "мылом" то письма приходят.
Как поле "мыло" заполнишь-тишина.
Выложу код,сорри если корявый..сделано в конструкторе.
<?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' && isset($_POST['formid']) && $_POST['formid'] == 'indexform1')
{
   $mailto = 'сюда_письма_приходят@ya.ru';
   $mailfrom = isset($_POST['email']) ? $_POST['email'] : $mailto;
   $subject = 'Website form';
   $message = 'Values submitted from web site form:';
   $success_url = '';
   $error_url = '';
   $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", "filesize", "formid", "captcha_code", "recaptcha_challenge_field", "recaptcha_response_field", "g-recaptcha-response");
   $message .= $eol;
   $message .= "IP Address : ";
   $message .= $_SERVER['REMOTE_ADDR'];
   $message .= $eol;
   $logdata = '';
   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;
   if ($mailto != '')
   {
      mail($mailto, $subject, $body, $header);
   }
   header('Location: '.$success_url);
   exit;
}
?>
<!doctype html>
<html lang="ru">
<head>
<meta charset="utf-8">
<title>form</title>
<link href="wwb-css/10.4.css" rel="stylesheet">
<link href="wwb-css/index.css" rel="stylesheet">
<script>   
   function Validateформа1(theForm)
   {
      var regexp;
      regexp = /^[a-z,A-Z,а-я,А-Я]*$/;
      if (!regexp.test(theForm.indexEditbox1.value))
      {
         alert("Please enter only letter characters in the \"Имя\" field.");
         theForm.indexEditbox1.focus();
         return false;
      }
      regexp = /^([0-9a-z]([-.\w]*[0-9a-z])*@(([0-9a-z])+([-\w]*[0-9a-z])*\.)+[a-z]{2,6})$/i;
      if (theForm.indexEditbox2.value.length != 0 && !regexp.test(theForm.indexEditbox2.value))
      {
         alert("Мыло не ввел");
         theForm.indexEditbox2.focus();
         return false;
      }
      return true;
   }
</script>
</head>
<body>
   <div id="container">
      <div id="wb_indexForm1" style="position:absolute;left:361px;top:16px;width:249px;height:277px;z-index:4;">
         <form name="форма1" method="post" action="<?php echo basename(__FILE__); ?>" enctype="multipart/form-data" accept-charset="UTF-8" id="indexForm1" onsubmit="return Validateформа1(this)">
            <input type="hidden" name="formid" value="indexform1">
            <input type="text" id="indexEditbox1" style="position:absolute;left:58px;top:23px;width:130px;height:26px;line-height:26px;z-index:0;" name="Имя" value="" placeholder="Введите имя">
            <textarea name="Сообщение" id="indexTextArea1" style="position:absolute;left:26px;top:140px;width:195px;height:57px;z-index:1;" rows="2" cols="29" placeholder="Пишем тут"></textarea>
            <input type="submit" id="indexButton1" name="" value="Отправить" style="position:absolute;left:76px;top:225px;width:96px;height:25px;z-index:2;">
            <input type="email" id="indexEditbox2" style="position:absolute;left:58px;top:77px;width:122px;height:18px;line-height:18px;z-index:3;" name="Мыло" value="" placeholder="Введите мыло">
         </form>
      </div>
   </div>
</body>
</html>

P.S.
Кстати,на локалке "Open Server" все работает без проблем.
Ниче не понимаю.

Последний раз редактировалось Spirit_on, 09.04.2016 в 14:46.
Ответить с цитированием
  #2 (permalink)  
Старый 09.04.2016, 15:07
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

\w - это как раз 0-9a-z и _, зависит от локализации.

https://habrahabr.ru/post/175375/
https://habrahabr.ru/post/55820/

$eol = "\n"; - PHP_EOL

<?php echo basename(__FILE__); ?> - и какой в этом смысл? Это равноценно не указывать форме action, ибо по умолчанию оно и будет равно текущему адресу.

Если на локальном работает, а на удаленном нет, то смотреть логи.
Ответить с цитированием
  #3 (permalink)  
Старый 09.04.2016, 15:47
Аватар для Spirit_on
Аспирант
Отправить личное сообщение для Spirit_on Посмотреть профиль Найти все сообщения от Spirit_on
 
Регистрация: 27.04.2014
Сообщений: 41

А можно чуть подробней про PHP_EOL
Я его вот так вставил:

Приходить стало,но криво:


Может не так и не туда поставил PHP_EOL
Ответить с цитированием
  #4 (permalink)  
Старый 09.04.2016, 16:11
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

PHP_EOL - это предопределенная в РНР константа равная в зависимости от платформы либо \n, либо \r\n, ... То есть вместо $eol используйте PHP_EOL.

А если говорить об оформлении почтовом, то не мешало бы прочесть рекомендации RFC. Да и код у вас по структуре не ахти, ну например, начинается с оформления заголовков почты, а потом опомнившись проверяется мыло и бах, вывалились, спрашивается а зачем тогда заголовки? Сперва проверяются условия, аж уж затем при их соблюдении оформление и отправка почты.

И не понятно откуда появляются файлы, при отсутствии поля выбора в форме.
Ответить с цитированием
  #5 (permalink)  
Старый 09.04.2016, 21:01
Аватар для Spirit_on
Аспирант
Отправить личное сообщение для Spirit_on Посмотреть профиль Найти все сообщения от Spirit_on
 
Регистрация: 27.04.2014
Сообщений: 41

Ответить с цитированием
  #6 (permalink)  
Старый 09.04.2016, 21:55
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Это не левак, а тело сообщения почтового, то бишь что ему указано, так он и упаковывает. В качестве boundary упаковывать адрес, ну это надо иметь богатую фантазию, и учтите, что сообщение multipart, это несколько частей, и у каждой свой разделитель, да и части могут быть alternative, related.

Если вложенные файлы и файлы это изображения, и они отображаемые в письме (для режима offline), то для html формата выбирают Content-Transfer-Encoding: base64 разбитый на фиксированные строки.

Поставил \r вместо \n ... ну это просто глупость. Переносы на новую строку, это не для экспериментов, а для почтового отправления, дабы почтовые программы могли отличить в его теле мух от котлет, и не после каждой строки заголовка, разделителей, частей должен быть один перенос. И разделитель должен использоваться платформы, на которой работает сервер, поэтому и используйте PHP_EOL, и не майтесь...

Читайте рекомендации RFC по поводу оформления почтовых сообщений. Не хотите, ищите в сети об отправке почты и читайте как это грамотно и корректно делается. Не хотите и этого знать, берите готовый класс отправления почты, тот же phpmailer.

PS. Open Server реально ничего не отправляет, в нем sendmail работает как заглушка, а значит никто не принимает и ошибок вроде бы нет.

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

Последний раз редактировалось laimas, 17.11.2018 в 16:51.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Форма отправки сообщения с сайта hardwolf Элементы интерфейса 17 24.10.2016 15:00
откуда была отправлена форма ? avanesov89 Общие вопросы Javascript 3 16.04.2014 17:50
Не передается форма в выводе результатов через ajax tot18 AJAX и COMET 4 06.03.2014 16:15
не работает форма в окне, вызванном jquery page slide ikar jQuery 0 31.07.2011 22:55
Всплывающая форма в центре страницы для гостевой книги angel-13th Элементы интерфейса 8 05.02.2011 20:10