2013-02-21 5 views
0
<html> 

<head> 
<?PHP 
include('simple_html_dom.php'); 
?> 
<title> 

</title> 
</head> 

<body> 
<form name ="form1" method ="POST" ACTION="parser.php"> 
<input type="text" name="parser1" style="height:200px; width:200pt;"></br></br> 
<input type="submit" value="Submit"></br></br> 
</form> 

<?php 

$html_str = $_POST['parser1']; 

// Create DOM from URL or file 
$html = file_get_html($html_str); 
$html->load(' 
<form name="form1" action="parser.php" method="post"> 
<input type="text" name="parser1"> 
</form>'); 

// Get the form action 
foreach($html->find('form') as $element) 
    echo $element->action . '<br>'; 

// Get the input name  
foreach($html->find('input') as $element) 
    echo $element->name . '<br>'; 
?> 
</body> 

</html> 

Здесь я пытаюсь ввести исходный HTML в текстовое поле parser1HTML строка синтаксического анализа с использованием дом

Я тогда ловила данные из текстового поля, используя запись в строку html_str

, когда я попробуйте разобрать эту строку, я начинаю получать ошибки.

Fatal error: Call to a member function load() on a non-object in /home/public_html/parser.php on line 24

пожалуйста, помогите

ответ

0

Это может помочь, если вы на самом деле проверить, если форма отправлена ​​или нет. Вы должны проверить и повторно проверить, действительно ли введен вход или нет.

// check if it's a POST request 
if($_SERVER['REQUEST_METHOD'] === 'POST') { 
    // check if parser1 is not empty 
    if(!empty($_POST['parser1'])) { 
     $input = $_POST['parser1']; 

     if(filter_var($input, FILTER_VALIDATE_URL)) { // looks like an URL 
      $html = file_get_html($input); // download URL 
     } else { // lets assume it's HTML, because it's not an URL 
      $html = str_get_html($input); 
     } 

     // If something goes wrong here, the input is invalid 
     if(!empty($html)) { 
      // parse DOM document here 
     } else { 
      // There is something wrong with the input 
     } 
    } 
} 
+0

нет, '$ html', кажется, не работает , Как решить эту часть проблемы? Мне нужно, чтобы пользователь вводил источник веб-страницы в текстовое поле, а затем я извлекал данные из этого исходного кода. – debal

+0

Да, документ не отправляется ... как мне обойти это и выполнить свою цель? – debal

+0

@debal снова проверьте мой ответ. –

1

У вас есть это:

$html = file_get_html($html_str); 
$html->load(' 
<form name="form1" action="parser.php" method="post"> 
<input type="text" name="parser1"> 
</form>'); 

сообщение об ошибке говорит, что $html не является объектом. file_get_html() не является встроенной функцией, но вы, кажется, используете PHP Simple HTML DOM Parser. Его API documentation говорит, что он возвращает объект, но не предоставляет дополнительную информацию. Если посмотреть на исходный код:

function file_get_html($url, $use_include_path = false, $context=null, $offset = -1, $maxLen=-1, $lowercase = true, $forceTagsClosed=true, $target_charset = DEFAULT_TARGET_CHARSET, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT, $defaultSpanText=DEFAULT_SPAN_TEXT) 
{ 
    // We DO force the tags to be terminated. 
    $dom = new simple_html_dom(null, $lowercase, $forceTagsClosed, $target_charset, $stripRN, $defaultBRText, $defaultSpanText); 
    // For sourceforge users: uncomment the next line and comment the retreive_url_contents line 2 lines down if it is not already done. 
    $contents = file_get_contents($url, $use_include_path, $context, $offset); 
    // Paperg - use our own mechanism for getting the contents as we want to control the timeout. 
    //$contents = retrieve_url_contents($url); 
    if (empty($contents) || strlen($contents) > MAX_FILE_SIZE) 
    { 
     return false; 
    } 
    // The second parameter can force the selectors to all be lowercase. 
    $dom->load($contents, $lowercase, $stripRN); 
    return $dom; 
} 

... мы можем видеть, что это возвращает FALSE несколько раз:

if (empty($contents) || strlen($contents) > MAX_FILE_SIZE) 
{ 
    return false; 
} 

Так что я бы посмел сказать, что ваше поле POST либо пусто, либо слишком большой , Вы должны действительно проверить это, прежде чем звонить ->load().

Update:

file_get_html() функция:

Creates a DOM object from a file or a URL.

Я предполагаю, что вы действительно хотите str_get_html():

Creates a DOM object from a string.

Смежные вопросы