PDA

Просмотр полной версии : Flash форма + ПХП


Andriucha
29.09.2008, 17:06
Проблема у меня такая, есть форма во флаше, которая передаёт переменные методом ПОСТ на пхп фаил в корневом каталоге, пхп файл (mail.php) высылает письмо. Все вроде работает. Но мне нужно сделать стобы флаш обращялся не на mail.php, а на другой сервер, например http://www.drugojdomain.ru/email.php . Почему то когда я меняю адресс на другой сервер ничего не работает. В чем проблема

КОД:
on (release) {

loadVariablesNum("http://www.drugojdomain.ru/email.php", 0, "POST");

}

Mur4ik
29.09.2008, 17:25
а как Вы, интересно, передаете данные формы из флеша в php c помошью loadVariablesNum?
эта функция совсем не для этого предназначена, она для загрузки переменных в флеш из внешних источников, а не наоборот...
вот рабочая форма для емейла php+flash

Andriucha
29.09.2008, 18:22
а как Вы, интересно, передаете данные формы из флеша в php c помошью loadVariablesNum?
эта функция совсем не для этого предназначена, она для загрузки переменных в флеш из внешних источников, а не наоборот...
вот рабочая форма для емейла php+flash

Не рфботает и твоя форма, во первых в пхп ошибка, во вторых все равно не пашет. Нажимаешь кнопку сенд и ничего не меняется.

stop();

var oSubmitListener:Object = new Object();
var lvSenderLoad:LoadVars = new LoadVars();
var lvReceiveLoad:LoadVars = new LoadVars();

cbtSend.addEventListener("click", oSubmitListener);

oSubmitListener.click = function(evt:Object):Void
{
trace("ok");

lvSenderLoad.userName = ctiName.text;
lvSenderLoad.userEmail = ctiEmail.text;
lvSenderLoad.userMessage = ctaMessage.text;
lvSenderLoad.sendAndLoad("http://www.isparduodame.lt/m_email.php", lvReceiveLoad);
};

lvReceiveLoad.onLoad = function(bSuccess:Boolean):Void
{
if(bSuccess) {
this.isSentOK ? gotoAndStop("success") : gotoAndStop("failed");
} else {
trace("не удалось получить ответ от сервера");
}
}

xAnToNYx
29.09.2008, 19:43
Помоему можно и через loadVariables

loadVariables ("http://site.com/send_mail.php?subject="+_root.subject+"&message="+_root.message, _root);


В результате пусть скрипт нам возвращает "result=sent" или "result=error"

Mur4ik
29.09.2008, 20:17
Поправляюсь...
в PHP забыл точку с запятой поставить в 4 строчке,
а в FLA имя кнопки отличалось от указанного в обработчике

проверил - работает

updated:

очень уж много писем мне на почту приходит с данной формы, поэтому внесу поправочку, в php файле нужно вместо моего мейла указать ВАШ, и залить все это на ваш хостинг, а так получается, вы тестируете форму но письма приходят мне )

Andriucha
30.09.2008, 12:25
Поправляюсь...
в PHP забыл точку с запятой поставить в 4 строчке,
а в FLA имя кнопки отличалось от указанного в обработчике

проверил - работает

ну форма тепер высилает письма, только вот данные почему то не передаются... Что делать??? :rolleyes:

Почему то когда в компе запускаю все работает, а вот когда на сайт вставляю, при нажатии ОТПРАВИТЬ ничего не меняется но приходит пустое писмо.

Mur4ik
30.09.2008, 17:39
Незнаю в чем Ваша проблема, у меня приходят письма как положено, только сначала они в спам помещались, указал письма со своего хостинга как "не спам" и все ОК...

А Вы адрес ящика в php файле поменяли, а то мне от Вас письма приходят, и кстати не пустые )

KPG
19.03.2010, 22:00
Andriucha
вижу что тема старая, но сам искал примеры работы с формами на Flash и наткнулся на нее, поэтому отвечу, т.к. наверняка еще кто-то столкнется с этой проблемой.

скорее всего вы в php скрипте не принимаете переменные
допишите в самом начале php скрипта следующее:

//получаем все переменные POST и GET
$be_var = $_POST;
foreach ( $be_var as $key => $value ) {
$$key = trim(strip_tags($value));
}
$be_var = $_GET;
foreach ( $be_var as $key => $value ) {
$$key = trim(strip_tags($value));
}

и всё у вас будет работать :-)

Mur4ik
Спасибо за наглядный пример!

Seroy
20.03.2010, 00:04
ну форма тепер высилает письма, только вот данные почему то не передаются... Что делать??? :rolleyes:

