ИГРОДЕЛ
Войдите на сайт или зарегистрируйтесь!!!

Урок 5 Создание чата (php, FD, MySQL)

Перейти вниз

Вы нашли у нас полезнуюинформацыю

57% 57% 
[ 4 ]
0% 0% 
[ 0 ]
29% 29% 
[ 2 ]
14% 14% 
[ 1 ]
 
Всего проголосовало : 7

Урок 5 Создание чата (php, FD, MySQL)

Сообщение автор Admin в Сб Фев 20, 2010 3:06 pm

Вот и 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 урок подошел к концу, ждите продолжения!!!!!!!! rabbit rabbit
avatar
Admin
Admin

Сообщения : 92
Очки : 280
Репутация : 36
Дата регистрации : 2010-02-20

Посмотреть профиль http://game-dll.mirbb.net

Вернуться к началу Перейти вниз

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения