PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Страниц (1): [1]
Найдено сообщений: 14
burndalen
Отправлено: 04 Мая, 2011 - 15:04:27 • Тема: Огранка код • Форум: Кодировки и все смежное
Ответов: 7 Просмотров: 3054
Zuldek
Ок я тогда подожду когда у вас будет время, так как сам в этом очень плохо разбираюсь а это нужно сделать себе на раз
burndalen
Отправлено: 04 Мая, 2011 - 14:46:41 • Тема: Огранка код • Форум: Кодировки и все смежное
Ответов: 7 Просмотров: 3054
Zuldek
Вы большой молодец вы могли бы уже своими мысли вставить уже в готовый скрипт его код выше? И нужен ли исходик html страницы где форма для этого?
burndalen
Отправлено: 04 Мая, 2011 - 14:18:40 • Тема: Огранка код • Форум: Кодировки и все смежное
Ответов: 7 Просмотров: 3054
Добрый день, всем, есть следующий код PHP скрипта формы обратной связи:
CODE (
htmlphp ):
скопировать код в буфер обмена
[/code]
<? php
header ( 'Content-Type: text/html; charset=Windows-1251' ) ; echo 'Ваше письмо отправлено...' ;
$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' ] ) ; // перенаправление в корневую страницу если есть ошибки
}
$body = "АВТОР:" . $name . " E-MAIL" . $email . " ТЕМА:" . $subject . " СООБЩЕНИЕ:" . $message ;
if ( mail ( $admin , "Заполнена форма на сайте" , $body ) ) { $_SESSION [ 'success' ] = true ;
echo "Сообщение успешно отправлено" ;
}
else
{
$_SESSION [ 'success' ] = false ;
header ( 'Location: ' . $_SERVER [ 'PHP_SELF' ] ) ; }
?>
[code=htmlphp]
Достаточно добротный и рабочий код, но есть две хорошоватости:
1) письма с заполненной формы приходят в непонятной кодировке;
2) после нажатия кнопки отправить пользователь получает белый экран с собщением что оно успешно ушло, хотелось бы конечно чтобы это напись возникала всплывающе, на той же странице не давая белый экран.
У кого какие мысли, да под мыслями конечно автор темы понимает конкретные строчки кода
burndalen
Отправлено: 03 Мая, 2011 - 10:35:16 • Тема: Подправить PHP код • Форум: Кодировки и все смежное
Ответов: 15 Просмотров: 8629
Не много подправив синтаксические ошибки код сейчас выглядит вот так:
CODE (
text ):
скопировать код в буфер обмена
<?php
if(isset($_GET["mail"]))
echo 'Ваше письмо отправлено...';
session_start();
$admin = '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 = "АВТОР:".$name." E-MAIL".$email." ТЕМА:".$subject." СООБЩЕНИЕ:".$message;
if ( mail($admin, "Заполнена форма на сайте", $body) ){
$_SESSION['success'] = true;
header( 'Location: '.$_SERVER['PHP_SELF'].'?mail=1');
}
else
{
$_SESSION['success'] = false;
header( 'Location: '.$_SERVER['PHP_SELF'] );
die();
}
?>
Соответственно проблемы сохранились те же, а именно:
1) проблема с кодировкой в приходящих с заполненной формы писем;
2) пользователь получает белый экран вместо сообщения ваше письмо успешно отправлено.
нужен help ;)
burndalen
Отправлено: 02 Мая, 2011 - 17:12:52 • Тема: Подправить PHP код • Форум: Кодировки и все смежное
Ответов: 15 Просмотров: 8629
CODE (
htmlphp ):
скопировать код в буфер обмена
[/code]
<? php
echo 'Ваше письмо отправлено...' ;
$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' ] ) ; // перенаправление в корневую страницу если есть ошибки
}
$body = "АВТОР:" . $name . " E-MAIL" . $email . " ТЕМА:" . $subject . " СООБЩЕНИЕ:" . $message ;
if ( mail ( $admin , "Заполнена форма на сайте" , $body ) ) { $_SESSION [ 'success' ] = true ;
header ( 'Location: ' . $_SERVER [ 'PHP_SELF' ] . '?mail=1' ) ; }
else
{
$_SESSION [ 'success' ] = false ;
header ( 'Location: ' . $_SERVER [ 'PHP_SELF' ] ) ; }
?>
[code=htmlphp]
Верно?
burndalen
Отправлено: 02 Мая, 2011 - 07:30:59 • Тема: Подправить PHP код • Форум: Кодировки и все смежное
Ответов: 15 Просмотров: 8629
вот сейчас код выглядит весь вот так:
CODE (
htmlphp ):
скопировать код в буфер обмена
[/code]
<? php
echo 'Ваше письмо отправлено...' ;
$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' ] ) ; // перенаправление в корневую страницу если есть ошибки
}
$body = "АВТОР:" . $name . " E-MAIL" . $email . " ТЕМА:" . $subject . " СООБЩЕНИЕ:" . $message ;
if ( mail ( $admin , "Заполнена форма на сайте" , $body ) ) { $_SESSION [ 'success' ] = true ;
header ( 'Location: ' . $_SERVER [ 'PHP_SELF' ] . '?mail=1' ) ; }
else
$_SESSION [ 'success' ] = false ;
header ( 'Location: ' . $_SERVER [ 'PHP_SELF' ] ) ; }
?>
[code=htmlphp]
burndalen
Отправлено: 01 Мая, 2011 - 16:08:53 • Тема: Подправить PHP код • Форум: Кодировки и все смежное
Ответов: 15 Просмотров: 8629
[quote=molchun201][/quote]
А поконкретней? Я код то весь выложил скажите что и где убрать или добавить в какой строке?
burndalen
Отправлено: 01 Мая, 2011 - 16:00:11 • Тема: Подправить PHP код • Форум: Кодировки и все смежное
Ответов: 15 Просмотров: 8629
сейчас код выгляд вот так:
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' ] ) ; // перенаправление в корневую страницу если есть ошибки
}
// формирование письма
$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' ] ) ; }
function quoted_printable_encode ( $string ) {
// rule #2, #3 (leaves space and tab characters in tact)
'/[^\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"
что сдесь можно исправить?
burndalen
Отправлено: 01 Мая, 2011 - 08:30:43 • Тема: Подправить PHP код • Форум: Кодировки и все смежное
Ответов: 15 Просмотров: 8629
Добрый день, есть следующий скрипт:
<?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): [1]
Powered by ExBB FM 1.0 RC1. InvisionExBB