Вот и 5 урок начался, извините что так долго не писал. Начнем с самого начала, ведь у нас так и осталось не доделана II часть регистрации, а именно переадресация в игру если персонаж создан. Для этого открываем наш файл Main.mxml и после строчек:
Code
[Bindable] private var patch:String = "img/man1-1.swf"; //текстовая переменная
Записываем:
Code
[Bindable] private var per:String; //переменная для проверки создания чара
Затем удаляем закоментированые мною строки:
Code
//var link:URLRequest = new URLRequest("http://localhost/game.php"); //создаем ссылку //navigateToURL(link, "_self"); //переадресовываем по ссылке
И вместо них вставляем:
Code
per = String(e.result); //переменная равна данным, что считали с php файла if (per == "1"){ //если данные равны 1, то переадресовываем в игру var url:URLRequest = new URLRequest("game.php"); navigateToURL(url,"_self"); }
И подправим немного файл reg_comp.php, добавим в конец кода следующее:
Code
echo "1"; $who_online = mysql_query("UPDATE users SET online='1' WHERE email='".$_SESSION['user']."'"); //записываем что столбец online равен 1 session_register("nameChar"); //регистрируем сессию $_SESSION["name"] = $_POST["nameChar"]; //создаем сессию, которая равна имени персонажа
Как видите появился еще один компонент как online, его мы не создавали в нашей БД, так давайте сделаем это. Заходим в нашу БД, в таблицу users и нажимаем на вкладку SQL в ней записываем такую строку:
Code
ALTER TABLE `users` ADD `online` INT( 1 ) NOT NULL DEFAULT '0'
Теперь нам нужно создать файл, который будет проверять данные, которые пользователь ввел для входа в игру. Назовем его login.php и запишем такие строки:
mysql_select_db($db_name); $query = mysql_query("SELECT * FROM users WHERE email='".$email."' AND pass='".$passHash."'"); //выделяем таблицу users с именем и паролем которые ввел пользователь $row = mysql_fetch_array($query); //преобразовуем в массив $num = mysql_num_rows($query); // Возвращает количество рядов результата запроса if ($num > 0){ //если количество рядов больше 0, то $_SESSION['user'] = $email; //создаем сессию email $_SESSION['ip'] = $row['ip']; //создаем сессию ip $_SESSION['name'] = $row['name']; //создаем сессию имени чара mysql_query("UPDATE users SET online='1' WHERE email='".$email."'"); //делаем пользователя онлайн echo "<script>location.href='game.php';</script>"; //переадресовываем в игру } else { //в другом случае echo "<script>location.href='index.php';</script>"; //переадресовываем на главную } ?>
Еще нам нужно изменить наш файл index.php, для этого добавим этот код в самое начало файла:
Code
<?php session_start(); if (isset($_SESSION['user']) || isset ($_SESSION['ip']) || isset($_SESSION['name'])){ //если есть данные сессии, то удаляем их unset($_SESSION['user']); unset($_SESSION['ip']); unset($_SESSION['name']); } ?>
Это что б не возникало конфликтов в скриптах. Теперь нам нужно создать файл игры — game.php, в нем будет отображаться флешка WindowGame:
private var id_script:uint; private var i:int; private var mesg:String; private var on:String; /* Функция автообновления пользователей онлайн */ private function time():void { onLine(); msg(); var timers:Timer = new Timer(10000); timers.addEventListener(TimerEvent.TIMER, onTimer); timers.start(); }
private function onTimer(e:TimerEvent):void { onLine(); } /* Функция обновления чата */ private function update():void { msg(); } /* Передача сообщения в скрипт */ public function createMess():void { id_script = 1; createMessage.send(); mess_send.text = ""; } /* Вывод сообщений на экран */ public function msg():void { id_script = 2; up.send(); } /* Сколько пользователей онлайн */ public function onLine():void { id_script = 3; online.send(); } /* Прокрутка текста */ private function scrollBody():void { // сдвигаем скролл в конец окна vuvod.verticalScrollPosition = vuvod.maxVerticalScrollPosition + 2; }
public function onResult(e:ResultEvent):void { //обработка результатов и ошибок switch (id_script) { case 1: if (int(e.result) > 0) {
} else { switch (int(e.result)) { case -1: Alert.show("Неудалось подключиться к базе данных. Попробуйте позже", "Ошибка"); break; case -2: Alert.show("Вы ничего не ввели", "Ошибка"); break; } } break; case 2: mesg = String(e.result); vuvod.htmlText = mesg; //вывод сообщений break; case 3: on = String(e.result); onlineUsers.text = on; //вывод сколько пользователей онлайн break; } }
У меня проблемка опять При переходе на goreg.php там где вызиваетса createChar при вводе ника и нажатии даите ничо не происходит но в базу записуетса ник и при поврортном ажатии далее выскакивает окошко мол уже сушествует.
а При входе в адресную строчку выдает http://localhost/“login.php”?email=weiss1985%40gmail.com&pass=1111111 и выдает
Code
<img src="http://s12.ucoz.net/sm/1/sad.gif" border="0" align="absmiddle" alt="sad"> при ручном входе на game.php все норм заходит но чат сам необновляется. надо наживать обновить. :(Object not found!
The requested URL was not found on this server. The link on the referring page seems to be wrong or outdated. Please inform the author of that page about the error.
If you think this is a server error, please contact the webmaster. Error 404 localhost 26.10.2009 12:03:46 Apache/2.2.12 (Win32) DAV/2 mod_ssl/2.2.12 OpenSSL/0.9.8k mod_autoindex_color PHP/5.3.0 mod_perl/2.0.4 Perl/v5.10.0
Добавлено (26.10.2009, 13:08) --------------------------------------------- У меня проблемка опять При переходе на goreg.php там где вызиваетса createChar при вводе ника и нажатии даите ничо не происходит но в базу записуетса ник и при поврортном ажатии далее выскакивает окошко мол уже сушествует.
а При входе в адресную строчку выдает http://localhost/“login.php”?email=weiss1985%40gmail.com&pass=1111111 и выдает
Code
The requested URL was not found on this server. The link on the referring page seems to be wrong or outdated. Please inform the author of that page about the error.
If you think this is a server error, please contact the webmaster. Error 404 localhost 26.10.2009 12:03:46 Apache/2.2.12 (Win32) DAV/2 mod_ssl/2.2.12 OpenSSL/0.9.8k mod_autoindex_color PHP/5.3.0 mod_perl/2.0.4 Perl/v5.10.0
при ручном входе на game.php все норм заходит но чат сам необновляется. надо наживать обновить. :(Object not found!
Просто я писал в Ворде, а он заменяет кавычки на свои, поэтому у тебя была ошибка. Для того что б чат обновлялся при отправке нового сообщения допиши в конец функции createMess():
Это ошибка клиента, нужно 1 раз ввести имя, нажать Далее, потом удалить и второй раз ввести и нажать, тогда перейдет. Можно и убрать эту ошибку, но попытайтесь сделать сами
Это ошибка клиента, нужно 1 раз ввести имя, нажать Далее, потом удалить и второй раз ввести и нажать, тогда перейдет. Можно и убрать эту ошибку, но попытайтесь сделать сами
Че то ничего не выходит Помогите плиз
Сообщение отредактировал Morgan - Суббота, 21 Ноября 2009, 13:21
Что б долго не мучаться в файле reg_comp.php после данного кода
Code
mysql_select_db($db_name); $query = "SELECT * FROM users WHERE name='".$nameChar."'"; $result = mysql_query($query); $num_results = mysql_num_rows($result); if ($num_results > 0) { echo "-2"; exit; }
замените все на этот
Code
echo "1"; $result = mysql_query("UPDATE users SET name='".$nameChar."' WHERE email='".$_SESSION['user']."'"); $who_online = mysql_query("UPDATE users SET online='1' WHERE email='".$_SESSION['user']."'"); echo "1"; session_register("nameChar"); $_SESSION["name"] = $_POST["nameChar"]; $ava = mysql_query("INSERT INTO avatar (gander, vid, path) VALUES ('".$gander."', '".$vid."', '".$patch."')"); echo "1";
А в файле Main.mxml вместо
Code
[Bindable] private var per:String; //переменная для проверки создания чара
Напишите
Code
[Bindable] private var per:int; //переменная для проверки создания чара
и вместо
Code
per = String(e.result); //переменная равна данным, что считали с php файла if (per == "1"){ //если данные равны 1, то переадресовываем в игру var url:URLRequest = new URLRequest("game.php"); navigateToURL(url,"_self"); }
напишите
Code
per = int(e.result); //переменная равна данным, что считали с php файла if (per > 0){ //если данные равны 1, то переадресовываем в игру var url:URLRequest = new URLRequest("game.php"); navigateToURL(url,"_self"); }
Блин не знаю что такое но ничего не выходит(((( При нажатии на далее вообще нечиго не происходит. Хотя в базу все заносится и при ручном переходе на game.php все норм пишет что пользователей 1 и ник пишет. вообщем буду разбираться
$nameChar = trim($_POST['nameChar']); /* переменная равна данным которые пришли от флешки, а именно — имя чара */ $vid = $_POST['avaIm']; /* получаем номер аватарки */ $gander = $_POST['gr']; /* узнаем какой пол выбран */ $patch = $_POST['patch']; /* получаем путь к аватаркам */ /* Проверяем заполнено ли поле имени, если нет, то выводим ошибку */ if ($nameChar == '') { echo "-3"; exit; } /* Проверяем что б имя состояло только с английских букв */ if (!preg_match("/^[a-zA-Z]+$/",$nameChar)) { echo "-4"; exit; } /* Подключаемся к БД, если не удалось, то выводим ошибку */ $data = mysql_connect($base_name, $base_user, $base_pass); if(!$data){ echo "-1"; exit; } /* Проверяем есть ли юзер с данным именем, если есть, то выводим ошибку */ mysql_select_db($db_name); $query = "SELECT * FROM users WHERE name='".$nameChar."'"; $result = mysql_query($query); $num_results = mysql_num_rows($result); if ($num_results > 0) { echo "-2"; exit; } echo "1"; $result = mysql_query("UPDATE users SET name='".$nameChar."' WHERE email='".$_SESSION['user']."'"); $who_online = mysql_query("UPDATE users SET online='1' WHERE email='".$_SESSION['user']."'"); echo "1"; session_register("nameChar"); $_SESSION["name"] = $_POST["nameChar"]; $ava = mysql_query("INSERT INTO avatar (gander, vid, path) VALUES ('".$gander."', '".$vid."', '".$patch."')"); echo "1"; ?>
Сообщение отредактировал Morgan - Суббота, 21 Ноября 2009, 15:08
<?xml version="1.0" encoding="utf-8"?> <mx:Application layout="absolute" width="400" height="300" xmlns:mx="http://www.adobe.com/2006/mxml"> <mx:Script><![CDATA[ import mx.rpc.events.ResultEvent; //при написании кода вручную, эти импорты появляються сами, первый нужен для import mx.controls.Alert; //определения результата, второй для вывода всплывающих окон
private var pic_arr_m:Array = ["img/men1-1.png", "img/men1-2.png", "img/men1-3.png", "img/men1-4.png"]; //создаем масив, который хранит путь к картинкам мужского пола private var pic_arr_w:Array = ["img/women2-1.png", "img/women2-2.png", "img/women2-3.png", "img/women2-4.png"]; //создаем масив, который хранит путь к картинкам женского пола private var i:int = 0; //числовая переменная равна 0 [Bindable] //сам еще не знаю для чего нужна это строка, но без нее выдает ошибку private var gr:String = "1"; //текстовая переменная равна 1 [Bindable] private var patch:String; //текстовая переменная [Bindable] private var per:int; //переменная для проверки создания чара /* Функция создания чара, отправляет данные которые ввел пользователь */ private function onCreateChar():void { createRequest.send(); } /* Функция выбора RadioButton мужского пола */ private function iMen():void { avatar.load(pic_arr_m[0]); //отображает картинку, которая равна 0 в масиве, тоесть первую картинку gr = "1"; //переменная равна 1 simpleLabel.text = "1-1"; //тег <mx:Text> который имеет имя simpleLabel равен "1-1" } /* Функция выбора RadioButton женского пола */ private function iWomen():void { avatar.load(pic_arr_w[0]); //отображает картинку, которая равна 0 в масиве, тоесть первую картинку gr = "2"; //переменная равна 1 simpleLabel.text = "2-1"; //тег <mx:Text> который имеет имя simpleLabel равен "2-1" } /* Функция нажатия кнопки "Пред." */ private function onLeft():void { if (men.selected == true){ //если выбран пол "Мужской", то avatar.load(pic_arr_m[i]); //картинка равняеться переменной "i" i--; //переменная уменьшаеться на 1 if (i == -1) { //если переменная "i" равна -1, то i = 3; //"i" равна 3 } if (i == 0) { //если "i" равна 0, то simpleLabel.text = "1-1"; //тег <mx:Text> который имеет имя simpleLabel равен "1-1" avatar.load(pic_arr_m[0]); //будет отображать первый аватар patch = "img/man1-1.swf"; //путь к аватару } if (i == 1) { simpleLabel.text = "1-2"; avatar.load(pic_arr_m[1]); patch = "img/man1-2.swf"; } if (i == 2) { simpleLabel.text = "1-3"; avatar.load(pic_arr_m[2]); patch = "img/man1-3.swf"; } if (i == 3) { simpleLabel.text = "1-4"; avatar.load(pic_arr_m[3]); patch = "img/man1-4.swf"; } } if (women.selected == true) { //если выбран пол "Женский", то avatar.load(pic_arr_w[i]); //картинка равняеться переменной "i" i--; //переменная уменьшаеться на 1 if (i == -1) { //если переменная "i" равна -1, то i = 3; //"i" равна 3 } if (i == 0) { simpleLabel.text = "2-1"; avatar.load(pic_arr_w[0]); patch = "img/woman2-1.swf"; } if (i == 1) { simpleLabel.text = "2-2"; avatar.load(pic_arr_w[1]); patch = "img/woman2-2.swf"; } if (i == 2) { simpleLabel.text = "2-3"; avatar.load(pic_arr_w[2]); patch = "img/woman2-3.swf"; } if (i == 3) { simpleLabel.text = "2-4"; avatar.load(pic_arr_w[3]); patch = "img/woman2-4.swf"; } } } /* Функция нажатия кнопки "След." */ private function onRight():void { if (men.selected == true){ //если выбран пол "Мужской", то avatar.load(pic_arr_m[i]); //картинка равняеться переменной "i" i++; //переменная увеличиваеться на 1 if (i == 4) { //если переменная "i" равна 4, то i = 0; //"i" равна 0 } if (i == 0) { simpleLabel.text = "1-1"; avatar.load(pic_arr_m[0]); patch = "img/man1-1.swf"; } if (i == 1) { simpleLabel.text = "1-2"; avatar.load(pic_arr_m[1]); patch = "img/man1-2.swf"; } if (i == 2) { simpleLabel.text = "1-3"; avatar.load(pic_arr_m[2]); patch = "img/man1-3.swf"; } if (i == 3) { simpleLabel.text = "1-4"; avatar.load(pic_arr_m[3]); patch = "img/man1-4.swf"; } } if (women.selected == true) { //если выбран пол "Женский", то avatar.load(pic_arr_w[i]); //картинка равняеться переменной "i" i++; //переменная увеличиваеться на 1 if (i == 4) { //если переменная "i" равна 4, то i = 0; //"i" равна 0 } if (i == 0) { simpleLabel.text = "2-1"; avatar.load(pic_arr_w[0]); patch = "img/woman2-1.swf"; } if (i == 1) { simpleLabel.text = "2-2"; avatar.load(pic_arr_w[1]); patch = "img/woman2-2.swf"; } if (i == 2) { simpleLabel.text = "2-3"; avatar.load(pic_arr_w[2]); patch = "img/woman2-3.swf"; } if (i == 3) { simpleLabel.text = "2-4"; avatar.load(pic_arr_w[3]); patch = "img/woman2-4.swf"; } } }
/* Функция определения результата */ private function onResult(e:ResultEvent):void { if (int(e.result) > 0) { //если результат больше 0, тоесть существует, то per = int(e.result); //переменная равна данным, что считали с php файла if (per > 0){ //если данные равны 1, то переадресовываем в игру var url:URLRequest = new URLRequest("game.php"); navigateToURL(url,"_self"); } } else { //в другом случае, если результат не существует, то switch (int(String(e.result))) { //считываем данные case -1 : //если данные равны "-1", то выводим всплывающее окно Alert.show("Неудалось подключиться к базе данных. Попробуйте позже", "Ошибка!"); break; case -2 : //если данные равны "-2", то выводим всплывающее окно Alert.show("Такое имя уже существует", "Ошибка!"); break; case -3 : //если данные равны "-3", то выводим всплывающее окно Alert.show("Вы не ввели имя", "Ошибка!"); break; case -4: //если данные равны "-4", то выводим всплывающее окно Alert.show("Недопустимые символы в имени", "Ошибка!"); break; } } } ]]></mx:Script> <mx:HTTPService id="createRequest" useProxy="false" method="POST" result="onResult(event)" url="reg_comp.php"> <mx:request> <mx:nameChar>{nameChar.text}</mx:nameChar> <mx:avaIm>{simpleLabel.text}</mx:avaIm> <mx:gr>{gr.toString()}</mx:gr> <mx:patch>{patch.toString()}</mx:patch> </mx:request> </mx:HTTPService> <mx:Label id="simpleLabel" x="168" y="64" width="36" height="18"/> <mx:Button label="Далее" click="onCreateChar()" x="140" y="252" width="100" height="22"/> <mx:TextInput id="nameChar" textAlign="center" x="111" y="222" width="160" height="22"/> <mx:Image id="avatar" source="img/men1-1.png" x="171" y="93" width="33" height="33"/> <mx:RadioButton id="men" label="Мужской" groupName="gander" selected="true" click="iMen()" x="19" y="41" width="73" height="22"/> <mx:RadioButton id="women" label="Женский" groupName="gander" click="iWomen()" x="19" y="67" width="74" height="22"/> <mx:Label text="Имя" x="176" y="198" width="36" height="18"/> <mx:Button label="Пред." click="onLeft()" x="78" y="141" width="100" height="22"/> <mx:Button label="След." click="onRight()" x="200" y="141" width="100" height="22"/> </mx:Application>
Сообщение отредактировал Morgan - Суббота, 21 Ноября 2009, 15:14