Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   Как создать флеш регистрацию (AS3)? (http://www.flasher.ru/forum/showthread.php?t=173645)

Godwarlock 08.01.2012 05:14

Как создать флеш регистрацию (AS3)?
 
Народ, подскажите пожалуйста на простом примере, как создать флеш регистрацию, используя PhP+AS3? Уже все поисковики перерыл, ничего нужного не нашел, а если и находил то на as2. Например у меня есть обычная таблица с полями "id" "Login" "Pass" "Email" "Color".
Id - идентификатор пользователя
Login - логин пользователя
Pass - пароль пользователя
Email - емэйл пользователя
Color - выбранный цвет пользователя.

Сейчас напишу, как по началу делал я.

1) Создал флеш документ(As3).
2) Кидаю 3 текстового поля, давая им имена например Login Pass Email.
3) Создаю 3 объекта(3 шара разных цветов - красный, черный, синий) и даю им имена Red Black Blue.При клике на шар, выбранный цвет сохраняется, то есть если я кликнул на синий шар и нажал кнопку "Регистрация" то в поле Color записывается Blue.
4) Создаю кнопку "Регистрация" даю ей имя Register

А вот какой код писать для флеша и PhP код я не очень разобрался, что-то пытался - ничего не получалось.
Кому несложно, дайте кратенький рабочий пример для моего случая, ну или хотя бы подобный пример, буду безумно благодарен

fish_r 08.01.2012 06:36

Если совсем кратко то: в запросе с флешки передаете авторизационные данные документу на сервере с расширением php который их обработает.

Есть напр. такое решение (включает авторизацию пользователя), клиентская сторона - не флеш, но сути дела это не меняет.

Godwarlock 08.01.2012 21:07

Это не совсем то, что мне нужно, но пару кодов пригодились, спасибо. А мне нужно создать флеш регистрацию, сам я пытался создать, но ничего не выходит, может есть у кого урок по созданию флеш регистрации?

_SoWa 09.01.2012 19:14

Уроков ты навряд-ли найдешь, попробуй сделать сам?
Например, прочти про HTTPService, напиши какую-нибудь морду на PHP, обратись к ней из флеша, а дальше останется продумать архитектуру приложения/сервиса на сервере и допиливать нужный функционал.

Astraport 09.01.2012 20:56

Когда-то делал по этому примеру

Godwarlock 09.01.2012 21:35

PHP код:

<?php
include ("connect.php");     // подключение к БД
$login $_POST['login'];     // получаем логин
$pass $_POST['pass'];     // получаем пароль
print ("login== ".$login."<br />");
print (
"pass== ".$pass."<br />");
$connect_DB mysql_query("SELECT * FROM users_tbl WHERE login='".$login."' AND pass='".$pass."'"$db);
if (!
$connect_DB || $connect_DB == '') {
    echo 
"-1";   // вывод кода ошибки -1: не удалось подключиться к БД
    
exit;        // закрыть скрипт
}
$result mysql_fetch_array($connect_DB);      //выполняем запрос
if ($result['id'] == '') {
    echo 
"-2";   // вывод кода  -2: такого пользователя нет
    
exit;        // закрыть скрипт
}
echo 
$result['id'];    //выводим код пользователя во флешку



/*print "count(result) == ".count($result)."<br />";
print "result['login'] == ".$result['login']."<br />";
print "result['pass'] == ".$result['pass']."<br />";
print "result['id'] == ".$result['id']."<br />";
print "<hr />";
if ($result)
{
    foreach ($result as $key => $data)
    echo "result[".$key."] == ".$data."\n <br />";
}
else exit ('Нет таких пользователей!');*/
?>
</body>
</html>

ПчП выглядит примерно так, имеем в базе данных:
Id - идентификатор пользователя
login - Логин пользователя
pass - пароль пользователя.
А вот во флеше ничего не получается, может кто подсказать какой as3 написать для выше скрипта? Я просто только начинаю разбираться с флешем, но что-то не очень выходит, создал в нём два вводимых текста и кнопку.

fish_r 10.01.2012 00:43

а что здесь ошметки тегов html делают?

попробуйте проверить (через файербаг, например) что уходит на сервер и что он отвечает

Godwarlock 10.01.2012 02:29

Сори, просто скопировались лишние теги, они не нужны.
В as попробовал:
Код AS3:

import flash.net.*;
 
var urlloader:URLLoader = new URLLoader();
var req:URLRequest = new URLRequest();
req.url = "login.php";
req.method = "POST";

тут он загружает php файл login.php, что дальше делать, я понятия не имею, пытался и так и сяк, ну не получается. Я поэтому на этом форуме и написал, надеясь что умеющие люди не откажутся мне помочь с моей проблемой более подробно...

fish_r 10.01.2012 08:43

