2013-02-21 3 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> 

Ici, je suis en train d'entrer dans la source HTML dans la zone de texte parser1analyse syntaxique de chaîne HTML en utilisant dom

J'attrapais alors les données de la zone de texte à l'aide post dans une chaîne html_str

quand je essayer d'analyser cette chaîne, je commence à obtenir des erreurs.

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

s'il vous plaît aider

Répondre

0

Il pourrait être utile si vous vérifiez en fait, si le formulaire est soumis ou non. Vous devez vérifier et re-vérifier si l'entrée est valide ou non.

// 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

non, le '$ html' semble ne fonctionne pas . Comment puis-je résoudre cette partie du problème? J'ai besoin de l'utilisateur pour entrer la source de la page Web dans la zone de texte et puis j'extrairai des données de ce code source. – debal

+0

Oui, le document n'est pas soumis ... Comment puis-je contourner cela et atteindre ma cible? – debal

+0

@debal vérifier à nouveau ma réponse. –

1

Vous avez ceci:

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

Le message d'erreur indique que $html n'est pas un objet. file_get_html() n'est pas une fonction intégrée, mais vous semblez utiliser PHP Simple HTML DOM Parser. Son API documentation indique qu'il renvoie un objet mais ne fournit pas d'informations supplémentaires. Si l'on regarde le code source:

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; 
} 

... nous pouvons le voir revient FALSE quelques fois:

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

donc j'ose dire que votre champ POST est vide ou trop grand . Vous devriez vraiment vérifier cela avant d'appeler ->load().

Mise à jour:

La fonction file_get_html():

Creates a DOM object from a file or a URL.

Je suppose que ce que vous voulez vraiment est str_get_html():

Creates a DOM object from a string.