Re: PHP, Java и обратна връзка...
Страшно съм благодарен за направеното. :033: Все пак е доста повече от това което разбирам за бази данни и боравенето с тях. Сега може ли да помрънкам малко :wink:. :) :) :) :)
Следващото в никав случай не искам да се разбира като оплакване или не оценяване на това което си направил. Просто като идеи как да се оптимизират нещата.
1.Необходимо ли е да се създава нова таблица? Първо какво наричаш брой ходове? В шахматен смисъл един ход е последователно еднократно преместване на белите и черните. Или имаш предвид броя премествания. От това което видях базата броя ходове e = fenn_fullmove_number-1 а преместванията могат да се сметнат много лесно използвайки fen_halfmove_clock и fen_fullmove_number.
Код:
if fen_halfmove_clock then prem=fenn_fullmove_number*2-1
else prem=(fenn_fullmove_number-1)*2
2 Защо е необходим изобщо този брой ходове? Не може ли да се запомни просто ской цвят е дадения играч и да се изполва някаква такава проверка:
Код:
if (mycolor= fen_active_color) then refresh_bigpage()
?
Не искам да се създава нова таблица защото и мястото е ограничено. Всъщност хостинага е 50MB дисково пространство( страници, скриптове, картинки, база, поща) и 1GB/месец.
Re: PHP, Java и обратна връзка...
Все си мисля, че с този IFRAME нагазвате в дълбоки :cens:
Аз бих опитал следното:
1) Преименувате страницата, която искате да се обновява
при определени условия (ще я нарека index.php за улеснение) на real_index.php.
rename index.php -> real_index.php
2) Създавате страница index.php (името на оригиналната) със следното съдържание:
index.php:
Код:
<html>
<head>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">
</head>
<frameset rows="0,*" framespacing="0" border="0" frameborder="NO">
<frame src="check_event.php">
<frame src="real_index.php">
</frameset>
<noframes>
<body>
Your browser is very fucked up...
</body>
</noframes>
</html>
3) Създавате страница с име check_event.php със следното съдържание:
check_event.php:
Код:
<HTML>
<HEAD>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">
<?php
// Тук слагате функцията, която проверява дали събитието е настъпило - т.е. дали трябва да се
// обнови цялата страница или не. Примерно:
function check_event() {
$objConnDB=mysql_connect("hostname","sql_username","sql_password")
or die('Could not connect: ' . mysql_error());
mysql_select_db("db_name", $objConnDB)
or die('Could not select database');
$count_q = "SELECT count(*) FROM `ime_na_tablicata`;"
$cr = mysql_query($count_q)
or die('Query failed: ' . mysql_error());
$count = mysql_fetch_array($cr);
$q = "SELECT `ime_na_kolonata` FROM `ime_na_tablicata` WHERE id = '".$count."';"
$qr = mysql_query($q)
or die('Query failed: ' . mysql_error());
$r = mysql_fetch_array($qr);
return $r["ime_na_kolonata"];
}
// приемам, че стойност "yes" означава да се обнови страницата, а всяка друга
// стойност - да продължим с проверките, докато check_event не придобие
// стойност "yes"
If ( check_event() == "yes" ) {
?>
<!-- Comment: Първи случай - променливата е придобила стойност "yes" -->
<meta http-equiv="refresh" content="2;url=">
<?php } else { ?>
<!-- Comment: Втори случай - променливата е придобила стойност различна от "yes" -->
<body onload=setTimeOut('top.location="index.php"',1000)>
<?php } ?>
В първия случай зареждаме index.php, която презарежда check_event.php И real_index.php.
Във втория случай презареждаме САМО check_event.php.
Относно:
- <meta http-equiv="refresh" content="2;">
"2" означава "2 секунди" - всеки 2 секунди ще се проверява условието
чрез обновяване само на check_event.php.
- setTimeOut('top.location="index.php"',1000)
1000 означава 1 секунда - главаната страница ( index.php ) ще се презареди след 1 сек.
Ако искате това да стане без закъснение, достатъчно е да се замени
редът
<body onload=setTimeOut('top.location="index.php"',1000)>
със
<body onload="top.location='index.php'">
_______________________________________________________
Код:
П.П.
Не копирайте кода директно, защото:
- целта му е да покаже само идеята и евентуалния алгоритъм за реализацията и;
- написах го на "прима виста" и не съм го проверявал обстойно за грешки;
- има доста променливи за смяна;
Успех!
Re: PHP, Java и обратна връзка...
След разчовъркване на кода на XOOPS се натъкнах на някои полезни функции.
Кода на скрития фрейм стана следния: Код:
<?
require_once '../../mainfile.php';
require_once XOOPS_ROOT_PATH . '/modules/chess/class/chessgame.inc.php';
require_once XOOPS_ROOT_PATH . '/modules/chess/include/constants.inc.php';
require_once XOOPS_ROOT_PATH . '/modules/chess/include/functions.inc.php';
global $xoopsUser;
function chess_get_game($game_id)
{
global $xoopsDB;
$table = $xoopsDB->prefix('chess_games');
$result = $xoopsDB->query("SELECT * FROM $table WHERE game_id = '$game_id'");
$gamedata = $xoopsDB->fetchArray($result);
#var_dump('chess_get_game, gamedata', $gamedata);#*#DEBUG#
$xoopsDB->freeRecordSet($result);
return $gamedata;
}
$gamedata = chess_get_game($game_id);
$uid = isset($xoopsUser) ? $xoopsUser->getVar('uid') : 0;
if ($uid and (($gamedata['white_uid']==$uid)or($gamedata['black_uid']==$uid))){
if ((($gamedata['white_uid']==$uid)and($gamedata['fen_active_color']=='w'))or
(($gamedata['black_uid']==$uid)and($gamedata['fen_active_color']=='b'))){
?>
<script language="javascript">
parent.location.href=parent.location.href;
</script>
<?
}
}
?>
Тъйкато скрития фрейм е необходим само при изигран наш ход сктития фрем се поставя в game.php По следния начин: Код:
$uid = isset($xoopsUser) ? $xoopsUser->getVar('uid') : 0;
if ($uid and (($gamedata['white_uid']==$uid)or($gamedata['black_uid']==$uid))){
if ((($gamedata['white_uid']==$uid)and($gamedata['fen_active_color']=='w'))or
(($gamedata['black_uid']==$uid)and($gamedata['fen_active_color']=='b'))){
;
}
else
{
echo ('<iframe frameborder="0" src="skrit.php?game_id='.$game_id.'" width="0" height="0" onLoad="setTimeout(\'document.location=document.location\',60000)"></iframe>');
}
}