SHOORIK | Дата: Четверг, 24.05.2012, 13:38 | Сообщение # 1 |
Человечище
Группа: Администраторы
Сообщений: 23
Награды: 5
Репутация: 41
Статус: Offline
| Урок 5 Создание чата (php, FD, MySQL)
Вот и 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 и запишем такие строки:
Code <?php session_start();
include "conf.php";
$email = $_POST['email']; $passHash = md5($_POST['pass']);
$data = mysql_connect($base_name, $base_user, $base_pass); if(!$data){ echo "<BR>"; echo mysql_error(); die(); }
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:
Code <?php session_start();
if (isset($_SESSION['user'])) { //если сессию игрока существует, то выводим флешку ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="ru" xml:lang="ru"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta name="description" content="Браузерная Флеш игра BTG" /> <meta name="keywords" content="игра, флеш, браузер, BTG, игроки." /> <link rel="stylesheet" href="style.css" type="text/css" /> <title>Евилопия - бессплатная онлайн Flash игра</title> </head> <body> <div id="goreg"> <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="800" height="600" id="reg" align="middle"> <param name="allowScriptAccess" value="sameDomain" /> <param name="allowFullScreen" value="false" /> <param name="movie" value="GameWindow.swf" /> <param name="quality" value="high" /> <param name="bgcolor" value="#000000" /> <embed src="GameWindow.swf" quality="high" bgcolor="#000000" width="800" height="600" name="reg" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" /> </object> </div> </body> </html> <?php }else{ //в другом случае переадресовываем на главную echo "<script>location.href='index.php';</script>"; } ?>
Все преготовления сделаны, приступаем к чату. Проведя небольшой опрос я не стал делать смайлы в чате, так как большинство ответов были:
Quote - Зачем, ними никто не пользуеться, только спамеры - Та ну, мороки много, лучше побыстрее урок пиши Привожу код чата, прокоментирован, как всегда, но если возникнут вопросы, то задавайте. Буду рад ответить.
Code <?xml version="1.0" encoding="utf-8"?> <mx:Application creationComplete="time()" layout="absolute" width="800" height="150" xmlns:mx="http://www.adobe.com/2006/mxml"> <mx:Script><![CDATA[ import flash.events.TimerEvent; import flash.net.URLRequest; import mx.rpc.events.ResultEvent; import mx.controls.Alert; import mx.events.ScrollEvent; import flash.utils.Timer;
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; } }
]]></mx:Script> <mx:HTTPService id="createMessage" useProxy="false" method="POST" resultFormat="text" url="send_mess.php" result="onResult(event)"> <mx:request> <mx:mess_send>{mess_send.text}</mx:mess_send> </mx:request> </mx:HTTPService> <mx:HTTPService id="up" useProxy="false" method="POST" resultFormat="text" url="chat.php" result="onResult(event)"/> <mx:HTTPService id="online" useProxy="false" method="POST" resultFormat="text" url="online.php" result="onResult(event)"/> <mx:TextInput id="mess_send" x="26" y="119" width="570" height="22" enter="createMess()"/> <mx:TextArea id="vuvod" editable="false" x="27" y="29" width="750" height="80" valueCommit="scrollBody()"/> <mx:Label text="Игроков в игре:" x="28" y="8" width="97" height="18"/> <mx:Label id="onlineUsers" text="-" x="127" y="8" width="36" height="18"/> <mx:Button label="Отправить" click="createMess()" x="612" y="119" width="100" height="22"/> <mx:Button label="Обновить" click="update()" x="684" y="4" width="90" height="22"/> </mx:Application>
Теперь создадим файл для записи сообщений в БД, назовем его send_mess.php:
Code <?php session_start();
include "conf.php";
$aHours = date("H"); //узнаем сколько часов $aMinutes = date("i"); //узнаем сколько минут $time = $aHours.":".$aMinutes; //задаем отображение времени $mess_send = $_POST['mess_send']; //получаем сообщение $write = $_SESSION['name']; //узнаем имя чара $who = $_POST['who']; //узнаем кому отправляют сообщение /* Выводим ошибку, если ничего не ввели, но нажали кнопку Отправить */ if ($mess_send == "") { echo "-2"; exit; } /* Подключаемся к БД */ $data = mysql_connect($base_name, $base_user, $base_pass); if(!$data){ echo "-1"; exit; } mysql_select_db($db_name); /* Записываем данные в БД */ $query = mysql_query("INSERT INTO chat (msg, time_msg, wrt_user, who) VALUES ('".$mess_send."', '".$time."', '".$write."', '".$who."')"); ?>
Файл для отображения сообщений, назовем его chat.php:
Code <?php include "conf.php";
$data = mysql_connect($base_name, $base_user, $base_pass); mysql_select_db($db_name);
$query = mysql_query("select * from chat"); $query2 = mysql_query("SELECT * FROM users"); $row = mysql_fetch_array($query2); /* Выводим сообщения */ while($line = mysql_fetch_array($query)){ echo "[".$line['time_msg']. "] ".$line['wrt_user']."<a href='info.php?$row[id_user]' target='_blank'>(i)</a>: ".$line['msg']."<br>"; } ?>
И файл вывода сколько пользователей онлайн, назовем его online.php:
Code
<?php include "conf.php";
$data = mysql_connect($base_name, $base_user, $base_pass); mysql_select_db($db_name);
$query = mysql_query("SELECT * FROM users WHERE online='1'"); $online = mysql_num_rows($query);
echo $online; ?>
Вот и 5 урок подошел к концу
найдено в интернете
|
|
| |