PHP: условие цикла - PullRequest
       1

PHP: условие цикла

1 голос
/ 12 октября 2011
$result= db_query("SELECT dayoff FROM specificdayoff");
$node->frmdate = mktime(0,0,0, $node->frmdate['month'], $node->frmdate['day'],$node->frmdate['year']);
$node->todate = mktime(0,0,0, $node->todate['month'], $node->todate['day'],$node->todate['year']);
$node->dayoff = mktime(0,0,0, $node->dayoff['month'], $node->dayoff['day'],$node->dayoff['year']);
$data = $node->dayoff;
$frmdate = $node->frmdate;
$todate = $node->todate;    

$iii=0;
while($frmdate!=$todate)
{
    while($data= db_fetch_object($result))
    {
        if($frmdate==$data)
        {
            $iii++;
           //debug
        }

    }
    $frmdate=mktime(0, 0, 0, date("m", $frmdate), date("d", $frmdate)+1, date("Y", $frmdate));
    //debug2     
   }
$diff=$iii

Мне нужно, чтобы каждый элемент $frmdate сравнивался со всем элементом $data. но когда я запускаю этот код, $diff продолжает возвращать 0. Имеется в виду, что с моим оператором if что-то не так, но я не могу понять, что с ним не так.

когда я отлаживаю этот блок кода, оба цикла while не запускаются так, как я хочу 2-й цикл while запускается только один раз. Мне нужно, чтобы 2-й цикл while запускался каждый раз, когда 1-й цикл работает. любая помощь?

запустить отладку так: отлаживать отлаживать отлаживать debug2 debug2 debug2

мне нужно, чтобы он работал так: отлаживать отлаживать отлаживать debug2 отлаживать отлаживать отлаживать debug2 отлаживать отлаживать отлаживать debug2

Ответы [ 3 ]

1 голос
/ 12 октября 2011

$ frmdate - это простая временная метка PHP, созданная mktime (). Затем вы сравниваете это значение временной метки с OBJECT , созданным оператором выборки из базы данных. Временная метка и объект выборки из БД никогда не могут быть равны, поэтому ваш цикл while $iii++ никогда не сможет сработать.

1 голос
/ 12 октября 2011

У меня такое ощущение, что у вас есть отметка времени в вашей таблице specificdayoff.Если это так, то ваш метод db_fetch_object будет извлекать объект со свойством dayoff.

Для доступа к этому вы должны использовать $data->dayoff.Поэтому вам нужно изменить условие if($frmdate==$data) на if($frmdata == $data->dayoff)

Это все предположение, не зная точно, что вернет ваш db_fetch_object.Тем не менее, я до сих пор не понимаю точно, что должно происходить здесь, и это может быть одной из немногих проблем, которые у вас есть.

1 голос
/ 12 октября 2011

Вы сказали, что проблема заключается в следующем:

while($data= db_fetch_object($result))

То, что происходит, заключается в том, что после однократного выполнения этого цикла вы получите все результаты, поэтому ничего не осталось.Повторяя цикл, результатов все равно нет, потому что вы уже загрузили их все.Вам нужно снова настроить $result.Вы не включили это, код, но ищите строку, которая выглядит как $result = ....

Примерно так:

$node->frmdate = mktime(0,0,0, $node->frmdate['month'], $node->frmdate['day'],$node->frmdate['year']);
$node->todate = mktime(0,0,0, $node->todate['month'], $node->todate['day'],$node->todate['year']);
$node->dayoff = mktime(0,0,0, $node->dayoff['month'], $node->dayoff['day'],$node->dayoff['year']);
$data = $node->dayoff;
$frmdate = $node->frmdate;
$todate = $node->todate;    

$iii=0;
while($frmdate!=$todate)
{
    $result= db_query("SELECT dayoff FROM specificdayoff");
    while($data= db_fetch_object($result))
    {
        if($frmdate==$data)
        {
            $iii++;
        }
    }
    $frmdate=mktime(0, 0, 0, date("m", $frmdate), date("d", $frmdate)+1, date("Y", $frmdate));  
}
$diff=$iii
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...