Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Прошу помощи по созданию почтовой формы на Flash AS3 (http://www.flasher.ru/forum/showthread.php?t=143038)

mark2010 05.08.2010 17:49

Прошу помощи по созданию почтовой формы на Flash AS3
 
Здравствуйте!

Я самый начинающий флешер, но хочу это освоить. Сделал простую форму - имя, e-mail, тема сообщения, само сообщение. В принципе сообщение шлётся, но:
1. Оно БЕЗ темы (хотя тема написана)
2. Оно БЕЗ текста (хотя текст есть)

Т.е. просто присылается пустое сообщение.

Вот что наваял (это сборник моих идей и решений с этого замечательного форума )

Код AS3:

w_send.addEventListener(MouseEvent.CLICK, send_mail);
 
 
var var_load: URLLoader = new URLLoader();
var URL_request:URLRequest = new URLRequest( "send.php" );
URL_request.method = URLRequestMethod.POST;
 
function send_mail (e:MouseEvent):void {
 
                var email_data:String = "name=" + w_name.text
      + "&email=" + w_email.text
      + "&subject=" + w_subject.text
      + "&message=" + w_message.text;
 var URL_vars:URLVariables = new URLVariables(email_data);
 URL_vars.dataFormat = URLLoaderDataFormat.TEXT;
 URL_request.data = URL_vars;
 var_load.load(URL_request);
}

В файле send.php всё предельно просто:
PHP код:

<?php
    mail
("my@email"$subject$message,"From: $name <$email>");
?>

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

gloomyBrain 05.08.2010 17:55

Попробуйте немного иначе:
Код AS3:

var postData:Object = new Object();
postData["name"] = w_name.text;
postData["email"] = w_email.text;
postData["subject"] = w_subject.text;
postData["message"] = w_message.text;
 
var URL_vars:URLVariables = new URLVariables(postData);
 
URL_request.data = postData;
var_load.load(URL_request);

Должно работать.

Так же можете попробовать вот это - можно отправлять не только переменные, но и файлы.

mark2010 05.08.2010 17:59

Попробовал.
На этой строке:
Код AS3:

var URL_vars:URLVariables = new URLVariables(postData);

получаю следующее:
Error #1118: Implicit coercion of a value with static type Object to a possibly unrelated type String

PgeorgyV 05.08.2010 18:19

Эту строку же перечеркнули, а значит не нужна она, чего тут не понятного...
И лучше отправлять методом POST.
Код AS3:

URL_request.method = URLRequestMethod.POST;


mark2010 05.08.2010 18:44

PgeorgyV
Прошу прощения, я написал своё сообщение до того как строчка была перечёркнута :)
А по сути, дела не меняет. Я вот думаю, если посмотреть на статусную строчку браузера, то будет видно, что слишком долго длится фаза "Передача данных с домена...". Хотя передавать там считанные байты. И всё равно письмо приходит, но ни одного поля нет.

Вот то что у меня на текущий момент написано:
Код AS3:

w_send.addEventListener(MouseEvent.CLICK, send_mail);
 
 
var var_load: URLLoader = new URLLoader();
var URL_request:URLRequest = new URLRequest( "send.php" );
var postData:Object = new Object();
URL_request.method = URLRequestMethod.POST;
 
function send_mail (e:MouseEvent):void {
 
 
postData["name"] = w_name.text;
postData["email"] = w_email.text;
postData["subject"] = w_subject.text;
postData["message"] = w_message.text;
 
 
 URL_request.data = postData;
 var_load.load(URL_request);
}

Уже мне даже интересно, в чём причина :)

Добавлено через 6 часов 9 минут
Удивительно!
Нашёл самую наибанальнейшую ошибку - переписал php-код в виде:

PHP код:

  $send_letter mail("my@mail"".$_POST['subject']."".$_POST['message'].");
    if (
$send_letter)
    {
        echo 
"success=yes";
    }    
    
    else
    {
        echo 
"success=no";
    } 

AS теперь выглядит следующим образом:
Код AS3:

w_send.addEventListener(MouseEvent.CLICK, send_mail);
 
function send_mail (e:MouseEvent):void {
 
var var_load: URLLoader = new URLLoader();
var URL_request:URLRequest = new URLRequest( "send.php" );
var postData:Object = new Object();
URL_request.method = URLRequestMethod.POST;
postData["name"] = w_name.text;
postData["email"] = w_email.text;
postData["subject"] = w_subject.text;
postData["message"] = w_message.text;
 
var_load.addEventListener(Event.COMPLETE, receive_response);
 
 
 URL_request.data = postData;
 var_load.load(URL_request);
 
 
}
 
function receive_response(e:Event):void {
        var loader:URLLoader = URLLoader(e.target);
        var email_status = new URLVariables(loader.data).success;
 
        if( email_status == "yes" ) {
                message_status.text = "Ваше сообщение отправлено!";
 
        } else {
                message_status.text = "Ошибка отправки!";
        }
}

Естественно, на форму добавлено поле динамического текста под именем message_status.

Так вот суть в том, что один раз письмо замечательно отправилось (в поле было написано "Ваше сообщение отправлено!", но реально пришло пустое письмо без адреса и без ничего.
А вот все последующие разы, хотя я ничего такого не менял - получаю вот такой мат от Flash:

Цитата:

Error: Error #2101: Строка, переданная в URLVariables.decode(), должна быть строкой запроса закодированного URL-адреса и содержать пары имя/значение.
at Error$/throwError()
at flash.net::URLVariables/decode()
at flash.net::URLVariables()
at _fla::MainTimeline/receive_response()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()
Что-то непонятно... я хочу чтобы эта форма заработала! :)

Добавлено через 48 часов 22 минуты
Ну что, больше ни у кого нет идей?

Andriy 10.09.2010 12:06

разобрался с почтой?
 
разобрался с почтой? я на базе твоего свой запустил. Надо для $_POST по другому данные запускать, через &


Часовой пояс GMT +4, время: 10:41.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.