Не понял. Как это загружает? Целиком? Или только то, что предназначено для вывода?
Если последнее, то вы получаете некоторую строку которую надо парсить. Это конечно неудобно, лучше структурировать ответ на выходе из php, в xml или json объекты. Но сначала скопируйте сюда то, что ваша флешка получает в ответ с сервера.

Astraport 10.01.2012 10:35

Godwarlock, я вам же дал рабочий пример. С цветными шарами правда не нашел.

Godwarlock 10.01.2012 16:59

Astraport там использование Adobe Flex, мне нужен Action Script 3, а какой as написать я не знаю, пробую и не получается.

Добавлено через 13 часов 7 минут
Вот
Код AS3:

import flash.net.*;
 
var urlloader:URLLoader = new URLLoader();
var req:URLRequest = new URLRequest();
var login:String;    // логин
var pass:String;        // пароль
var id:int;            // код пользователя
var reg_var:URLVariables = new URLVariables(); //хранилище переменных для передачи в скрипт
var reg_req:URLRequest = new URLRequest("reg.php");
var reg_ldr:URLLoader = new URLLoader();
var login_mask:RegExp = /([a-zA-Z]?[0-9a-zA-Z]+[-._+&])*[0-9a-zA-Z]+@([-0-9a-zA-Z]+[.])+[a-zA-Z]{2,6}/; // шаблон для проверки почтового адреса
var pass_mask:RegExp = /[a-zA-Z]?[0-9a-zA-Z]*/; // шаблон для проверки формата пароля
var words:Array = new Array; // массив для хранения разбитых строк
var win_tmr:Timer = new Timer(4000, 1);        //таймер - определяет как долго будет висеть окно ошибок
 
reg_req.method = URLRequestMethod.POST;    //метод POST
reg_btn.addEventListener(MouseEvent.CLICK, onclickiVhod, false, 0, true);    // обработчик нажатия кнопки
 
function onclickiVhod(e:MouseEvent):void {    // обработка нажатия кнопки
  if ((login_bt.text == "")||(pass_bt.text == "")) {     
      return;
  }
/*-----Проверка правильности ввода логина-----*/   
  words = login_bt.text.split(" ");        // выделяем первое слово из строк
  login = words[0];
  if (!login_mask.test(login)) {        // проверка формата
      return;
  }
/*-----Проверка правильности пароля (1-я буква и содержит только цыфры и буквы латыни)-----*/
  words = pass_bt.text.split(" ");        // выделяем первое слово из строки (авось ввели 2 или больше)
  pass = words[0];
  if (!pass_mask.test(pass)) {        // проверка формата
      return;
  }
  if ((pass.length < 4)||(pass.length > 20)) { // проверка на длинну пароля
      return;                 
  }
  reg_ldr.addEventListener(Event.COMPLETE, completeHandler, false, 0, true);    // обработчик загрузки данных из скрипта
  reg_var.log_usr = login;        //загрузка переменных
  reg_var.pas_usr = pass;
  reg_req.data = reg_var;
  reg_ldr.dataFormat = URLLoaderDataFormat.TEXT;        // определяем формат получения данных
  try {
      reg_ldr.load(reg_req);    // передаем переменные в скрипт и получаем результат
 
 trace ('reg_req == '+ reg_req.data); // ????????????????????????????????????????
  }
  catch (err:Error) {   
  }
}
 
function completeHandler(e:Event):void { //обработка результатов от скрипта
  reg_ldr.removeEventListener(Event.COMPLETE, completeHandler);
  id = int(Number(e.target.data));    //записываем результат как номер пользователя (число больше 0) или код ошибки (- число)
  if (id < 0) {        // обработка кодов ошибок
      return;
  }
trace ('id == '+ id);
 
}

А вот PhP

PHP код:

<?php
include ("connect.php");     // подключение к Базе данных
echo $login $_POST['login'];     // получаем логин
echo $pass $_POST['pass'];     // получаем пароль
if(!empty($id)){
 if(!empty(
$login)){
    if(!empty(
$pass)){
//Заносим в таблицу по нужному id в базу
       //Отправим ответ о удачной записи
       
echo "true";
    }else{
       
// Обрабатываем ошибку, т.к. нет переменной $pass
       // Отправим ответ о неудаче
       
echo "false";
    }
 }else{        
    
// Обрабатываем ошибку, т.к. нет переменной $login
    // Отправим ответ о неудаче
    
echo "false";
 }
}else{        
  
// Обрабатываем ошибку, т.к. нет переменной $id
  // Отправим ответ о неудаче
  
echo "false";
}
$connect_DB mysql_query("SELECT * FROM users WHERE login='".$login."' AND pass='".$pass."'"$db);
if (!
$connect_DB || $connect_DB == '') {
   echo 
"-1";   // вывод кода ошибки -1: не удалось подключиться к БД
   
exit;        // закрыть скрипт
}
$result mysql_fetch_array($connect_DB);      //выполняем запрос
if ($result['id'] == '') {
   echo 
"-2";   // вывод кода  -2: такого пользователя нет
   
exit;        // закрыть скрипт
}
echo 
$result['id'];    //выводим код пользователя во флешку



