Вернуться   Дизайнерский форум » ВЕБ-ПРОГРАММИРОВАНИЕ » ASP, Perl, PHP и MySQL

Форма обратной связи с прикреплением файла

Обсуждение темы Форма обратной связи с прикреплением файла в разделе ASP, Perl, PHP и MySQL, часть категории ВЕБ-ПРОГРАММИРОВАНИЕ; Как привести в чувство данную форму, на сайте форма отображается ок, при вводе данных и нажатии кнопки «отправить» перебрасывает на пустую белую страницу, ...


Закрытая тема
 
Опции темы
Старый 16.06.2010, 21:26   #1
Как привести в чувство данную форму, на сайте форма отображается ок, при вводе данных и нажатии кнопки «отправить» перебрасывает на пустую белую страницу, ну и письмо, не говоря о файле, ни куда не отправляется.

Что не так в форме или php коде?
Спасибо.


Код:
<h1>Контактная форма</h1>

	
	<form action='action_mail.php' method="post" name='contact' enctype="multipart/form-data">
	<p><input type="text" name="subj" value="Ваше имя: " class='text' onfocus="this.value = '';" >
	<p><input type="text" name="from" value="Ваш E-mail: " class='text' onfocus="this.value = '';" >
	<p><textarea></textarea><br>
	Файл: <input type="file" name="file"><br>
</td>

</tr>
<tr>
<td></td>
<td></td>
<td class = 'column hr' style='padding-right:40px;'><div  class='readmore'><a onclick='document.forms["contact"].submit()'>Отправить</a></div><div  class='readmore'><a onclick='document.forms["contact"].reset()'>Очистить</a></div></form></td>
</tr>
</table>
PHP код:
<?
//Функция проверки переменной
function html_filter($str) {
$result HTMLSpecialChars($str);
return 
$result;}

//Функция проверки e-mail
function isEmail($email){
if (
eregi("^[a-z0-9]+([-_\.]?[a-z0-9])+@[a-z0-9]+([-_\.]?[a-z0-9])+\.[a-z]+$"$email)){return TRUE;}else{return FALSE;}}

//Функция отправки письма с аттачем
$to = ("[email protected]");
function 
XMail($from$to$subj$text$filename$file)
{
$f fopen($file,"rb");
$un strtoupper(uniqid(time()));
$head "From: $from\n";
$head .= "To: $to\n";
$head .= "Subject: $subj\n";
$head .= "X-Mailer: PHPMail Tool\n";
$head .= "Reply-To: $from\n";
$head .= "Mime-Version: 1.0\n";
$head .= "Content-Type:multipart/mixed;";
$head .= "boundary=\"----------".$un."\"\n\n";
$zag "------------".$un."\nContent-Type:text/html;\n";
$zag .= "Content-Transfer-Encoding: 8bit\n\n$text\n\n";
$zag .= "------------".$un."\n";
$zag .= "Content-Type: application/octet-stream;";
$zag .= "name=\"".basename($filename)."\"\n";
$zag .= "Content-Transfer-Encoding:base64\n";
$zag .= "Content-Disposition:attachment;";
$zag .= "filename=\"".basename($filename)."\"\n\n";
$zag .= chunk_split(base64_encode(fread($f,filesize($file) )))."\n";
if (!@
mail("$to""$subj"$zag$head))
return 
0;
else
return 
1;
}


//Получаем данные из формы
if(isset($submit)):
//Проверяем полученные из формы данные
$from trim(html_filter($from));
$to trim(html_filter($to));
$subj trim(html_filter($subj));
$text trim(html_filter($text));
$text str_replace("\n""<br>\n"$text);
$filename trim(html_filter($file_name));
//Если прикреплен файл
if($filename!="" and $file_size>0):
if(
XMail($from$to$subj$text$filename$file)==1){header("Location:?send=ok");}
endif;
//Если Не прикреплен файл
if($filename=="" or $file_size==0):
if(
EMail($from$to$subj$text)==1){header("Location:?send=ok");}
endif;
endif;
?>
Добавлено через 1 час 9 минут

Проверил на разных хостах, бывает так, что вообще вместо старта action_mail.php, предлагается его скачать.

Последний раз редактировалось 74ivan74; 16.06.2010 в 21:26.. Причина: Добавлено сообщение
 
Старый 16.06.2010, 21:26
Ссылки
Старый 18.06.2010, 19:47   #2
Сделал так

PHP код:
<?php
session_start
();
$admin '[email protected]';

if ( isset( 
$_POST['sendMail'] ) ) {
  
$name  substr$_POST['name'], 064 );
  
$email   substr$_POST['email'], 064 );
  
