Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Передача переменной в функцию. Проблема


Автор: Just123 13.3.2012, 15:11
Ребят, я даже не знаю, что за день сегодня такой, но у меня снова неразрешимая проблема, долго бился с ней, но она победила. 
Сил моих больше нет  smile , помогите пожалуйста.

Есть код:
Код

for ($x = '1'; $x < 3; $x++) {
    echo $x;
    $html = file_get_html("http://www.example.ru/catalog/p_".$x.".html");
    // Вытаскиваем все товары со страницы 
    $all = $html->find('.items',0);
    $i = 0;
    
    while($items = $all->children($i++)){
        // Находим и сохраняем ТИП товара в массив $item['type']
        $item['type'][] = $items->find('span',0);

        // Находим и сохраняем НАЗВАНИЕ товара в массив $item['name']
        $name = $items->find('h2',0);
        $span = $name->find('span',0);
        $span->outertext = '';
        $item['name'][] = $name->innertext;
        

    }
    
    // Очищаем память
    $all->clear();
    unset($all);
    $html->clear();
    unset($html);
}


В 3 строке:
Цитата

$html = file_get_html("http://www.example.ru/catalog/p_".$x.".html");


Если убрать $x:
Цитата

$html = file_get_html("http://www.example.ru/catalog/p_4.html");

то все нормально работает.

Как только вместо номера страницы, ставлю переменную $x, возникает ошибка:
Fatal error: Call to a member function find() on a non-object in E:\www\localhost\price\test.php on line 46

46 строчка выглядит так:
Код

        // Находим и сохраняем АРТИКУЛ товара в массив $item['article']
        $article   = $item_info->children(0);
        $item['article'][] = $article->find('span',0)->innertext;


С чем это может быть связано?

Автор: ksnk 13.3.2012, 15:37
Цитата(Just123 @  13.3.2012,  15:11 Найти цитируемый пост)
С чем это может быть связано?

с тем, что
Цитата(Just123 @  13.3.2012,  15:11 Найти цитируемый пост)
Call to a member function find() on a non-object 


Код

// Вытаскиваем всю оставшуюся информацию о товаре 
        $item_info = $items->find('.item_info',0);
        // Находим и сохраняем АРТИКУЛ товара в массив $item['article']
        $article   = $item_info->children(0);


$item->find в не смог найти '.item_info' для текста .../p_0.php, или ../p_[123] а для p_4 - находит.

Автор: Just123 13.3.2012, 15:40
ksnk, Нет, я проверял на одной и той же странице, с этим точно ошибки нет.
Более того, сейчас вообще не работает никак о_О
я даже цикл for убрал, а ошибка осталась.

Код

<?php

//  Подгружаем библиотеку для парсинга HTML
require_once ('simple_html_dom.php');

// Парсим HTML код страницы
$html = file_get_html('http://www.example.ru/catalog/p_1.html');

// Узнаем колличество страниц в каталоге
$total_page = $html->find('.page_numder1',0);
$total_page = $total_page->last_child()->plaintext;
$html->clear();
unset($html);



    
    $html = file_get_html('http://www.example.ru/catalog/p_1.html');
    // Вытаскиваем все товары со страницы 
    $all = $html->find('.items',0);
    $i = 0;
    
    while($items = $all->children($i++)){
        // Находим и сохраняем ТИП товара в массив $item['type']
        $item['type'][] = $items->find('span',0);

        // Находим и сохраняем НАЗВАНИЕ товара в массив $item['name']
        $name = $items->find('h2',0);
        $span = $name->find('span',0);
        $span->outertext = '';
        $item['name'][] = $name->innertext;

        

    }
    
    // Очищаем память
    $all->clear();
    unset($all);
    $html->clear();
    unset($html);


    
    

?>


Добавлено @ 15:45
Хм...
Проблема действительно в этой строке 
Код

$item['price'][] = $price->find('.price',0)->innertext;


но буквально же 5 минут назад, тот же самый код работал, почему сейчас перестал? О_о
HTML код страницы не изменился, только что проверил. 

Автор: Evghenusi 13.3.2012, 15:49
Цитата(Just123 @  13.3.2012,  15:40 Найти цитируемый пост)
я даже цикл for убрал, а ошибка осталась.

зря, мне как раз понравилось значение присвоенное переменной $x  smile 
Цитата(Just123 @  13.3.2012,  15:11 Найти цитируемый пост)
for ($x = '1'; $x < 3; $x++) {


Автор: Just123 13.3.2012, 17:39
Evghenusi, А что с ней не так?

Автор: Evghenusi 13.3.2012, 19:48
всё так, php позволяет smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)