/*print "count(result) == ".count($result)."<br />";
print "result['login'] == ".$result['login']."<br />";
print "result['pass'] == ".$result['pass']."<br />";
print "result['id'] == ".$result['id']."<br />";
print "<hr />";
if ($result)
{
   foreach ($result as $key => $data)
   echo "result[".$key."] == ".$data."\n <br />";
}
else exit ('Нет таких пользователей!');*/
?>

Но не работает

ded100let 15.01.2012 18:19

Кашу пишете, если честно. Попробуйте проверить PHP отдельно, переставив с $_POST на $_GET. Если будет функционировать, то ищите проблему в AS. Для начала не лепите так много условных операторов и прочих "фишек", а используйте только необходимый код для проверки "связи" с PHP. Как только "связь" будет установлена, то можно "наращивать" код. Так Вам будет легче находить ошибки на первых парах.

вот Вам примерный код для общения с сервером (возможны ошибки)

Код AS3:

package  {
 
        import flash.events.Event;
        import flash.events.IOErrorEvent;
        import flash.events.EventDispatcher;
        import flash.net.URLVariables;
        import flash.net.URLRequest;
        import flash.net.URLLoader;
        import flash.net.URLRequestMethod;
        import flash.net.URLLoaderDataFormat;
 
        public class Server extends EventDispatcher {
 
                public static const COMPLETE:String = "COMPLETE";
                public static const ERROR:String = "ERROR";
                private var loader:URLLoader;
                private var req:URLRequest;
                private var sendVars:URLVariables;
                private var getVars:URLVariables;
 
                public function Server () {
                        req = new URLRequest();
                        req.method = URLRequestMethod.POST;
                        req.url = "http://site.com/";
 
                        loader = new URLLoader();
                }
 
                public function addVars (name:String, value:*) :void {
                        if (!sendVars) sendVars = new URLVariables();
 
                        sendVars[name] = value;
                }
 
                public function send () :void {
                        req.data = sendVars;
 
                        loader.addEventListener(Event.COMPLETE, onComplete);
                        loader.addEventListener(IOErrorEvent.IO_ERROR, onError);
                        loader.dataFormat = URLLoaderDataFormat.VARIABLES;
                        loader.load(req);
 
                        // #
                        trace("send");
                        deepTrace(sendVars);
                }
 
                private function onComplete (e:Event) :void {
                        loader.removeEventListener(Event.COMPLETE, onComplete);
                        loader.removeEventListener(IOErrorEvent.IO_ERROR, onError);
 
                        getVars = new URLVariables();
                        getVars.decode(e.currentTarget.data);
 
                        // #
                        trace("get");
                        deepTrace(getVars);
 
                        dispatchEvent(new Event(Server.COMPLETE));
                }
 
                private function onError (e:Event) :void {
                        loader.removeEventListener(Event.COMPLETE, onComplete);
                        loader.removeEventListener(IOErrorEvent.IO_ERROR, onError);
 
                        dispatchEvent(new Event(Server.ERROR));
                }
 
                public function getVar (name:String) {
                        if (getVars[name]) {
                                return getVars[name];
                        }
                        return undefined;
                }
 
                private function deepTrace (obj:*) : void {
                        for (var val:* in obj) {
                                trace('[' + typeof(obj[val]) + '] ' + val + ' => ' + obj[val]);
                        }
                }
        }
}

а так использовать

Код AS3:

package  {
 
        import flash.display.Sprite;
        import flash.events.*;
 
        public class Main extends Sprite {
 
                public function Main () {
 
                        var loader:Server = new Server();
                                loader.addVars("id", 243);
                                loader.addVars("login", "login");
                                loader.addVars("password", "123456");
 
                                loader.addEventListener(Server.COMPLETE, complete);
                                loader.addEventListener(Server.ERROR, error);
                                loader.send();
                }
 
                private function complete (e:Event) :void {
                        e.currentTarget.removeEventListener(Server.COMPLETE, complete);
                        e.currentTarget.removeEventListener(Server.ERROR, error);
                        trace(e.currentTarget.getVar("var"));
                }
 
                private function error (e:Event) :void {
                        e.currentTarget.removeEventListener(Server.COMPLETE, complete);
                        e.currentTarget.removeEventListener(Server.ERROR, error);
 
                        trace("error");
                }
        }
}



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

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