$subject substr$_POST['subject'], 064 );
  
$message substr$_POST['message'], 0250 );
  
  
$error '';
  if ( empty( 
$name ) ) $error $error.'<li>Не заполнено поле "Имя"</li>';
  if ( empty( 
$email ) ) $error $error.'<li>Не заполнено поле "E-mail"</li>';
//if ( empty( $subject ) ) $error = $error.'<li>Не заполнено поле "Тема"</li>';
  
if ( empty( $message ) ) $error $error.'<li>Не заполнено поле "Сообщение"</li>';
  if ( !empty( 
$email ) and !preg_match"#^[0-9a-z_\-\.]+@[0-9a-z\-\.]+\.[a-z]{2,6}$#i"$email ) )
    
$error $error.'<li>поле "E-mail" должно соответствовать формату [email protected]</li>';
  if ( !empty( 
$error ) ) {
    
$_SESSION['sendMailForm']['error']   = '<p>При заполнении формы были допущены ошибки:</p><ul>'.$error.'</ul>';
    
$_SESSION['sendMailForm']['name']    = $name;
    
$_SESSION['sendMailForm']['email']   = $email;
//  $_SESSION['sendMailForm']['subject'] = $subject;
    
$_SESSION['sendMailForm']['message'] = $message;
    
header'Location: '.$_SERVER['PHP_SELF'] );
    die();
  }

  if ( !empty( 
$_FILES['file']['tmp_name'] ) and $_FILES['file']['error'] == ) {
    
$filepath $_FILES['file']['tmp_name'];
    
$filename $_FILES['file']['name'];
  } else {
    
$filepath '';
    
$filename '';
  }
  
  
$body "АВТОР:\r\n".$name."\r\n\r\n";
  
$body .= "E-MAIL:\r\n".$email."\r\n\r\n";
//  $body .= "ТЕМА:\r\n".$subject."\r\n\r\n";
  
$body .= "СООБЩЕНИЕ:\r\n".$message;
  
  if ( 
send_mail($admin$body$email$filepath$filename) )
    
$_SESSION['success'] = true;
  else
    
$_SESSION['success'] = false;
  
header'Location: '.$_SERVER['PHP_SELF'] );
  die();
}

// Вспомогательная функция для отправки почтового сообщения с вложением 
function send_mail($admin$body$email$filepath$filename

  
$subject '=?windows-1251?B?'.base64_encode('Заполнена форма на сайте').'?=';
  
$boundary "--".md5(uniqid(time())); // генерируем разделитель
  
$headers "From: ".strtoupper($_SERVER['SERVER_NAME'])." <".$email.">\r\n";    
  
$headers .= "Return-path: <".$email.">\r\n";
  
$headers .= "MIME-Version: 1.0\r\n"
  
$headers .="Content-Type: multipart/mixed; boundary=\"".$boundary."\"\r\n"
  
$multipart "--".$boundary."\r\n"
  
$multipart .= "Content-type: text/plain; charset=\"windows-1251\"\r\n"
  
$multipart .= "Content-Transfer-Encoding: quoted-printable\r\n\r\n";

  
$body quoted_printable_encode$body )."\r\n\r\n";
  
  
$multipart .= $body;
  
  
$file '';
  if ( !empty( 
$filepath ) ) {
    
$fp fopen($filepath"r"); 
    if ( 
$fp ) { 
      
$content fread($fpfilesize($filepath)); 
      
fclose($fp);
      
$file .= "--".$boundary."\r\n"
      
$file .= "Content-Type: application/octet-stream\r\n"
      
$file .= "Content-Transfer-Encoding: base64\r\n"
      
$file .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n"
      
$file .= chunk_split(base64_encode($content))."\r\n"
    }
  }
  
$multipart .= $file."--".$boundary."--\r\n";

  if( 
mail($admin$subject$multipart$headers) ) 
    return 
true;
  else
    return 
false;
}

function 
quoted_printable_encode $string ) {
   
// rule #2, #3 (leaves space and tab characters in tact)
   
$string preg_replace_callback (
   
'/[^\x21-\x3C\x3E-\x7E\x09\x20]/',
   
'quoted_printable_encode_character',
   
$string
   
);
   
$newline "=\r\n"// '=' + CRLF (rule #4)
   // make sure the splitting of lines does not interfere with escaped characters
   // (chunk_split fails here)
   
$string preg_replace '/(.{73}[^=]{0,3})/''$1'.$newline$string);
   return 
$string;
}

