Цикл с условием

Discussion in 'PHP' started by Seganapa, 25 Jul 2012.

  1. Seganapa

    Seganapa New Member

    Joined:
    8 Jun 2012
    Messages:
    74
    Likes Received:
    0
    Reputations:
    0
    Всем привет!

    Есть функция
    PHP:
    function getPoselenie($townid$id)
    {
    global 
    $curl$cookie_filename$token$nlreq$timef;

    //Проверка возможности фарма 
    $farminfo 'http://ru1.grepolis.com/game/farm_town_info?action=claim_info&town_id='.$townid.'&h='.$token[1].'&json={"id":"'.$id.'","town_id":'.$townid.',"nlreq_id":'.$nlreq[1].'}&_='.$timef;
    curl_setopt($curlCURLOPT_URL$farminfo);
    curl_setopt($curlCURLOPT_REFERER'http://ru1.grepolis.com/game/index?login=1');
    curl_setopt($curlCURLOPT_HTTPHEADER, array('X-REQUESTED-WITH: XMLHttpRequest'));
    $html curl_exec($curl);
    //echo ($html);
    preg_match ('#farm_next_claim_time\\\">(.*?)<\\\/span>#'$html$ready);
    print_r ($ready);
    if (
    $ready[1] == "\u0433\u043e\u0442\u043e\u0432\u043e")
    {
    // Фарм поселений
    //$id - ое поселение
    $farm01 'http://ru1.grepolis.com/game/farm_town_info?action=claim_load&town_id='.$townid.'&h=' .$token[1];
    $post 'json={"target_id":"' $id '","claim_type":"normal","time":300,"town_id":"'.$townid.'","nlreq_id":0}';
    curl_setopt($curlCURLOPT_URL$farm01 );
    curl_setopt($curlCURLOPT_REFERER'http://ru11.grepolis.com/game/index?login=1');
    curl_setopt($curlCURLOPT_POSTtrue);
    curl_setopt($curlCURLOPT_HTTPHEADER, array('X-REQUESTED-WITH: XMLHttpRequest'));
    curl_setopt($curlCURLOPT_POSTFIELDS$post);
    $html curl_exec($curl); 
    return 
    $html;
    continue;
    }
    }
    и есть цикл
    PHP:
    foreach ($posel as $posel1)
    {
    if (isset (
    $posel1['name']))
    getPoselenie ($city[0]['id'], $posel1['id']);
    }
    В общем мне нужно перебрать массив $posel (там id нескольких поселений), вызывая функцию getPoselenie для каждого поселения...

    Но также мне нужно выполнить условие (парсится страница и проверяется возможность фарма)...

    По идее мне нужно выполнять сначала проверку возможности фарма и вывести print_r ($ready)...

    А на деле получается наоборот, он сначала отправляет post а потом проверяет и выводит print_r ($ready); или ... не пойму что происходит...

    Что не так???

    Вот что я получаю после первого запуска скрипта:
    Array ( [0] => farm_next_claim_time\">\u0433\u043e\u0442\u043e\u0432\u043e<\/span> [1] => \u0433\u043e\u0442\u043e\u0432\u043e ) Array ( )
    Notice: Undefined offset: 1 in Y:\home\Sigiz.ru\www\Index.php on line 96
    [Денвер: показать возможную причину ошибки]Array ( )
    Notice: Undefined offset: 1 in Y:\home\Sigiz.ru\www\Index.php on line 96
    Array ( )
    Notice: Undefined offset: 1 in Y:\home\Sigiz.ru\www\Index.php on line 96
    Array ( )
    Notice: Undefined offset: 1 in Y:\home\Sigiz.ru\www\Index.php on line 96
    Array ( )
    Notice: Undefined offset: 1 in Y:\home\Sigiz.ru\www\Index.php on line 96
    Array ( )
    Notice: Undefined offset: 1 in Y:\home\Sigiz.ru\www\Index.php on line 96
    Array ( )
    Notice: Undefined offset: 1 in Y:\home\Sigiz.ru\www\Index.php on line 96

    Вот что после второго:
    Array ( [0] => farm_next_claim_time\">0:03:16<\/span> [1] => 0:03:16 ) Array ( [0] => farm_next_claim_time\">\u0433\u043e\u0442\u043e\u0432\u043e<\/span> [1] => \u0433\u043e\u0442\u043e\u0432\u043e ) Array ( )
    Notice: Undefined offset: 1 in Y:\home\Sigiz.ru\www\Index.php on line 96
    [Денвер: показать возможную причину ошибки]Array ( )
    Notice: Undefined offset: 1 in Y:\home\Sigiz.ru\www\Index.php on line 96
    Array ( )
    Notice: Undefined offset: 1 in Y:\home\Sigiz.ru\www\Index.php on line 96
    Array ( )
    Notice: Undefined offset: 1 in Y:\home\Sigiz.ru\www\Index.php on line 96
    Array ( )
    Notice: Undefined offset: 1 in Y:\home\Sigiz.ru\www\Index.php on line 96
    Array ( )
    Notice: Undefined offset: 1 in Y:\home\Sigiz.ru\www\Index.php on line 96

    Т.е. с каждым запуском скрипта, он на одну позицию продвигает цикл...
     
    #1 Seganapa, 25 Jul 2012
    Last edited: 25 Jul 2012
  2. Seganapa

    Seganapa New Member

    Joined:
    8 Jun 2012
    Messages:
    74
    Likes Received:
    0
    Reputations:
    0
    Вся проблема видимо в $ready[1]

    При первом проходе цикла нормально парсится, а далее возвращается пустой массив...

    В чем может быть причина? Может есть какая то особенность отправки get и получения ответа через цикл?
     
  3. Seganapa

    Seganapa New Member

    Joined:
    8 Jun 2012
    Messages:
    74
    Likes Received:
    0
    Reputations:
    0
    Проблема заключается в том, что на втором проходе цикла, скрипт вместо Get делает post запрос, при том, что в первый раз все отправляется правильно...

    Проблема здесь:
    $farminfo = 'http://ru1.grepolis.com/game/farm_town_info?action=claim_info&town_id='.$townid.'&h='.$token[1].'&json={"id":"'.$id.'","town_id":'.$townid.',"nlreq_id":'.$nlreq[1].'}&_='.$timef;
    curl_setopt($curl, CURLOPT_URL, $farminfo);
    curl_setopt($curl, CURLOPT_REFERER, 'http://ru1.grepolis.com/game/index?login=1');
    curl_setopt($curl, CURLOPT_HTTPHEADER, array('X-REQUESTED-WITH: XMLHttpRequest'));
    $html = curl_exec($curl);

    Не могу понять как исправить...
     
  4. patcher

    patcher Banned

    Joined:
    15 Dec 2009
    Messages:
    190
    Likes Received:
    37
    Reputations:
    10
    смею предположить, что после первого прохода опция CURLOPT_POST остается True, из-за чего при следующих итерациях отправляется именно POST запрос. потому для того чтобы избежать этого, явно указывай при отправке GET запроса, что это GET:
    Code:
    //Проверка возможности фарма 
    $farminfo = 'http://ru1.grepolis.com/game/farm_town_info?action=claim_info&town_id='.$townid.'&h='.$token[1].'&json={"id":"'.$id.'","town_id":'.$townid.',"nlreq_id":'.$nlreq[1].'}&_='.$timef;
    curl_setopt($curl, CURLOPT_URL, $farminfo);
    curl_setopt($curl, CURLOPT_REFERER, 'http://ru1.grepolis.com/game/index?login=1');
    curl_setopt($curl, CURLOPT_HTTPHEADER, array('X-REQUESTED-WITH: XMLHttpRequest'));
    [COLOR=Red]curl_setopt($curl, CURLOPT_POST, false);[/COLOR]
    $html = curl_exec($curl); 
    
     
  5. Seganapa

    Seganapa New Member

    Joined:
    8 Jun 2012
    Messages:
    74
    Likes Received:
    0
    Reputations:
    0
    Точно!!! Блин, как все просто оказалось... + в карму... Пол дня потерял! СПАСИБО!
     
  6. Art!P

    Art!P Elder - Старейшина

    Joined:
    22 Jan 2008
    Messages:
    169
    Likes Received:
    28
    Reputations:
    5
    ОФ. Сега вас накрыла эта онлайн игрушка. Есть впечатление что рисуете гейм-бота, или какой-то мега чит. Что это, реальный биз?