Добрый день, есть следующий скрипт:
<?php
session_start();
header( "Content-Type: text/html; charset=UTF-8");
$admin = 'email';
if ( isset( $_POST['sendMail'] ) ) {
$name = substr( $_POST['name'], 0, 64 );
$email = substr( $_POST['email'], 0, 64 );
$subject = substr( $_POST['subject'], 0, 64 );
$message = substr( $_POST['message'], 0, 250 );
// обработка ошибок
$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" должно соответствовать формату somebody@somewhere.ru</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();
}
// формирование письма
$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;
$body = quoted_printable_encode( $body );
$theme = '=?UTF-8?B?'.base64_encode('Заполнена форма на сайте').'?=';
$headers = "From: ".$_SERVER['SERVER_NAME']." <".$email.">\r\n";
$headers = $headers."Return-path: <".$email.">\r\n";
$headers = $headers."Content-type: text/plain; charset=\"UTF-8\"\r\n";
$headers = $headers."Content-Transfer-Encoding: quoted-printable\r\n\r\n";
if ( mail($admin, $theme, $body, $headers) )
$_SESSION['success'] = true;
else
$_SESSION['success'] = false;
header( 'Location: '.$_SERVER['PHP_SELF'] );
die();
}
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_characte r ( $matches ) {
$character = $matches[0];
return sprintf ( '=%02x', ord ( $character ) );
}
?>
Все в нем хорошо только:
а) вот сообщения от него приходят в виде:
�����:
Имя
E-MAIL:
example@domain.com
����:
?????? ? ?????
���������:
Тестовое сообщение
и
6) пользователь принажатии кнопки отправить получает белый экран (хотелось бы чтобы он оставался на странице и получал что то типа всплывающего "ваше сообщение отправлено"
Кто может помочь конкретными сторчками кода в конкретные места этого скрипта?
1. burndalen - 01 Мая, 2011 - 08:30:43 - перейти к сообщению
2. molchun201 - 01 Мая, 2011 - 10:56:16 - перейти к сообщению
а) кодировку нада править (паходу самого сервера, если используешь денвер)
б) ну эт очень просто, даж писать не буду
б) ну эт очень просто, даж писать не буду
3. burndalen - 01 Мая, 2011 - 13:53:39 - перейти к сообщению
Ну что ж там обычный хостинг с поддержкой PHP
4. molchun201 - 01 Мая, 2011 - 15:46:32 - перейти к сообщению
header( "Content-Type: text/html; charset=UTF-8");
замени на
header( "Content-Type: text/html; charset=windows-1251");
замени на
header( "Content-Type: text/html; charset=windows-1251");
5. burndalen - 01 Мая, 2011 - 16:00:11 - перейти к сообщению
сейчас код выгляд вот так:
CODE (htmlphp):
скопировать код в буфер обмена
скопировать код в буфер обмена
- [/code]
- <?php
- header( "Content-Type: text/html; charset=UTF-8");
- $admin = 'email';
- if ( isset( $_POST['sendMail'] ) ) {
- $name = substr( $_POST['name'], 0, 64 );
- $email = substr( $_POST['email'], 0, 64 );
- $subject = substr( $_POST['subject'], 0, 64 );
- $message = substr( $_POST['message'], 0, 250 );
- // обработка ошибок
- $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" должно соответствовать формату somebody@somewhere.ru</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();
- }
- // формирование письма
- $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;
- $body = quoted_printable_encode( $body );
- $theme = '=?UTF-8?B?'.base64_encode('Заполнена форма на сайте').'?=';
- $headers = "From: ".$_SERVER['SERVER_NAME']." <".$email.">\r\n";
- $headers = $headers."Return-path: <".$email.">\r\n";
- $headers = $headers."Content-Type: content=text/html; charset=windows-1251";
- $headers = $headers."Content-Transfer-Encoding: quoted-printable\r\n\r\n";
- if ( mail($admin, $theme, $body, $headers) ){
- $_SESSION['success'] = true;
- echo "ok";
- }
- else
- $_SESSION['success'] = false;
- header( 'Location: '.$_SERVER['PHP_SELF'] );
- die();
- }
- 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];
- }
- ?>
- [code=htmlphp]
Письмо с сервера уходит но пользователь получает на белом фоне вот такой экран:
"ok
Warning: Cannot modify header information - headers already sent by (output started at /var/www/u1635271/data/www/bbapple.ru/send.php:45) in /var/www/u1635271/data/www/bbapp le.ru/send.php on line 49"
что сдесь можно исправить?