Почему то когда в компе запускаю все работает, а вот когда на сайт вставляю, при нажатии ОТПРАВИТЬ ничего не меняется но приходит пустое писмо.

может, в кодировках проблема?
действительно, глянул скрипт - переменные из POST/ GET не прописаны.

Vikky
12.08.2010, 16:54
Я переписала грамотно форму отправки PHP, если кому то понадобится!!!

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


<?php
//$headers .= "Content-type: text/plain; charset=UTF-8\r\n";
$headers .= 'MIME-Version: 1.0' . "\r\n" . 'Content-type: text/html; charset=UTF-8' . "\r\n";
$be_var = $_POST;
foreach ( $be_var as $key => $value ) {
$$key = trim(strip_tags($value));
}
$be_var = $_GET;
foreach ( $be_var as $key => $value ) {
$$key = trim(strip_tags($value));
}
// адрес куда отсылать сообщение
$to = "---------------ВСТАВИТЬ EMAIL КУДА СЛАТЬ------------";

// тема сообщениея
$subject = "----------ТУТ ТЕМУ СООБЩЕНИЯ----------------";
$subject = '=?UTF-8?B?'.base64_encode($subject).'?=';

// формируем сообщение
$message .= "<b>Имя отправителя</b>: " . $userName;
$message .= "<br><br><b><i>КОНТАКТНЫЕ ДАННЫЕ</b></i><br><b>E-mail отправителя</b>: " . $userEmail;
$message .= "<br><br><i><b>СООБЩЕНИЕ</i></b>:<br> " . $userMessage;

// формируем заголовок
$headers .= "From: $userEmail";

// посылаем почту
$isSentOK = mail($to, $subject, $message, $headers);

// предаем пременную $isSentOK, которую считываем во Флеше
echo "isSentOK=" . $isSentOK;
?>

German
12.08.2010, 22:17
Спасибо Vikky, три дня назад искал днем с огнем, в итоге написал, доработал из того что тут нашел. Неприменно Ваш вариант попробую.

in4core
13.08.2010, 03:01
<?
if(!empty($_POST['sender_mail'])
|| !empty($_POST['sender_message'])
|| !empty($_POST['sender_subject'])
|| !empty($_POST['sender_name']))
{
$to = "admin@in4core.com"; // replace with your mail address
$s_name = $_POST['sender_name'];
$s_mail = $_POST['sender_mail'];
$subject = stripslashes($_POST['sender_subject']);
$body = stripslashes($_POST['sender_message']);
$body .= "\n\n---------------------------\n";
$body .= "Mail sent by: $s_name <$s_mail>\n";
$header = "From: $s_name <$s_mail>\n";
$header .= "Reply-To: $s_name <$s_mail>\n";
$header .= "X-Mailer: PHP/" . phpversion() . "\n";
$header .= "X-Priority: 1";
if(@mail($to, $subject, $body, $header))
{
echo 'Письмо успешно отправлено';
} else {
echo 'Отправка прервана, ошибка 344';
}
} else {
echo 'Отправка прервана, ошибка 344';
}
?>



Добавлено через 31 секунду
пока лучше небыло ( + антиспам)

feodus
12.12.2010, 19:30
Подскажите кто в курсе!
Пытаюсь настроить отправку мыла из Flash формы с локальной машины на Gmail адрес.
-Стоит XAMPP.
-Запущен только Апач.

Вот конфиги и исходники:

конфигурационный файл sendmail

[sendmail]

; здесь укажите сервер исходящей почты
smtp_server=smtp.gmail.com


; порт smtp, если обычный режим отправки, то порт будет 25
; если сервер работает в защищенном режиме (TLS), то порт 465, например почта гугла работает через 465 порт

smtp_port=465

; домен по умолчанию (совсем не обязательно)

;default_domain=local

; лог ошибок

error_logfile=error.log

; лог отправки, необходим на стадии тестирования. содержит весь текст переговоров с сервером при отправке.

debug_logfile=debug.log

; Если smtp сервер с авторизацией, укажите логин пароль(без кавычек), если без авторизации ничего не пишите

auth_username=xyz@gmail.com
auth_password=xxxxxxxxx

; если перед отправкой почты сервер требует авторизацию через POP, заполните эти поля

;pop3_server=
;pop3_username=
;pop3_password=

; email адрес, от которого идет отправка, вставится в заголовок "From: "
; если отправка писем идет через mail.ru, здесь обязательно должен быть адрес, через который произведена авторизация.

;force_sender=xyz@gmail.com

; хост, который указывается при авторизации в команде ehlo/helo
; указывайте домен, через который авторизуетесь

hostname=gmail.com


PHP файл, отвечающий за отправку мыла:

<?php
//$headers .= "Content-type: text/plain; charset=UTF-8\r\n";
$headers .= 'MIME-Version: 1.0' . "\r\n" . 'Content-type: text/html; charset=UTF-8' . "\r\n";
$be_var = $_POST;
foreach ( $be_var as $key => $value ) {
$$key = trim(strip_tags($value));
}
$be_var = $_GET;
foreach ( $be_var as $key => $value ) {
$$key = trim(strip_tags($value));
}
// адрес куда отсылать сообщение
$to = "xyz@gmail.com";

// тема сообщениея
$subject = "тема бла-бла-бла";
$subject = '=?UTF-8?B?'.base64_encode($subject).'?=';

// формируем сообщение
$message .= "<b>Имя отправителя</b>: " . $userName;
$message .= "<br><br><b><i>КОНТАКТНЫЕ ДАННЫЕ</b></i><br><b>E-mail отправителя</b>: " . $userEmail;
$message .= "<br><br><i><b>СООБЩЕНИЕ</i></b>:<br> " . $userMessage;

// формируем заголовок
$headers .= "From: $userEmail";

// посылаем почту
$isSentOK = mail($to, $subject, $message, $headers);

// предаем пременную $isSentOK, которую считываем во Флеше
echo "isSentOK=" . $isSentOK;
?>

Часть php.ini, отвечающая за SMTP

[mail function]
; For Win32 only.
; http://php.net/smtp
;SMTP = localhost
; http://php.net/smtp-port
;smtp_port = 25
sendmail_path = "\xampp\sendmail\sendmail.exe -t"

; For Win32 only.
; http://php.net/sendmail-from
;sendmail_from = postmaster@localhost

; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
; http://php.net/sendmail-path
;sendmail_path = "\"I:\server\xampplite\sendmail\sendmail.exe\" -t"

; Force the addition of the specified parameters to be passed as extra parameters
; to the sendmail binary. These parameters will always replace the value of
; the 5th parameter to mail(), even in safe mode.
;mail.force_extra_parameters =

; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename
mail.add_x_header = Off

; Log all mail() calls including the full path of the script, line #, to address and headers
;mail.log = "I:\server\xampplite\apache\logs\php_mail.log"

AS код флешки:

stop();

var oSubmitListener:Object = new Object();
var lvSenderLoad:LoadVars = new LoadVars();
var lvReceiveLoad:LoadVars = new LoadVars();

btnSend.addEventListener("click", oSubmitListener);

oSubmitListener.click = function(evt:Object):Void
{
lvSenderLoad.userName = ctiName.text;
lvSenderLoad.userEmail = ctiEmail.text;
lvSenderLoad.userMessage = ctaMessage.text;
lvSenderLoad.sendAndLoad("http://localhost/mail/send_mail.php", lvReceiveLoad);
trace("посылаем " + ctaMessage.text);
};

lvReceiveLoad.onLoad = function(bSuccess:Boolean):Void
{
if(bSuccess) {
trace(this.isSentOK);
this.isSentOK ? gotoAndStop("success") : gotoAndStop("failed");
} else {
trace("не удалось получить ответ от сервера");
}
}


Пользовался этим тредом и этим тутором http://webi.ru/webi_articles/sendmail_ini.html

Флешка говори что все отправлено...но письмо не приходит...
Подскажите пожалуйста!

wmz38
13.12.2010, 12:32
Яндекс-почта например UTF-8 не видит, а флэш передает данные из формы в UTF-8 - вот код для конвертации из UTF-8 в Win-1251

<?php
//тут данные из переданной флэш формы в кодировке UTF-8
$name = $HTTP_POST_VARS['Name'];
$phone = $HTTP_POST_VARS['Phone'];
$email = $HTTP_POST_VARS['Email'];
$message = $HTTP_POST_VARS['Message'];


// Функция преобразования, чтоб на мыло не приходила абра кадабра для поля "name"
function Utf8ToWin($fcontents) {
$out = $c1 = '';
$byte2 = false;
for ($c = 0;$c < strlen($fcontents);$c++) {
$i = ord($fcontents[$c]);
if ($i <= 127) {
$out .= $fcontents[$c];
}
if ($byte2) {
$new_c2 = ($c1 & 3) * 64 + ($i & 63);
$new_c1 = ($c1 >> 2) & 5;
$new_i = $new_c1 * 256 + $new_c2;
if ($new_i == 1025) {
$out_i = 168;
} else {
if ($new_i == 1105) {
$out_i = 184;
} else {
$out_i = $new_i - 848;
}
}
$out .= chr($out_i);
$byte2 = false;
}
if (($i >> 5) == 6) {
$c1 = $i;
$byte2 = true;
}
}
return $out;
}