function 
quoted_printable_encode_character $matches ) {
   
$character $matches[0];
   return 
sprintf '=%02x'ord $character ) );
}
?>
PHP код:
<?php
if ( isset( $_SESSION['sendMailForm'] ) ) {
  echo 
$_SESSION['sendMailForm']['error'];
  
$name    htmlspecialchars $_SESSION['sendMailForm']['name'] );
  
$email   htmlspecialchars $_SESSION['sendMailForm']['email'] );
  
$subject htmlspecialchars $_SESSION['sendMailForm']['subject'] );
  
$message htmlspecialchars $_SESSION['sendMailForm']['message'] );
  unset( 
$_SESSION['sendMailForm'] );
} else {
  
$name  '';
  
$email   '';
  
$subject '';
  
$message '';
}

if ( isset( 
$_SESSION['success'] ) ) {
  if ( 
$_SESSION['success'] )
    echo 
'<p>Письмо успешно отправлено</p>';
  else
    echo 
'<p>Ошибка при отправке письма</p>';
  unset( 
$_SESSION['success'] );
}
?>
Вот форма

Код HTML:
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="POST" name='contact' enctype="multipart/form-data">
<p><input type="text" name="name" maxlength="64" value="Ваше имя: " class='text' onfocus="this.value = '';" >
<p><input type="text" name="email" maxlength="64" value="Ваш E-mail: " class='text' onfocus="this.value = '';" >
<p><textarea name="message"></textarea><br>
Файл: <input type="file" name="file"><br>
<input type="submit" name="sendMail" value="Отправить" />
</td>
Все в одном php файле, вроде все верно, а не работает, что не так опять.
Пишит письмо отправленно, а письмо не приходит.

Добавлено через 11 часов 2 минуты

Кому нужна форма с прикреплением файлов, то форма выше оказалась рабочей!

Пожалуйста подскажите как прикрепить картинку к

Код:
<input type="submit" name="sendMail" value="Отправить" />
</td>

Последний раз редактировалось 74ivan74; 18.06.2010 в 19:47.. Причина: Добавлено сообщение
 
Старый 19.07.2010, 11:34   #3
Цитата:
Сообщение от 74ivan74 Посмотреть сообщение

Пожалуйста подскажите как прикрепить картинку к

Код:
<input type="submit" name="sendMail" value="Отправить" />
</td>
просто допишите

Код:
<input type="submit" name="sendMail" value="Отправить" class="newStyle1" />
</td>
 
Этот пользователь сказал спасибо vitaly-go за это полезное сообщение:
74ivan74 (19.07.2010)
Старый 24.08.2010, 11:11   #4
1. Проверить, есть ли возможность ВООБЩЕ отправлять почту с хоста, на котором выполняется код отправки почты.
2. Проверить, есть ли возможность принимать почту по адресу назначения.
3. Отправить простое письмо:

mail("[email protected]", "heat", "message");
 
Старый 26.08.2010, 12:29   #5
<html>
<head>
<script language='javascript'>
function check(obj) {
if ( obj.login.value == "" || obj.mail.value == "" || obj.file.value == "") {
alert ("Пожалуйста, заполните поля формы!");
return false;
}
else return true;
}
</script>
</head>
<body>
<?

// ********** form for sending file **********

if ( isset($_POST['login']) ) {
echo "<form method='POST' action='" .$_SERVER['PHP_SELF'] ."' onsubmit='return check(this) '>";
echo "<input type='text' name='login'>";
echo "<input type='text' name='mail'>";
echo "<input type='file' name='file'>";
echo "<input type='submit' value='Отправить'>";
}

// ********** form was submitted **********

else {
$mail = "your E-mail";
$header = "header for chek mail from site appear";
$msg = "Login: ";
$msg .= $_POST['login'];
$msg .= "; E-mail: ";
$msg .= $_POST['mail'];
$ret=mail( $mail, $header , $msg );
}
?>
</body>
</html>
 
Старый 26.08.2010, 12:29
Закрытая тема




Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Форма обратной связи Next08 ASP, Perl, PHP и MySQL 1 03.02.2015 10:27
Как всегда форма обратной связи, что-то не работает 74ivan74 ASP, Perl, PHP и MySQL 3 14.03.2011 21:49
Форма обратной связи chest ASP, Perl, PHP и MySQL 2 09.03.2011 12:47
Нужна платная форма обратной связи 74ivan74 Вакансии 1 27.01.2011 12:45
Размер файла в обратной связи с аттачем KRIKscream ASP, Perl, PHP и MySQL 0 12.09.2010 16:10


Текущее время: 18:54. Часовой пояс GMT +4.

Реклама на форуме Условия размещения рекламы
Биржа ссылок Заработай на сайте!
Дизайнерский форум