Весь срипт:
<?php
include('db.php');
include('logging.php');
include('position.php');
$left=$_GET['left'];
$top=$_GET['top'];
$type=$_GET['type'];
//Получаем положение клетки left,top ,в которой хотят создать здание.
$query="SELECT `top`, `left` FROM `postreb` WHERE `type`='".$type."'";
$result=mysql_query($query);
$treb=mysql_fetch_assoc($result);
$trebtop=$treb['top'];
$trebleft=$treb['left'];
//Смотрим сколько клеток занимает здание.
function bad(){
//Функция перекрывает кнопку в том месте,куда нажал пользователь,если он снова нажмет на нее,то получит уведомление о том, что здесь нельзя строить.
global $left,$top;
if($position=='top'){
postoptobot($top);
}
?>
<div style="position: absolute; width: 100px; height: 100px; <?php echo "left:$left; bottom:$top";?>" onclick="alert('Здесь нельзя ставить юнитов')">
<img src=" badunit.gif">
</div>
<?php
}
function good(){
//Функция перекрывает кнопку в том месте,куда нажал пользователь,ее изображение предстовляет то здание,которое он хочет вставить,если он снова нажмет на нее,то построит здание.
global $left,$top;
if($position=='top'){
postoptobot($top);
}
?>
<div style="position: absolute; width: 100px; height: 100px; <?php echo "left:$left; bottom:$top";?>" onclick="alert('fasdf')">
<?php
switch($type){
case kazarma:
echo '<img src="kazarma.gif">';
break;
case donjon:
echo '<img src="donjon.gif">';
break;
}
?>
</div>
<?php
}
function already(){
//Функция отмечает те клетки,которые мешают пользователю построить здание.
global $leftsearch,$topsearch;
if($position=='top'){
postoptobot($topsearch);
}
?>
<div style="position: absolute; width: 100px; height: 100px; <?php echo "left:$leftsearch; bottom:$topsearch";?>" >
<img src=" badunit.gif" >
</div>
<?php
}
$top=$top+0;;
$left=$left+0;
for($topsearch=$top;$topsearch>=$top*$trebtop;$topsearch=$topsearch+120){
//Проходим только по области,необходимой для построения здания.
for($leftsearch=$left;$leftsearch>=$left*$trebleft;$leftsearch=$leftsearch+120){
//Получаем положение юнита,находящегося в текущей клетке.
$query="SELECT `ID` FROM `battle` WHERE `owner`='".$useryou."' AND `left`='".$leftsearch."' AND `top`='".$topsearch."'";
$result=mysql_query($query);
if(mysql_num_rows($result)){
$already[$leftsearch][$topsearch]='push';
$push='TRUE';
}
//Если в текущей клетке находится юнит,заносим его координаты в массив $already,чтобы потом отобразить клетку как мешающую.
//$push присваевается значение true ,в дальнейшем это помешает разместить юнита.
//Получаем положение клетки,если она занята.
$query="SELECT `ID` FROM `pushed` WHERE `owner`='".$useryou."' AND `left`='".$leftsearch."' AND `top`='".$topsearch."'";
$result=mysql_query($query);
if(mysql_num_rows($result)){
$already[$leftsearch][$topsearch]='push';
$push='TRUE';
//Аналогично первому.
}
//Получаем положение клетки,если в ней находится точка здания.
$query="SELECT `ID` FROM `build` WHERE `owner`='".$useryou."' AND `left`='".$leftsearch."' AND `top`='".$topsearch."'";
$result=mysql_query($query);
if(mysql_num_rows($result)){
$already[$leftsearch][$topsearch]='push';
$push='TRUE';
}
//Аналогично первому.
}
}
$left=$_GET['left']+0;
$top=$_GET['top']+0;
exit($push);
//Если push содержит true ,значит хотябы одна клетка не подошла,следовательно обходим все поле,требуемое для размещения здания и помечаем те клетки,которые этому препятствуют.
if($push=='TRUE'){
bad();
$left=$_GET['left']+0;
$top=$_GET['top']+0;
for($topsearch=$top;$topsearch=$topsearch+120;$topsearch>=$top*$trebtop){
for($leftsearch=$left;$leftsearch=$leftsearch+120;$leftsearch>=$left*$trebleft){
if($already[$leftsearch][$topsearch]=='push'){
already();
}
}
}
}
else
{
good();
}
?>
Та самая область с циклом,в которой постоянно выводится ошибка:
for($topsearch=$top;$topsearch>=$top*$trebtop;$topsearch=$topsearch+120){
//Проходим только по области,необходимой для построения здания.
for($leftsearch=$left;$leftsearch>=$left*$trebleft;$leftsearch=$leftsearch+120){
//Получаем положение юнита,находящегося в текущей клетке.
$query="SELECT `ID` FROM `battle` WHERE `owner`='".$useryou."' AND `left`='".$leftsearch."' AND `top`='".$topsearch."'";
$result=mysql_query($query);
if(mysql_num_rows($result)){
$already[$leftsearch][$topsearch]='push';
$push='TRUE';
}
//Если в текущей клетке находится юнит,заносим его координаты в массив $already,чтобы потом отобразить клетку как мешающую.
//$push присваевается значение true ,в дальнейшем это помешает разместить юнита.
//Получаем положение клетки,если она занята.
$query="SELECT `ID` FROM `pushed` WHERE `owner`='".$useryou."' AND `left`='".$leftsearch."' AND `top`='".$topsearch."'";
$result=mysql_query($query);
if(mysql_num_rows($result)){
$already[$leftsearch][$topsearch]='push';
$push='TRUE';
//Аналогично первому.
}
//Получаем положение клетки,если в ней находится точка здания.
$query="SELECT `ID` FROM `build` WHERE `owner`='".$useryou."' AND `left`='".$leftsearch."' AND `top`='".$topsearch."'";
$result=mysql_query($query);
if(mysql_num_rows($result)){
$already[$leftsearch][$topsearch]='push';
$push='TRUE';
}
//Аналогично первому.
}
}
Ошибка:
Fatal error: Maximum execution time of 30 seconds exceeded in Z:\home\localhost\www\game\gamemain\addunits\buildsearch.php on line 110
line бывает и 118 и 98,но за пределами строчек 90-127,в которых находится цикл никогда не выходит.
Если закомментировать цикл,ошибок нету.
Вообще скрипт вызывается через ajax,но пока в нем ошибка,вызываю напрямую и $left,$top не поступают через GET.Также из-за отсутсвия $type тоже пердаваемого по GET нету $trebtop,$trebleft.
Таким образом ,если перед началом цикла сделать
exit($top.$trebtop.$left.$trebleft);
,то выведет 00.
По сути при таком раскладе цикл выглядит как
for($i=0;$i>=0;$i=$i+120) и должен исполниться всего один раз.
В чем ошибка,поясните пожалуйста?
_____________
Чем больше круг знаний - тем больше длина окружности соприкосновения с областью неизвестного - тем больше степень моего незнания.
Лёгкость принятия решений и громкость слов (или число нулей ожидаемой прибыли) свойство окружностей сверхмалого диаметра, стремящихся к точке - к точке зрения.