[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите разобраться с циклом.
Larik
Не умею делать раскрывающийся текст,по-этому ,если не нужен весь скрипт,а только тот отрывок где по моему мнению с вероятностью 99% процентов происходит ошибка,то прокрутите вниз.


Весь срипт:
<?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) и должен исполниться всего один раз.
В чем ошибка,поясните пожалуйста?

_____________
Чем больше круг знаний - тем больше длина окружности соприкосновения с областью неизвестного - тем больше степень моего незнания.
Лёгкость принятия решений и громкость слов (или число нулей ожидаемой прибыли) свойство окружностей сверхмалого диаметра, стремящихся к точке - к точке зрения.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.