//задаем переменной, конвертированное вышеописанной функцией, значение.
$cname = Utf8ToWin($name);

//еще одна функция аналогичная первой
function Utf8ToWin1($fcontents) {
$out = $c1 = '';
$byte2 = false;
for ($c = 0;$c < strlen($fcontents);$c++) {
$i = ord($fcontents[$c]);
if ($i <= 127) {
$out .= $fcontents[$c];
}
if ($byte2) {
$new_c2 = ($c1 & 3) * 64 + ($i & 63);
$new_c1 = ($c1 >> 2) & 5;
$new_i = $new_c1 * 256 + $new_c2;
if ($new_i == 1025) {
$out_i = 168;
} else {
if ($new_i == 1105) {
$out_i = 184;
} else {
$out_i = $new_i - 848;
}
}
$out .= chr($out_i);
$byte2 = false;
}
if (($i >> 5) == 6) {
$c1 = $i;
$byte2 = true;
}
}
return $out;
}
//тоже самое что и выше
$cmessage = Utf8ToWin1($message);

//тут некие настройки почты, темы, даты и времени сообщения
$sendTo = "ваша@почта.ру";
$subject = "Тема сообщения";
$Sender_Time=date("H.i");
$Sender_Date=date("j.m.Y");

$headers = "MIME-Version: 1.0\r\n";
$headers .="Content-type: text/html; charset=windows-1251\r\n";

$msg_body = "Ф.И.О.: <b>\t$cname\n</b><br>";
$msg_body .= "Телефон: <b>\t$phone\n</b><br>";
$msg_body .= "Email: <b>\t$email\n</b><br>";
$msg_body .= "Сообщение отправлено: <b>\t$Sender_Date\n</b> в <b>\t$Sender_Time\n</b><br>";
$msg_body .= "Текст заявки: <br><b>\t$cmessage\n</b><br>";


mail($sendTo, $subject, $msg_body, $headers);

?>

Все работает, вчера намучился но сделал


Добавлено через 2 минуты
У меня вопрос - а кто может помоч написать проверку в АС на корректную вводимость email и phone?

feodus
13.12.2010, 15:10
Я вчера тоже намучился и сделал в том варианте, который был.
Проблема была в неправильном указании пути к sendmail и сам sendmail обновил отсюда http://glob.com.au/sendmail/

Кстати с русским все в порядке... никаких переделок не нужно. По крайней мере в этом варианте.

И вопрос другой появился!
Мне нужно чтоб на присланное письмо, можно было ответить из Gmail, нажав на "Ответить"

Вот код отправки мыла:

<?php
//$headers .= "Content-type: text/plain; charset=UTF-8\r\n";
$headers .= 'MIME-Version: 1.0' . "\r\n" . 'Content-type: text/html; charset=UTF-8' . "\r\n";
$be_var = $_POST;
foreach ( $be_var as $key => $value ) {
$$key = trim(strip_tags($value));
}
$be_var = $_GET;
foreach ( $be_var as $key => $value ) {
$$key = trim(strip_tags($value));
}
// адрес куда отсылать сообщение
$to = "xyz@gmail.com";

// тема сообщениея
$subject = "тема бла-бла-бла";
$subject = '=?UTF-8?B?'.base64_encode($subject).'?=';

// формируем сообщение
$message .= "<b>Имя отправителя</b>: " . $userName;
$message .= "<br><br><b><i>КОНТАКТНЫЕ ДАННЫЕ</b></i><br><b>E-mail отправителя</b>: " . $userEmail;
$message .= "<br><br><i><b>СООБЩЕНИЕ</i></b>:<br> " . $userMessage;

// формируем заголовок
$headers .= "From: $userEmail\r\n";
$headers .= "Reply-To: $userEmail\r\n";
$headers .= "Return-Path: $userEmail\r\n";

// посылаем почту
$isSentOK = mail($to, $subject, $message, $headers);

// предаем пременную $isSentOK, которую считываем во Флеше
echo "isSentOK=" . $isSentOK;
?>

В пункте "//формируем заголовок" две последние строчки как бы должны указать куда отвечать, но при приходе письма в Gmail отвечать получается на адрес аккаунта через который произошла отправка, а не через указанный в "$headers .= "Reply-To: $userEmail\r\n";"

Вот что написано в подробных данных к письму:

от xyz@gmail.com
ответить useremail@gmail.com
кому xyz@gmail.com
дата 13 декабря 2010 г. 13:47
тема бла-бла-бла
отправлено через gmail.com
Поясню - я пользуюсь одним аккаунтом для отправки и получения


Как побороть? А? Нужно чтоб ответ инициировался на $userEmail...